-
Notifications
You must be signed in to change notification settings - Fork 1
/
dicttrie_test.go
122 lines (108 loc) · 2.5 KB
/
dicttrie_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package hairetsu
import (
"bytes"
"strings"
"testing"
dict "github.com/ajiyoshi-vg/hairetsu/bytes"
"github.com/ajiyoshi-vg/hairetsu/doublearray"
"github.com/ajiyoshi-vg/hairetsu/node"
"github.com/stretchr/testify/assert"
)
func TestDictTrieSearch(t *testing.T) {
cases := []struct {
title string
data [][]byte
ng [][]byte
prefix []byte
num int
}{
{
title: "インドネシア",
ng: [][]byte{
[]byte("hoge"),
[]byte("印"),
},
prefix: []byte("印度尼西亚啊"),
num: 2,
data: [][]byte{
[]byte("印度"),
[]byte("印度尼西亚"),
[]byte("印加帝国"),
[]byte("瑞士"),
[]byte("瑞典"),
[]byte("巴基斯坦"),
[]byte("巴勒斯坦"),
[]byte("以色列"),
[]byte("巴比伦"),
[]byte("土耳其"),
},
},
}
for _, c := range cases {
t.Run(c.title, func(t *testing.T) {
data := c.data
ks, dict, err := dict.FromSlice(data)
assert.NoError(t, err)
da, err := NewDictTrieBuilder().Build(ks, dict)
assert.NoError(t, err)
for i, x := range data {
actual, err := da.ExactMatchSearch(x)
assert.NoError(t, err, x)
assert.Equal(t, node.Index(i), actual)
}
for _, x := range c.ng {
_, err := da.ExactMatchSearch(x)
assert.Error(t, err, x)
}
is, err := da.CommonPrefixSearch(c.prefix)
assert.NoError(t, err)
assert.Equal(t, c.num, len(is))
t.Log(doublearray.GetStat(da.data))
})
}
}
func TestDictTrieBuild(t *testing.T) {
cases := []struct {
title string
data string
ng [][]byte
}{
{
title: "BuildLines",
data: "aaa\nbbb\nabc\nabb",
ng: [][]byte{
[]byte("hoge"),
[]byte("印"),
},
},
}
for _, c := range cases {
t.Run(c.title, func(t *testing.T) {
data := bytes.NewBufferString(c.data)
origin, err := NewDictTrieBuilder().BuildFromLines(data)
assert.NoError(t, err)
buf := &bytes.Buffer{}
origin.WriteTo(buf)
restored := &DictTrie{}
_, err = restored.ReadFrom(buf)
assert.NoError(t, err)
assert.Equal(t,
doublearray.GetStat(origin.data),
doublearray.GetStat(restored.data),
)
das := []*DictTrie{origin, restored}
for _, da := range das {
for i, x := range strings.Split(c.data, "\n") {
actual, err := da.ExactMatchSearch([]byte(x))
assert.NoError(t, err, x)
assert.Equal(t, node.Index(i), actual)
}
for _, x := range c.ng {
id, err := da.ExactMatchSearch(x)
assert.Error(t, err, string(x), id)
}
t.Log(doublearray.GetStat(da.data))
}
})
}
}