| | |
| | |
| | |
| |
|
| | package strings_test |
| |
|
| | import ( |
| | "slices" |
| | . "strings" |
| | "testing" |
| | ) |
| |
|
| | func TestFinderNext(t *testing.T) { |
| | testCases := []struct { |
| | pat, text string |
| | index int |
| | }{ |
| | {"", "", 0}, |
| | {"", "abc", 0}, |
| | {"abc", "", -1}, |
| | {"abc", "abc", 0}, |
| | {"d", "abcdefg", 3}, |
| | {"nan", "banana", 2}, |
| | {"pan", "anpanman", 2}, |
| | {"nnaaman", "anpanmanam", -1}, |
| | {"abcd", "abc", -1}, |
| | {"abcd", "bcd", -1}, |
| | {"bcd", "abcd", 1}, |
| | {"abc", "acca", -1}, |
| | {"aa", "aaa", 0}, |
| | {"baa", "aaaaa", -1}, |
| | {"at that", "which finally halts. at that point", 22}, |
| | } |
| |
|
| | for _, tc := range testCases { |
| | got := StringFind(tc.pat, tc.text) |
| | want := tc.index |
| | if got != want { |
| | t.Errorf("stringFind(%q, %q) got %d, want %d\n", tc.pat, tc.text, got, want) |
| | } |
| | } |
| | } |
| |
|
| | func TestFinderCreation(t *testing.T) { |
| | testCases := []struct { |
| | pattern string |
| | bad [256]int |
| | suf []int |
| | }{ |
| | { |
| | "abc", |
| | [256]int{'a': 2, 'b': 1, 'c': 3}, |
| | []int{5, 4, 1}, |
| | }, |
| | { |
| | "mississi", |
| | [256]int{'i': 3, 'm': 7, 's': 1}, |
| | []int{15, 14, 13, 7, 11, 10, 7, 1}, |
| | }, |
| | |
| | { |
| | "abcxxxabc", |
| | [256]int{'a': 2, 'b': 1, 'c': 6, 'x': 3}, |
| | []int{14, 13, 12, 11, 10, 9, 11, 10, 1}, |
| | }, |
| | { |
| | "abyxcdeyx", |
| | [256]int{'a': 8, 'b': 7, 'c': 4, 'd': 3, 'e': 2, 'y': 1, 'x': 5}, |
| | []int{17, 16, 15, 14, 13, 12, 7, 10, 1}, |
| | }, |
| | } |
| |
|
| | for _, tc := range testCases { |
| | bad, good := DumpTables(tc.pattern) |
| |
|
| | for i, got := range bad { |
| | want := tc.bad[i] |
| | if want == 0 { |
| | want = len(tc.pattern) |
| | } |
| | if got != want { |
| | t.Errorf("boyerMoore(%q) bad['%c']: got %d want %d", tc.pattern, i, got, want) |
| | } |
| | } |
| |
|
| | if !slices.Equal(good, tc.suf) { |
| | t.Errorf("boyerMoore(%q) got %v want %v", tc.pattern, good, tc.suf) |
| | } |
| | } |
| | } |
| |
|