OSDN Git Service

Initial commit of senna-1.1.2-fast.
[ludiafuncs/senna-1.1.2-fast.git] / bindings / ruby / test / basic-api-test / test_index_update.rb
1 # Copyright(C) 2006 Brazil
2 #     All rights reserved.
3 #     This is free software with ABSOLUTELY NO WARRANTY.
4 #
5 # You can redistribute it and/or modify it under the terms of
6 # the GNU General Public License version 2.
7
8 require 'test/unit'
9 require 'senna'
10 require 'nkf'
11 require 'test_tools'
12
13 $KCODE = 'e'
14
15 class IndexUpdateTest < Test::Unit::TestCase
16   SOME = 1000
17   MANY = 20000
18   MAX_KEY_LEN = 8191
19   MAX_KEY_NUM = 0x1000_0000 - 1
20   def test_upd_sel
21     index = TestIndex::create
22     index.upd('key', nil, 'test')
23     rcs = index.sel('test')
24     assert_equal(1, rcs.nhits)
25   end
26
27   def test_upd_upd_sel
28     index = TestIndex::create
29     index.upd('key', nil, 'original')
30     index.upd('key', 'original', 'changed')
31     rcs = index.sel('original')
32     assert_nil(rcs)
33     rcs = index.sel('changed')
34     assert_equal(1, rcs.nhits)
35   end
36
37   def test_many_upd_sel
38     index = TestIndex::create
39     MANY.times {|i|
40       index.upd(i.to_s, nil, 'test')
41     }
42     rcs = index.sel('test')
43     assert_equal(MANY, rcs.nhits)
44   end
45
46   def test_some_upd_some_sel
47     index = TestIndex::create
48     SOME.times {|i|
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
53     }
54   end
55
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')
60     assert_nil(rcs)
61   end
62
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')
70     assert_nil(rcs)
71     rcs = index.sel('CHANGED')
72     assert_equal(1, rcs.nhits)
73   end
74
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('£ô£Å£ó£Ô')
82     assert_nil(rcs)
83     rcs = index.sel('¥Á¥§¥ó¥¸')
84     assert_equal(1, rcs.nhits)
85   end
86
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', '£ô£Å£ó£Ô'))
94     assert_nil(rcs)
95     rcs = index.sel(NKF.nkf('-Es', '¥Á¥§¥ó¥¸'))
96     assert_equal(1, rcs.nhits)
97   end
98
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', '£ô£Å£ó£Ô'))
108     assert_nil(rcs)
109     ['¥Á¥§¥ó¥¸', '¥ß¥ê¥Ð¡¼¥ë', '¥ª¥ì¥ó¥¸'].each {|word|
110       rcs = index.sel(NKF.nkf('-Ew', word))
111       assert_equal(1, rcs.nhits)
112     }
113   end
114
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)
124
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')
132     assert_nil(rcs)
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))
138   end
139   
140   def test_max_key_upd
141     index = TestIndex::create
142     10.times {|i|
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')
150       assert_nil(rcs)
151       rcs = index.sel('newvalue')
152       assert_equal(i + 1, rcs.nhits)
153       assert_not_equal(0, rcs.find(key))
154     }
155   end
156
157   def test_ngram_eng
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)
166     rcs = index.sel('s')
167     assert_equal(1, rcs.nhits) 
168   end
169
170   def test_ngram_ja
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)
182   end
183
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)
189   end
190
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)
202   end
203
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)
215   end
216
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)
228   end
229
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)
240   end
241
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)
252   end
253
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)
261   end
262 end
263