node_test.go 3.1 KB

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