code wiki / (root) / nx_boyer_moore_test.nx

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}