1 # Copyright(C) 2006 Brazil
3 # This is free software with ABSOLUTELY NO WARRANTY.
5 # You can redistribute it and/or modify it under the terms of
6 # the GNU General Public License version 2.
15 class IndexUpdateTest < Test::Unit::TestCase
19 MAX_KEY_NUM = 0x1000_0000 - 1
21 index = TestIndex::create
22 index.upd('key', nil, 'test')
23 rcs = index.sel('test')
24 assert_equal(1, rcs.nhits)
28 index = TestIndex::create
29 index.upd('key', nil, 'original')
30 index.upd('key', 'original', 'changed')
31 rcs = index.sel('original')
33 rcs = index.sel('changed')
34 assert_equal(1, rcs.nhits)
38 index = TestIndex::create
40 index.upd(i.to_s, nil, 'test')
42 rcs = index.sel('test')
43 assert_equal(MANY, rcs.nhits)
46 def test_some_upd_some_sel
47 index = TestIndex::create
49 rcs = index.sel('test')
50 assert_equal(i, rcs.nhits) if rcs
51 index.upd(i.to_s, nil, 'test')
52 GC.start if i % 100 == 0
56 def test_non_normalize_eng_upd
57 index = TestIndex::create(0, 0, 0, Senna::ENC_NONE)
58 index.upd('key', nil, 'TeSt')
59 rcs = index.sel('tEsT')
63 def test_normalize_eng_upd
64 index = TestIndex::create(0, Senna::INDEX_NORMALIZE, 0, Senna::ENC_NONE)
65 index.upd('key', nil, 'TeSt')
66 rcs = index.sel('tEsT')
67 assert_equal(1, rcs.nhits)
68 index.upd('key', 'teST', 'Changed')
69 rcs = index.sel('tEsT')
71 rcs = index.sel('CHANGED')
72 assert_equal(1, rcs.nhits)
75 def test_normalize_eucjp_upd
76 index = TestIndex::create(0, Senna::INDEX_NORMALIZE, 0, Senna::ENC_EUC_JP)
77 index.upd('¥¡¼', nil, '£Ô£å£Ó£ô')
78 rcs = index.sel('£ô£Å£ó£Ô')
79 assert_equal(1, rcs.nhits)
80 index.upd('¥¡¼', '£ô£å£Ó£Ô', '
\8eÁ
\8eª
\8eÝ
\8e¼
\8eÞ')
81 rcs = index.sel('£ô£Å£ó£Ô')
83 rcs = index.sel('¥Á¥§¥ó¥¸')
84 assert_equal(1, rcs.nhits)
87 def test_normalize_sjis_upd
88 index = TestIndex::create(0, Senna::INDEX_NORMALIZE | Senna::INDEX_NGRAM, 0, Senna::ENC_SJIS)
89 index.upd('¥¡¼', nil, NKF.nkf('-Es', '£Ô£å£Ó£ô'))
90 rcs = index.sel(NKF.nkf('-Es', '£ô£Å£ó£Ô'))
91 assert_equal(1, rcs.nhits)
92 index.upd('¥¡¼', NKF.nkf('-Es', '£ô£å£Ó£Ô'), NKF.nkf('-Esx', '
\8eÁ
\8eª
\8eÝ
\8e¼
\8eÞ'))
93 rcs = index.sel(NKF.nkf('-Es', '£ô£Å£ó£Ô'))
95 rcs = index.sel(NKF.nkf('-Es', '¥Á¥§¥ó¥¸'))
96 assert_equal(1, rcs.nhits)
99 def test_normalize_utf8_upd
100 index = TestIndex::create(0, Senna::INDEX_NORMALIZE | Senna::INDEX_NGRAM, 0, Senna::ENC_UTF8)
101 index.upd('¥¡¼', nil, NKF.nkf('-Ew', '£Ô£å£Ó£ô'))
102 rcs = index.sel(NKF.nkf('-Ew', '£ô£Å£ó£Ô'))
103 assert_equal(1, rcs.nhits)
104 index.upd('¥¡¼', NKF.nkf('-Ew', '£ô£å£Ó£Ô'), NKF.nkf('-Ewx', '
\8eÁ
\8eª
\8eÝ
\8e¼
\8eÞ'))
105 index.upd('¥¡¼2', nil, NKF.nkf('-Ew', 'Î'))
106 index.upd('¥¡¼3', nil, NKF.nkf('-Ew', '¥ª¥ì¥ó¥·¡«'))
107 rcs = index.sel(NKF.nkf('-Ew', '£ô£Å£ó£Ô'))
109 ['¥Á¥§¥ó¥¸', '¥ß¥ê¥Ð¡¼¥ë', '¥ª¥ì¥ó¥¸'].each {|word|
110 rcs = index.sel(NKF.nkf('-Ew', word))
111 assert_equal(1, rcs.nhits)
115 def test_fixnum_key_upd
116 # comment out for 64bit machines
117 # index = TestIndex::create(MAX_KEY_NUM.size)
118 index = TestIndex::create(4)
119 index.upd(0, nil, 'test 0')
120 index.upd(1, nil, 'test 1')
121 index.upd(MAX_KEY_NUM, nil, "test #{MAX_KEY_NUM}")
122 rcs = index.sel('test')
123 assert_equal(3, rcs.nhits)
125 assert_not_equal(0, rcs.find(0))
126 assert_not_equal(0, rcs.find(1))
127 assert_not_equal(0, rcs.find(MAX_KEY_NUM))
128 index.upd(0, 'test 0', 'updated 0')
129 index.upd(1, 'test 1', 'updated 1')
130 index.upd(MAX_KEY_NUM, "test #{MAX_KEY_NUM}", "updated #{MAX_KEY_NUM}")
131 rcs = index.sel('test')
133 rcs = index.sel('updated')
134 assert_equal(3, rcs.nhits)
135 assert_not_equal(0, rcs.find(0))
136 assert_not_equal(0, rcs.find(1))
137 assert_not_equal(0, rcs.find(MAX_KEY_NUM))
141 index = TestIndex::create
143 key = i.to_s * (MAX_KEY_LEN - 1)
144 index.upd(key, nil, 'test')
145 rcs = index.sel('test')
146 assert_equal(1, rcs.nhits)
147 assert_not_equal(0, rcs.find(key))
148 index.upd(key, 'test', 'newvalue')
149 rcs = index.sel('test')
151 rcs = index.sel('newvalue')
152 assert_equal(i + 1, rcs.nhits)
153 assert_not_equal(0, rcs.find(key))
158 index = TestIndex::create(0, Senna::INDEX_NGRAM | Senna::INDEX_NORMALIZE)
159 index.upd('key', nil, 'test')
160 index.upd('key2', nil, 'te')
161 index.upd('key3', nil, 's')
162 rcs = index.sel('test')
163 assert_equal(1, rcs.nhits)
164 rcs = index.sel('te')
165 assert_equal(1, rcs.nhits)
167 assert_equal(1, rcs.nhits)
171 index = TestIndex::create(0, Senna::INDEX_NGRAM | Senna::INDEX_NORMALIZE,
172 0, Senna::ENC_EUC_JP)
173 index.upd('key', nil, '¥Æ¥¹¥È')
174 index.upd('key2', nil, '¥Æ¥¹')
175 index.upd('key3', nil, '¥Æ')
176 rcs = index.sel('¥Æ¥¹¥È')
177 assert_equal(1, rcs.nhits)
178 rcs = index.sel('¥Æ¥¹')
179 assert_equal(2, rcs.nhits)
180 rcs = index.sel('¥Æ')
181 assert_equal(3, rcs.nhits)
184 def test_ngram_normalize
185 index = TestIndex::create(0, Senna::INDEX_NGRAM | Senna::INDEX_NORMALIZE)
186 index.upd('key', nil, 'TeSt')
187 rcs = index.sel('tEsT')
188 assert_equal(1, rcs.nhits)
191 def test_ngram_split_alpha
192 # In future, this test will not require Senna::INDEX_NORMALIZE flag.
193 index = TestIndex::create(0, Senna::INDEX_NGRAM | Senna::INDEX_NORMALIZE | Senna::INDEX_SPLIT_ALPHA)
194 index.upd('key', nil, 'alphabet')
195 index.upd('key2', nil, 'al')
196 rcs = index.sel('alphabet')
197 assert_equal(1, rcs.nhits)
198 rcs = index.sel('al')
199 assert_equal(2, rcs.nhits)
200 rcs = index.sel('ph')
201 assert_equal(1, rcs.nhits)
204 def test_ngram_split_digit
205 # In future, this test will not require Senna::INDEX_NORMALIZE flag.
206 index = TestIndex::create(0, Senna::INDEX_NGRAM | Senna::INDEX_NORMALIZE | Senna::INDEX_SPLIT_DIGIT)
207 index.upd('key', nil, '1234567890')
208 index.upd('key2', nil, '12')
209 rcs = index.sel('1234567890')
210 assert_equal(1, rcs.nhits)
211 rcs = index.sel('12')
212 assert_equal(2, rcs.nhits)
213 rcs = index.sel('34')
214 assert_equal(1, rcs.nhits)
217 def test_ngram_split_symbol
218 # In future, this test will not require Senna::INDEX_NORMALIZE flag.
219 index = TestIndex::create(0, Senna::INDEX_NGRAM | Senna::INDEX_NORMALIZE | Senna::INDEX_SPLIT_SYMBOL)
220 index.upd('key', nil, '!"#$%&()=-')
221 index.upd('key2', nil, '()')
222 rcs = index.sel('!"#$%&()=-')
223 assert_equal(1, rcs.nhits)
224 rcs = index.sel('()')
225 assert_equal(2, rcs.nhits)
226 rcs = index.sel('#$')
227 assert_equal(1, rcs.nhits)
230 def test_delimited_eng
231 index = TestIndex::create(0, Senna::INDEX_DELIMITED)
232 index.upd('key', nil, 'I\'m from Brasil')
233 index.upd('key2', nil, 'fr')
234 rcs = index.sel('I\'m')
235 assert_equal(1, rcs.nhits)
236 rcs = index.sel('fr')
237 assert_equal(1, rcs.nhits)
238 rcs = index.sel('Brasil')
239 assert_equal(1, rcs.nhits)
242 def test_delimited_ja
243 index = TestIndex::create(0, Senna::INDEX_DELIMITED, 0, Senna::ENC_EUC_JP)
244 index.upd('key', nil, 'ÆüËÜ¸ì ¤Ç¤â ¤³¤¦¤·¤Æ ¥¹¥Ú¡¼¥¹ ¤Ç ¶èÀÚ¤Ã¤Æ ¥¤¥ó¥Ç¥Ã¥¯¥¹ ¤Ç¤¤ë ¤è')
245 index.upd('key2', nil, '¤¦¤·')
246 rcs = index.sel('ÆüËܸì')
247 assert_equal(1, rcs.nhits)
248 rcs = index.sel('¤¦¤·')
249 assert_equal(1, rcs.nhits)
250 rcs = index.sel('¤Ç')
251 assert_equal(1, rcs.nhits)
254 def test_delimited_normalize
255 index = TestIndex::create(0, Senna::INDEX_DELIMITED | Senna::INDEX_NORMALIZE)
256 index.upd('key', nil, 'TeSt de GOZARU')
257 rcs = index.sel('tEsT')
258 assert_equal(1, rcs.nhits)
259 rcs = index.sel('gozaru')
260 assert_equal(1, rcs.nhits)