github.com/lingyao2333/mo-zero@v1.4.1/core/stringx/node_test.go (about) 1 package stringx 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 ) 8 9 func TestFuzzNodeCase1(t *testing.T) { 10 keywords := []string{ 11 "cs8Zh", 12 "G1OihlVuBz", 13 "K6azS2FBHjI", 14 "DQKvghI4", 15 "l7bA86Sze", 16 "tjBLZhCao", 17 "nEsXmVzP", 18 "cbRh8UE1nO3s", 19 "Wta3R2WcbGP", 20 "jpOIcA", 21 "TtkRr4k9hI", 22 "OKbSo0clAYTtk", 23 "uJs1WToEanlKV", 24 "05Y02iFD2", 25 "x2uJs1WToEanlK", 26 "ieaSWe", 27 "Kg", 28 "FD2bCKFazH", 29 } 30 scopes := []scope{ 31 {62, 72}, 32 {52, 65}, 33 {21, 34}, 34 {1, 10}, 35 {19, 33}, 36 {36, 42}, 37 {42, 44}, 38 {7, 17}, 39 } 40 n := new(node) 41 for _, key := range keywords { 42 n.add(key) 43 } 44 n.build() 45 assert.ElementsMatch(t, scopes, n.find([]rune("Z05Y02iFD2bCKFazHtrx2uJs1WToEanlKVWKieaSWeKgmnUXV0ZjOKbSo0clAYTtkRr4k9hI"))) 46 } 47 48 func TestFuzzNodeCase2(t *testing.T) { 49 keywords := []string{ 50 "IP1NPsJKIvt", 51 "Iw7hQARwSTw", 52 "SmZIcA", 53 "OyxHPYkoQzFO", 54 "3suCnuSAS5d", 55 "HUMpbi", 56 "HPdvbGGpY", 57 "49qjMtR8bEt", 58 "a0zrrGKVTJ2", 59 "WbOBcszeo1FfZ", 60 "8tHUi5PJI", 61 "Oa2Di", 62 "6ZWa5nr1tU", 63 "o0LJRfmeXB9bF9", 64 "veF0ehKxH", 65 "Qp73r", 66 "B6Rmds4ELY8", 67 "uNpGybQZG", 68 "Ogm3JqicRZlA4n", 69 "FL6LVErKomc84H", 70 "qv2Pi0xJj3cR1", 71 "bPWLBg4", 72 "hYN8Q4M1sw", 73 "ExkTgNklmlIx", 74 "eVgHHDOxOUEj", 75 "5WPEVv0tR", 76 "CPjnOAqUZgV", 77 "oR3Ogtz", 78 "jwk1Zbg", 79 "DYqguyk8h", 80 "rieroDmpvYFK", 81 "MQ9hZnMjDqrNQe", 82 "EhM4KqkCBd", 83 "m9xalj6q", 84 "d5CTL5mzK", 85 "XJOoTvFtI8U", 86 "iFAwspJ", 87 "iGv8ErnRZIuSWX", 88 "i8C1BqsYX", 89 "vXN1KOaOgU", 90 "GHJFB", 91 "Y6OlAqbZxYG8", 92 "dzd4QscSih4u", 93 "SsLYMkKvB9APx", 94 "gi0huB3", 95 "CMICHDCSvSrgiACXVkN", 96 "MwOvyHbaxdaqpZpU", 97 "wOvyHbaxdaqpZpUbI", 98 "2TT5WEy", 99 "eoCq0T2MC", 100 "ZpUbI7", 101 "oCq0T2MCp", 102 "CpLFgLg0g", 103 "FgLg0gh", 104 "w5awC5HeoCq", 105 "1c", 106 } 107 scopes := []scope{ 108 {0, 19}, 109 {57, 73}, 110 {58, 75}, 111 {47, 54}, 112 {29, 38}, 113 {70, 76}, 114 {30, 39}, 115 {37, 46}, 116 {40, 47}, 117 {22, 33}, 118 {92, 94}, 119 } 120 n := new(node) 121 for _, key := range keywords { 122 n.add(key) 123 } 124 n.build() 125 assert.ElementsMatch(t, scopes, n.find([]rune("CMICHDCSvSrgiACXVkNF9lw5awC5HeoCq0T2MCpLFgLg0gh2TT5WEyINrMwOvyHbaxdaqpZpUbI7SpIY5yVWf33MuX7K1c"))) 126 } 127 128 func TestFuzzNodeCase3(t *testing.T) { 129 keywords := []string{ 130 "QAraACKOftI4", 131 "unRmd2EO0", 132 "s25OtuoU", 133 "aGlmn7KnbE4HCX", 134 "kuK6Uh", 135 "ckuK6Uh", 136 "uK6Uh", 137 "Iy", 138 "h", 139 "PMSSUNvyi", 140 "ahz0i", 141 "Lhs4XZ1e", 142 "shPp1Va7aQNVme", 143 "yIUckuK6Uh", 144 "pKjIyI", 145 "jIyIUckuK6Uh", 146 "UckuK6Uh", 147 "Uh", 148 "JPAULjQgHJ", 149 "Wp", 150 "sbkZxXurrI", 151 "pKjIyIUckuK6Uh", 152 } 153 scopes := []scope{ 154 {9, 15}, 155 {8, 15}, 156 {5, 15}, 157 {1, 7}, 158 {10, 15}, 159 {3, 15}, 160 {0, 2}, 161 {1, 15}, 162 {7, 15}, 163 {13, 15}, 164 {4, 6}, 165 {14, 15}, 166 } 167 n := new(node) 168 for _, key := range keywords { 169 n.add(key) 170 } 171 n.build() 172 assert.ElementsMatch(t, scopes, n.find([]rune("WpKjIyIUckuK6Uh"))) 173 } 174 175 func BenchmarkNodeFind(b *testing.B) { 176 b.ReportAllocs() 177 178 keywords := []string{ 179 "A", 180 "AV", 181 "AV演员", 182 "无名氏", 183 "AV演员色情", 184 "日本AV女优", 185 } 186 trie := new(node) 187 for _, keyword := range keywords { 188 trie.add(keyword) 189 } 190 trie.build() 191 192 for i := 0; i < b.N; i++ { 193 trie.find([]rune("日本AV演员兼电视、电影演员。无名氏AV女优是xx出道, 日本AV女优们最精彩的表演是AV演员色情表演")) 194 } 195 }