package router import ( "context" "testing" ) func TestPossessionStatementGrammarClaimsOpenRemainder(t *testing.T) { g := PossessionStatementGrammar() for _, utterance := range []string{ "у меня новый ноутбук", "У меня сломался велосипед.", "у меня после отпуска другая работа", "у меня что-то сломалось", "у меня кто-нибудь дома", "у меня когда-то был велосипед", "у меня кое-что изменилось", } { d, matched, ok := g.Evaluate(utterance) if !matched || !ok { t.Errorf("%q was not claimed", utterance) continue } if d.Intent != IntentNote || d.Slots.Text != utterance || d.Stage != 0 { t.Errorf("%q => %+v, want an anchored note preserving the utterance", utterance, d) } } } func TestPossessionStatementGrammarDefersNarrowerRequests(t *testing.T) { g := PossessionStatementGrammar() for _, utterance := range []string{ "что у меня сегодня?", "у меня когда встреча?", "у меня когда встреча", "у меня новый ноутбук?", "у меня новый ноутбук, запиши это", "у меня новый ноутбук, напомни настроить его", "расскажи, что у меня в календаре", "у тебя новый ноутбук", } { if _, _, ok := g.Evaluate(utterance); ok { t.Errorf("%q was claimed as a plain possession statement", utterance) } } } func TestPossessionStatementBeatsStatisticalQueryGuess(t *testing.T) { emb := NewHashEmbedder(64) classifier := NewClassifier(emb) if err := classifier.AddExample(context.Background(), IntentQuery, "у меня новый ноутбук"); err != nil { t.Fatal(err) } r := New(Config{ Grammars: []Grammar{PossessionStatementGrammar()}, Classifier: classifier, Threshold: 0, }) d, err := r.Route(context.Background(), "у меня новый ноутбук", refNow()) if err != nil { t.Fatal(err) } if d.Intent != IntentNote || d.Stage != 0 { t.Fatalf("route = %+v, want the structural statement grammar before the statistical query guess", d) } }