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  }