@@ -6,26 +6,155 @@ package _011
6
6
7
7
import (
8
8
"reflect"
9
+ "sort"
10
+ "strconv"
9
11
"testing"
10
12
)
11
13
12
- func TestSolution (t * testing.T ) {
13
- type args struct {
14
+ type unitCase struct {
15
+ prefix string
16
+ response []string
17
+ }
18
+
19
+ func runTests (t * testing.T , trie Trie , tests []unitCase ) {
20
+ for i , tt := range tests {
21
+ t .Run (strconv .Itoa (i ), func (t * testing.T ) {
22
+ got := trie .Search (tt .prefix )
23
+ sort .Strings (got )
24
+ if ! reflect .DeepEqual (got , tt .response ) {
25
+ t .Errorf ("trie.Search() = %v, want %v" , got , tt .response )
26
+ }
27
+ })
14
28
}
15
- type want struct {
29
+ }
30
+
31
+ func TestTrie_SizeAndSearch (t * testing.T ) {
32
+ dict := []string {
33
+ "deari" , "deeli" , "dog" , "dear" , "dearw" , "deelw" , "doge" ,
34
+ "deare" , "deele" , "doga" , "dogt" , "deart" , "deara" , "doga" ,
35
+ "dogy" , "deary" , "deely" , "dogu" , "dearu" , "deelu" , "world" ,
36
+ "dogi" , "deeld" , "deelr" , "deelo" , "dogp" , "deelt" , "deel" ,
37
+ "dearp" , "deelp" , "doga" , "dogo" , "dearo" , "deela" , "dears" ,
38
+ "dogw" , "deels" , "dogd" , "deard" , "dream" , "apple" , "dogs" ,
39
+ "deelt" , "dear" , "dogr" , "dearr" , "doga" , "cream" , "apple" ,
16
40
}
17
- tests := []struct {
18
- name string
19
- args args
20
- want want
21
- }{
22
- // TODO: Add test cases.
41
+ unique := 0
42
+ mp := map [string ]struct {}{}
43
+ for _ , wd := range dict {
44
+ if _ , ok := mp [wd ]; ! ok {
45
+ unique ++
46
+ mp [wd ] = struct {}{}
47
+ }
23
48
}
24
- for _ , tt := range tests {
25
- t .Run (tt .name , func (t * testing.T ) {
26
- if got := Solution (); ! reflect .DeepEqual (got , tt .want ) {
27
- t .Errorf ("Solution() = %v, want %v" , got , tt .want )
28
- }
29
- })
49
+ trie := NewTrie (dict ... )
50
+ // size of dictionary == unique
51
+ if got := trie .Size (); got != unique {
52
+ t .Errorf ("trie.Size() = %v, want %v" , got , unique )
53
+ }
54
+
55
+ tests := []unitCase {
56
+ {
57
+ prefix : "de" ,
58
+ response : []string {
59
+ "dear" , "deara" , "deard" , "deare" , "deari" , "dearo" , "dearp" ,
60
+ "dearr" , "dears" , "deart" , "dearu" , "dearw" , "deary" , "deel" ,
61
+ "deela" , "deeld" , "deele" , "deeli" , "deelo" , "deelp" , "deelr" ,
62
+ "deels" , "deelt" , "deelu" , "deelw" , "deely" ,
63
+ },
64
+ },
65
+ {
66
+ prefix : "dea" ,
67
+ response : []string {
68
+ "dear" , "deara" , "deard" , "deare" , "deari" , "dearo" , "dearp" ,
69
+ "dearr" , "dears" , "deart" , "dearu" , "dearw" , "deary" ,
70
+ },
71
+ },
72
+ {
73
+ prefix : "dee" ,
74
+ response : []string {
75
+ "deel" , "deela" , "deeld" , "deele" , "deeli" , "deelo" , "deelp" ,
76
+ "deelr" , "deels" , "deelt" , "deelu" , "deelw" , "deely" ,
77
+ },
78
+ },
79
+ {
80
+ prefix : "a" ,
81
+ response : []string {"apple" },
82
+ },
83
+ {
84
+ prefix : "did" ,
85
+ response : nil ,
86
+ },
87
+ {
88
+ prefix : "git" ,
89
+ response : nil ,
90
+ },
30
91
}
92
+ runTests (t , trie , tests )
93
+ }
94
+
95
+ func TestTrie_AddWords (t * testing.T ) {
96
+ dict := []string {"aa" , "dog" , "mock" }
97
+ trie := NewTrie (dict ... )
98
+ // run before adding more words
99
+ runTests (t , trie , []unitCase {
100
+ {
101
+ prefix : "a" ,
102
+ response : []string {"aa" },
103
+ },
104
+ {
105
+ prefix : "og" ,
106
+ response : nil ,
107
+ },
108
+ {
109
+ prefix : "dog" ,
110
+ response : []string {"dog" },
111
+ },
112
+ {
113
+ prefix : "mock" ,
114
+ response : []string {"mock" },
115
+ },
116
+ {
117
+ prefix : "chock" ,
118
+ response : nil ,
119
+ },
120
+ {
121
+ prefix : "mockery" ,
122
+ response : nil ,
123
+ },
124
+ })
125
+
126
+ // add more words
127
+ trie .AddWords (
128
+ "shock" , "mockery" , "mock" ,
129
+ "ogy" , "dog-cat" , "shame" , "kam" ,
130
+ "apple" , "shop" , "mark" ,
131
+ )
132
+
133
+ // run after adding more words
134
+ runTests (t , trie , []unitCase {
135
+ {
136
+ prefix : "a" ,
137
+ response : []string {"aa" , "apple" },
138
+ },
139
+ {
140
+ prefix : "og" ,
141
+ response : []string {"ogy" },
142
+ },
143
+ {
144
+ prefix : "dog" ,
145
+ response : []string {"dog" , "dog-cat" },
146
+ },
147
+ {
148
+ prefix : "mock" ,
149
+ response : []string {"mock" , "mockery" },
150
+ },
151
+ {
152
+ prefix : "chock" ,
153
+ response : nil ,
154
+ },
155
+ {
156
+ prefix : "mockery" ,
157
+ response : []string {"mockery" },
158
+ },
159
+ })
31
160
}
0 commit comments