test(reversal): add round-trip validation tests
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
b3f6c817d4
commit
9474edde6d
1 changed files with 93 additions and 0 deletions
93
reversal/roundtrip_test.go
Normal file
93
reversal/roundtrip_test.go
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
package reversal
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
i18n "forge.lthn.ai/core/go-i18n"
|
||||
)
|
||||
|
||||
// TestRoundTrip_ForwardThenReverse — go-i18n composed output → reversal → verify correct tokens
|
||||
func TestRoundTrip_ForwardThenReverse(t *testing.T) {
|
||||
svc, _ := i18n.New()
|
||||
i18n.SetDefault(svc)
|
||||
tok := NewTokeniser()
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
text string
|
||||
wantVerb string
|
||||
wantTense string
|
||||
}{
|
||||
{
|
||||
name: "Progress pattern",
|
||||
text: i18n.Progress("build"),
|
||||
wantVerb: "build",
|
||||
wantTense: "gerund",
|
||||
},
|
||||
{
|
||||
name: "ActionResult pattern",
|
||||
text: i18n.ActionResult("delete", "file"),
|
||||
wantVerb: "delete",
|
||||
wantTense: "past",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
tokens := tok.Tokenise(tt.text)
|
||||
foundVerb := false
|
||||
for _, tok := range tokens {
|
||||
if tok.Type == TokenVerb && tok.VerbInfo.Base == tt.wantVerb {
|
||||
foundVerb = true
|
||||
if tok.VerbInfo.Tense != tt.wantTense {
|
||||
t.Errorf("verb %q tense = %q, want %q", tt.wantVerb, tok.VerbInfo.Tense, tt.wantTense)
|
||||
}
|
||||
}
|
||||
}
|
||||
if !foundVerb {
|
||||
t.Errorf("did not find verb %q in tokens from %q", tt.wantVerb, tt.text)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// TestRoundTrip_MultiplierImprints — variants should be similar to original
|
||||
func TestRoundTrip_MultiplierImprints(t *testing.T) {
|
||||
svc, _ := i18n.New()
|
||||
i18n.SetDefault(svc)
|
||||
tok := NewTokeniser()
|
||||
m := NewMultiplier()
|
||||
|
||||
original := "Delete the configuration file"
|
||||
variants := m.Expand(original)
|
||||
origImprint := NewImprint(tok.Tokenise(original))
|
||||
|
||||
for _, v := range variants {
|
||||
if v == original {
|
||||
continue
|
||||
}
|
||||
varImprint := NewImprint(tok.Tokenise(v))
|
||||
sim := origImprint.Similar(varImprint)
|
||||
if sim < 0.2 {
|
||||
t.Errorf("Variant %q similarity to original = %f, want >= 0.2", v, sim)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestRoundTrip_SimilarDocuments — similar docs → higher similarity than different docs
|
||||
func TestRoundTrip_SimilarDocuments(t *testing.T) {
|
||||
svc, _ := i18n.New()
|
||||
i18n.SetDefault(svc)
|
||||
tok := NewTokeniser()
|
||||
|
||||
imp1 := NewImprint(tok.Tokenise("Delete the configuration file"))
|
||||
imp2 := NewImprint(tok.Tokenise("Delete the old file"))
|
||||
imp3 := NewImprint(tok.Tokenise("Building the project successfully"))
|
||||
|
||||
simSame := imp1.Similar(imp2)
|
||||
simDiff := imp1.Similar(imp3)
|
||||
|
||||
if simSame <= simDiff {
|
||||
t.Errorf("Similar documents (%f) should score higher than different (%f)", simSame, simDiff)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue