69 lines
2.6 KiB
Go
69 lines
2.6 KiB
Go
package main
|
||
|
||
import "testing"
|
||
|
||
// TestRouteLayer0 is the heuristic golden set (RU+EN). The critical property is the
|
||
// safe floor: anything substantive must land on grok_direct, and a long message that
|
||
// merely starts with a greeting must NOT be trivial (no leaking real questions to the
|
||
// cheap model, §8.6).
|
||
func TestRouteLayer0(t *testing.T) {
|
||
cases := []struct {
|
||
body string
|
||
want string
|
||
}{
|
||
// trivial: short greetings/acks and bare arithmetic
|
||
{"привет", routeTrivial},
|
||
{"Привет!", routeTrivial},
|
||
{"спасибо", routeTrivial},
|
||
{"спс", routeTrivial},
|
||
{"ок", routeTrivial},
|
||
{"hi", routeTrivial},
|
||
{"hello", routeTrivial},
|
||
{"thanks", routeTrivial},
|
||
{"thank you", routeTrivial},
|
||
{"ok", routeTrivial},
|
||
{"2+2", routeTrivial},
|
||
{"100 * 50", routeTrivial},
|
||
{"12 / 4 - 1", routeTrivial},
|
||
// web: freshness signals
|
||
{"какие новости сегодня?", routeWebThenGrok},
|
||
{"что сейчас происходит в мире", routeWebThenGrok},
|
||
{"курс доллара сегодня", routeWebThenGrok},
|
||
{"what's the weather today", routeWebThenGrok},
|
||
{"latest news on AI", routeWebThenGrok},
|
||
{"current bitcoin price", routeWebThenGrok},
|
||
// grok_direct: substantive (the safe floor)
|
||
{"посоветуй фильм на вечер", routeGrokDirect},
|
||
{"explain how TCP works", routeGrokDirect},
|
||
{"расскажи историю римской империи", routeGrokDirect},
|
||
{"спасибо, а теперь подробно объясни квантовую запутанность", routeGrokDirect}, // starts w/ ack but long
|
||
{"hi, can you help me debug this Go program?", routeGrokDirect}, // starts w/ hi but a real ask
|
||
{"напиши функцию сортировки на python", routeGrokDirect},
|
||
}
|
||
for _, c := range cases {
|
||
if got := routeLayer0(c.body).Route; got != c.want {
|
||
t.Errorf("routeLayer0(%q) = %q, want %q", c.body, got, c.want)
|
||
}
|
||
}
|
||
}
|
||
|
||
func TestExtractJSON(t *testing.T) {
|
||
if got := extractJSON("prefix {\"route\":\"web\"} suffix"); got != `{"route":"web"}` {
|
||
t.Errorf("extractJSON = %q", got)
|
||
}
|
||
if got := extractJSON("no json here"); got != "" {
|
||
t.Errorf("extractJSON(no json) = %q, want empty", got)
|
||
}
|
||
}
|
||
|
||
func TestContainsTrigger(t *testing.T) {
|
||
if !containsTrigger("ну подумай глубже про это", "подумай глубже") {
|
||
t.Error("should match trigger phrase mid-sentence")
|
||
}
|
||
if containsTrigger("just a normal question", "подумай глубже") {
|
||
t.Error("must not match when phrase absent")
|
||
}
|
||
if containsTrigger("anything", "") {
|
||
t.Error("empty trigger must never match")
|
||
}
|
||
}
|