nx_boyer_moore_test.nx source
↩ module page · 53 lines · 1706 B
1// nx_boyer_moore_test.nx -- exercise Boyer-Moore search edge cases.
2
3import "nx_syscalls.nx"
4import "nx_boyer_moore.nx"
5
6func main() -> nx_int {
7 // #1 simple match in middle
8 let t1: *u8 = "the quick brown fox jumps over the lazy dog" as *u8
9 let p1: *u8 = "brown" as *u8
10 if nx_boyer_moore_search(t1, 43, p1, 5) != 10 { return 1 }
11
12 // #2 match at start
13 let p2: *u8 = "the" as *u8
14 if nx_boyer_moore_search(t1, 43, p2, 3) != 0 { return 2 }
15
16 // #3 match at end
17 let p3: *u8 = "dog" as *u8
18 if nx_boyer_moore_search(t1, 43, p3, 3) != 40 { return 3 }
19
20 // #4 no match
21 let p4: *u8 = "zzzz" as *u8
22 if nx_boyer_moore_search(t1, 43, p4, 4) != -1 { return 4 }
23
24 // #5 empty pattern -> index 0
25 let p5: *u8 = "" as *u8
26 if nx_boyer_moore_search(t1, 43, p5, 0) != 0 { return 5 }
27
28 // #6 pattern longer than text -> -1
29 let p6: *u8 = "this pattern is much longer than the short text" as *u8
30 let t6: *u8 = "short" as *u8
31 if nx_boyer_moore_search(t6, 5, p6, 47) != -1 { return 6 }
32
33 // #7 pattern equals text
34 let t7: *u8 = "match" as *u8
35 let p7: *u8 = "match" as *u8
36 if nx_boyer_moore_search(t7, 5, p7, 5) != 0 { return 7 }
37
38 // #8 single-byte pattern
39 let p8: *u8 = "f" as *u8
40 if nx_boyer_moore_search(t1, 43, p8, 1) != 16 { return 8 }
41
42 // #9 repeated character pattern, single occurrence
43 let t9: *u8 = "abcabcabd" as *u8
44 let p9: *u8 = "abd" as *u8
45 if nx_boyer_moore_search(t9, 9, p9, 3) != 6 { return 9 }
46
47 // #10 overlapping potential matches -- first wins
48 let t10: *u8 = "aaaab" as *u8
49 let p10: *u8 = "aab" as *u8
50 if nx_boyer_moore_search(t10, 5, p10, 3) != 2 { return 10 }
51
52 return 0
53}