func TestMultiFind(t *testing.T) { trie := NewTrie() // these are part of the matches for the word 'hyphenation' trie.AddString(`hyph`) trie.AddString(`hen`) trie.AddString(`hena`) trie.AddString(`henat`) expected := new(vector.StringVector) expected.Push(`hyph`) found := trie.AllSubstrings(`hyphenation`) if found.Len() != expected.Len() { t.Errorf("expected %v but found %v", *expected, *found) } expected.Cut(0, expected.Len()) expected.Push(`hen`) expected.Push(`hena`) expected.Push(`henat`) found = trie.AllSubstrings(`henation`) if found.Len() != expected.Len() { t.Errorf("expected %v but found %v", *expected, *found) } }
func TestMultiFindValue(t *testing.T) { trie := NewTrie() // these are part of the matches for the word 'hyphenation' trie.AddPatternString(`hy3ph`) trie.AddPatternString(`he2n`) trie.AddPatternString(`hena4`) trie.AddPatternString(`hen5at`) v1 := &vector.IntVector{0, 3, 0, 0} v2 := &vector.IntVector{0, 2, 0} v3 := &vector.IntVector{0, 0, 0, 4} v4 := &vector.IntVector{0, 0, 5, 0, 0} expectStr := new(vector.StringVector) expectVal := new(vector.Vector) // contains elements of type *vector.IntVector expectStr.Push(`hyph`) expectVal.Push(v1) found, values := trie.AllSubstringsAndValues(`hyphenation`) if found.Len() != expectStr.Len() { t.Errorf("expected %v but found %v", *expectStr, *found) } if values.Len() != expectVal.Len() { t.Errorf("Length mismatch: expected %v but found %v", *expectVal, *values) } for i := 0; i < found.Len(); i++ { if found.At(i) != expectStr.At(i) { t.Errorf("Strings content mismatch: expected %v but found %v", *expectStr, *found) break } } for i := 0; i < values.Len(); i++ { ev := expectVal.At(i).(*vector.IntVector) fv := values.At(i).(*vector.IntVector) if ev.Len() != fv.Len() { t.Errorf("Value length mismatch: expected %v but found %v", *ev, *fv) break } for i := 0; i < ev.Len(); i++ { if ev.At(i) != fv.At(i) { t.Errorf("Value mismatch: expected %v but found %v", *ev, *fv) break } } } expectStr.Cut(0, expectStr.Len()) expectVal.Cut(0, expectVal.Len()) expectStr.AppendVector(&vector.StringVector{`hen`, `hena`, `henat`}) expectVal.Push(v2) expectVal.Push(v3) expectVal.Push(v4) found, values = trie.AllSubstringsAndValues(`henation`) if found.Len() != expectStr.Len() { t.Errorf("expected %v but found %v", *expectStr, *found) } if values.Len() != expectVal.Len() { t.Errorf("Length mismatch: expected %v but found %v", *expectVal, *values) } for i := 0; i < found.Len(); i++ { if found.At(i) != expectStr.At(i) { t.Errorf("Strings content mismatch: expected %v but found %v", *expectStr, *found) break } } for i := 0; i < values.Len(); i++ { ev := expectVal.At(i).(*vector.IntVector) fv := values.At(i).(*vector.IntVector) if ev.Len() != fv.Len() { t.Errorf("Value length mismatch: expected %v but found %v", *ev, *fv) break } for i := 0; i < ev.Len(); i++ { if ev.At(i) != fv.At(i) { t.Errorf("Value mismatch: expected %v but found %v", *ev, *fv) break } } } }