package stemmer
import "testing"
func TestStemKnownPairs(t *testing.T) {
t.Parallel()
cases := []struct {
word, want string
}{
{"caresses", "caress"},
{"ponies", "poni"},
{"ties", "ti"},
{"caress", "caress"},
{"cats", "cat"},
{"feed", "feed"},
{"agreed", "agre"},
{"plastered", "plaster"},
{"bled", "bled"},
{"motoring", "motor"},
{"sing", "sing"},
{"happy", "happi"},
{"sky", "sky"},
{"relational", "relat"},
{"conditional", "condit"},
{"operator", "oper"},
{"controllable", "controll"},
{"roll", "roll"},
}
for _, tc := range cases {
tc := tc
t.Run(tc.word, func(t *testing.T) {
t.Parallel()
got := Stem(tc.word)
if got != tc.want {
t.Errorf("Stem(%q) = %q, want %q", tc.word, got, tc.want)
}
})
}
}
func TestStemShortWords(t *testing.T) {
t.Parallel()
cases := []string{"a", "an", "in"}
for _, w := range cases {
w := w
t.Run(w, func(t *testing.T) {
t.Parallel()
if Stem(w) != w {
t.Errorf("short word changed: %s -> %s", w, Stem(w))
}
})
}
}
func TestStemAll(t *testing.T) {
t.Parallel()
got := StemAll([]string{"caresses", "ponies", "motoring"})
want := []string{"caress", "poni", "motor"}
for i := range got {
if got[i] != want[i] {
t.Errorf("idx %d: got %q, want %q", i, got[i], want[i])
}
}
}
func TestMeasure(t *testing.T) {
t.Parallel()
t.Helper()
cases := map[string]int{
"": 0,
"tr": 0,
"tree": 0,
"trouble": 1,
"oaten": 1,
"orrery": 2,
}
for in, want := range cases {
in, want := in, want
t.Run(in, func(t *testing.T) {
t.Parallel()
if got := measure([]byte(in)); got != want {
t.Errorf("measure(%q) = %d, want %d", in, got, want)
}
})
}
}