rroonga 5.0.0 → 5.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardopts +1 -0
- data/Rakefile +1 -10
- data/ext/groonga/extconf.rb +3 -1
- data/ext/groonga/rb-grn-array.c +1 -1
- data/ext/groonga/rb-grn-column.c +33 -67
- data/ext/groonga/rb-grn-context.c +5 -5
- data/ext/groonga/rb-grn-database.c +2 -2
- data/ext/groonga/rb-grn-double-array-trie.c +4 -2
- data/ext/groonga/rb-grn-encoding-support.c +7 -1
- data/ext/groonga/rb-grn-equal-operator.c +85 -0
- data/ext/groonga/rb-grn-exception.c +17 -0
- data/ext/groonga/rb-grn-expression.c +85 -43
- data/ext/groonga/rb-grn-greater-equal-operator.c +88 -0
- data/ext/groonga/rb-grn-greater-operator.c +85 -0
- data/ext/groonga/rb-grn-hash.c +1 -1
- data/ext/groonga/rb-grn-index-column.c +150 -11
- data/ext/groonga/rb-grn-less-equal-operator.c +88 -0
- data/ext/groonga/rb-grn-less-operator.c +85 -0
- data/ext/groonga/rb-grn-logger.c +5 -5
- data/ext/groonga/rb-grn-match-operator.c +86 -0
- data/ext/groonga/rb-grn-normalizer.c +8 -1
- data/ext/groonga/rb-grn-not-equal-operator.c +85 -0
- data/ext/groonga/rb-grn-object.c +170 -36
- data/ext/groonga/rb-grn-operator.c +395 -172
- data/ext/groonga/rb-grn-patricia-trie.c +10 -8
- data/ext/groonga/rb-grn-plugin.c +51 -3
- data/ext/groonga/rb-grn-prefix-operator.c +86 -0
- data/ext/groonga/rb-grn-procedure-type.c +4 -0
- data/ext/groonga/rb-grn-query-logger.c +4 -4
- data/ext/groonga/rb-grn-regexp-operator.c +85 -0
- data/ext/groonga/rb-grn-snippet.c +1 -1
- data/ext/groonga/rb-grn-table-key-support.c +9 -5
- data/ext/groonga/rb-grn-table.c +52 -66
- data/ext/groonga/rb-grn-type.c +1 -1
- data/ext/groonga/rb-grn-utils.c +22 -3
- data/ext/groonga/rb-grn.h +31 -4
- data/ext/groonga/rb-groonga.c +9 -9
- data/lib/groonga/context.rb +31 -0
- data/lib/groonga/expression-builder.rb +14 -1
- data/lib/groonga/record.rb +10 -8
- data/lib/groonga/schema.rb +3 -1
- data/rroonga-build.rb +2 -2
- data/rroonga.gemspec +3 -3
- data/test/groonga-test-utils.rb +4 -0
- data/test/test-column.rb +28 -26
- data/test/test-exception.rb +1 -0
- data/test/test-expression-builder.rb +83 -1
- data/test/test-expression.rb +80 -48
- data/test/test-index-column.rb +102 -29
- data/test/test-normalizer.rb +35 -29
- data/test/test-operator.rb +214 -0
- data/test/test-plugin.rb +24 -6
- data/test/test-procedure.rb +29 -0
- data/test/test-schema-type.rb +14 -0
- data/test/test-table-select-mecab.rb +1 -4
- data/test/test-table.rb +7 -0
- data/test/test-token-regexp.rb +30 -0
- data/test/test-type.rb +24 -0
- metadata +61 -49
- data/doc/text/news.textile +0 -1217
data/test/test-exception.rb
CHANGED
@@ -99,6 +99,7 @@ class ExceptionTest < Test::Unit::TestCase
|
|
99
99
|
assert_const_defined(Groonga, :TokenFilterError)
|
100
100
|
assert_const_defined(Groonga, :CommandError)
|
101
101
|
assert_const_defined(Groonga, :PluginError)
|
102
|
+
assert_const_defined(Groonga, :ScorerError)
|
102
103
|
end
|
103
104
|
end
|
104
105
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
|
-
# Copyright (C) 2014 Masafumi Yokoyama <
|
3
|
+
# Copyright (C) 2014-2015 Masafumi Yokoyama <yokoyama@clear-code.com>
|
4
4
|
# Copyright (C) 2009-2012 Kouhei Sutou <kou@clear-code.com>
|
5
5
|
#
|
6
6
|
# This library is free software; you can redistribute it and/or
|
@@ -248,6 +248,88 @@ class ExpressionBuilderTest < Test::Unit::TestCase
|
|
248
248
|
end
|
249
249
|
end
|
250
250
|
|
251
|
+
class RegexpSearchTest < self
|
252
|
+
def setup_tables
|
253
|
+
Groonga::Schema.define do |schema|
|
254
|
+
schema.create_table("Users",
|
255
|
+
:type => :hash,
|
256
|
+
:key_type => "ShortText") do |table|
|
257
|
+
table.short_text("name")
|
258
|
+
end
|
259
|
+
|
260
|
+
schema.create_table("Terms",
|
261
|
+
:type => :patricia_trie,
|
262
|
+
:key_type => "ShortText",
|
263
|
+
:default_tokenizer => "TokenRegexp",
|
264
|
+
:normalizer => "NormalizerAuto") do |table|
|
265
|
+
table.index("Users.name")
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
@users = Groonga["Users"]
|
270
|
+
end
|
271
|
+
|
272
|
+
def setup_data
|
273
|
+
@users.add("sato", :name => "kazuki sato")
|
274
|
+
@users.add("suzuki", :name => "Shiro SUZUKI")
|
275
|
+
@users.add("ito", :name => "Takashi Ito")
|
276
|
+
end
|
277
|
+
|
278
|
+
class BlockTest < self
|
279
|
+
def test_match
|
280
|
+
result = @users.select do |record|
|
281
|
+
record["name"] =~ /sh/
|
282
|
+
end
|
283
|
+
assert_equal(["ito", "suzuki"],
|
284
|
+
result.collect {|record| record.key.key}.sort)
|
285
|
+
end
|
286
|
+
|
287
|
+
def test_not_match
|
288
|
+
result = @users.select do |record|
|
289
|
+
record["name"] =~ /abcabcabc/
|
290
|
+
end
|
291
|
+
assert_equal([],
|
292
|
+
result.collect {|record| record.key.key}.sort)
|
293
|
+
end
|
294
|
+
|
295
|
+
def test_beginning_of_text
|
296
|
+
result = @users.select do |record|
|
297
|
+
record["name"] =~ /\Ash/
|
298
|
+
end
|
299
|
+
assert_equal(["suzuki"],
|
300
|
+
result.collect {|record| record.key.key}.sort)
|
301
|
+
end
|
302
|
+
|
303
|
+
def test_end_of_text
|
304
|
+
result = @users.select do |record|
|
305
|
+
record["name"] =~ /ki\z/
|
306
|
+
end
|
307
|
+
assert_equal(["suzuki"],
|
308
|
+
result.collect {|record| record.key.key}.sort)
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
312
|
+
class QueryStringTest < self
|
313
|
+
def test_match
|
314
|
+
result = @users.select("name:~t")
|
315
|
+
assert_equal(["ito", "sato"],
|
316
|
+
result.collect {|record| record.key.key}.sort)
|
317
|
+
end
|
318
|
+
|
319
|
+
def test_not_match
|
320
|
+
result = @users.select("name:~x")
|
321
|
+
assert_equal([],
|
322
|
+
result.collect {|record| record.key.key}.sort)
|
323
|
+
end
|
324
|
+
|
325
|
+
def test_beginning_of_text
|
326
|
+
result = @users.select("name:~\\\\As")
|
327
|
+
assert_equal(["suzuki"],
|
328
|
+
result.collect {|record| record.key.key}.sort)
|
329
|
+
end
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
251
333
|
class PrefixSearchTest < self
|
252
334
|
def setup_tables
|
253
335
|
Groonga::Schema.define do |schema|
|
data/test/test-expression.rb
CHANGED
@@ -78,15 +78,14 @@ class ExpressionTest < Test::Unit::TestCase
|
|
78
78
|
expression.compile
|
79
79
|
|
80
80
|
assert_equal(<<-INSPECTED.chomp, expression.inspect)
|
81
|
-
#<Groonga::Expression
|
81
|
+
#<Groonga::Expression
|
82
82
|
vars:{
|
83
83
|
},
|
84
84
|
codes:{
|
85
|
-
0:<push
|
86
|
-
1:<push
|
87
|
-
2:<plus
|
88
|
-
}
|
89
|
-
>>
|
85
|
+
0:<push n_args:1, flags:0, modify:2, value:1>,
|
86
|
+
1:<push n_args:1, flags:0, modify:0, value:1>,
|
87
|
+
2:<plus n_args:2, flags:0, modify:0, value:(NULL)>
|
88
|
+
}>
|
90
89
|
INSPECTED
|
91
90
|
end
|
92
91
|
|
@@ -172,26 +171,24 @@ class ExpressionTest < Test::Unit::TestCase
|
|
172
171
|
Groonga::Operator::PUSH,
|
173
172
|
1)
|
174
173
|
assert_equal(<<-INSPECTED.chomp, @expression.inspect)
|
175
|
-
#<Groonga::Expression
|
174
|
+
#<Groonga::Expression
|
176
175
|
vars:{
|
177
176
|
},
|
178
177
|
codes:{
|
179
|
-
0:<push
|
180
|
-
}
|
181
|
-
>>
|
178
|
+
0:<push n_args:1, flags:0, modify:0, value:#<proc:tokenizer TokenBigram arguments:[$1, $2, $3]>>
|
179
|
+
}>
|
182
180
|
INSPECTED
|
183
181
|
end
|
184
182
|
|
185
183
|
def test_name
|
186
184
|
@expression.append_object(Groonga["TokenBigram"], "push", 1)
|
187
185
|
assert_equal(<<-INSPECTED.chomp, @expression.inspect)
|
188
|
-
#<Groonga::Expression
|
186
|
+
#<Groonga::Expression
|
189
187
|
vars:{
|
190
188
|
},
|
191
189
|
codes:{
|
192
|
-
0:<push
|
193
|
-
}
|
194
|
-
>>
|
190
|
+
0:<push n_args:1, flags:0, modify:0, value:#<proc:tokenizer TokenBigram arguments:[$1, $2, $3]>>
|
191
|
+
}>
|
195
192
|
INSPECTED
|
196
193
|
end
|
197
194
|
end
|
@@ -207,67 +204,102 @@ class ExpressionTest < Test::Unit::TestCase
|
|
207
204
|
def test_constant
|
208
205
|
@expression.append_constant(29, Groonga::Operator::PUSH, 1)
|
209
206
|
assert_equal(<<-INSPECTED.chomp, @expression.inspect)
|
210
|
-
#<Groonga::Expression
|
207
|
+
#<Groonga::Expression
|
211
208
|
vars:{
|
212
209
|
},
|
213
210
|
codes:{
|
214
|
-
0:<push
|
215
|
-
}
|
216
|
-
>>
|
211
|
+
0:<push n_args:1, flags:0, modify:0, value:29>
|
212
|
+
}>
|
217
213
|
INSPECTED
|
218
214
|
end
|
219
215
|
|
220
216
|
def test_name
|
221
217
|
@expression.append_constant(29, "push", 1)
|
222
218
|
assert_equal(<<-INSPECTED.chomp, @expression.inspect)
|
223
|
-
#<Groonga::Expression
|
219
|
+
#<Groonga::Expression
|
224
220
|
vars:{
|
225
221
|
},
|
226
222
|
codes:{
|
227
|
-
0:<push
|
228
|
-
}
|
229
|
-
>>
|
223
|
+
0:<push n_args:1, flags:0, modify:0, value:29>
|
224
|
+
}>
|
230
225
|
INSPECTED
|
231
226
|
end
|
232
227
|
end
|
233
228
|
end
|
234
229
|
|
235
230
|
class AppendOperatorTest < self
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
231
|
+
class PlusTest < self
|
232
|
+
setup
|
233
|
+
def setup_expression
|
234
|
+
@expression = Groonga::Expression.new
|
235
|
+
@expression.append_constant(29)
|
236
|
+
@expression.append_constant(92)
|
237
|
+
end
|
238
|
+
|
239
|
+
def test_constant
|
240
|
+
@expression.append_operation(Groonga::Operator::PLUS, 2)
|
241
|
+
assert_equal(<<-INSPECTED.chomp, @expression.inspect)
|
242
|
+
#<Groonga::Expression
|
243
|
+
vars:{
|
244
|
+
},
|
245
|
+
codes:{
|
246
|
+
0:<push n_args:1, flags:0, modify:2, value:29>,
|
247
|
+
1:<push n_args:1, flags:0, modify:0, value:92>,
|
248
|
+
2:<plus n_args:2, flags:0, modify:0, value:(NULL)>
|
249
|
+
}>
|
250
|
+
INSPECTED
|
251
|
+
end
|
242
252
|
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
#<Groonga::Expression
|
253
|
+
def test_name
|
254
|
+
@expression.append_operation("plus", 2)
|
255
|
+
assert_equal(<<-INSPECTED.chomp, @expression.inspect)
|
256
|
+
#<Groonga::Expression
|
247
257
|
vars:{
|
248
258
|
},
|
249
259
|
codes:{
|
250
|
-
0:<push
|
251
|
-
1:<push
|
252
|
-
2:<plus
|
253
|
-
}
|
254
|
-
|
255
|
-
|
260
|
+
0:<push n_args:1, flags:0, modify:2, value:29>,
|
261
|
+
1:<push n_args:1, flags:0, modify:0, value:92>,
|
262
|
+
2:<plus n_args:2, flags:0, modify:0, value:(NULL)>
|
263
|
+
}>
|
264
|
+
INSPECTED
|
265
|
+
end
|
256
266
|
end
|
257
267
|
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
268
|
+
class RegexpTest < self
|
269
|
+
setup
|
270
|
+
def setup_expression
|
271
|
+
@expression = Groonga::Expression.new
|
272
|
+
@expression.append_constant("Alice")
|
273
|
+
@expression.append_constant(/\A[aA].*l/.source)
|
274
|
+
end
|
275
|
+
|
276
|
+
def test_constant
|
277
|
+
@expression.append_operation(Groonga::Operator::REGEXP, 2)
|
278
|
+
assert_equal(<<-INSPECTED.chomp, @expression.inspect)
|
279
|
+
#<Groonga::Expression
|
262
280
|
vars:{
|
263
281
|
},
|
264
282
|
codes:{
|
265
|
-
0:<push
|
266
|
-
1:<push
|
267
|
-
2:<
|
268
|
-
}
|
269
|
-
|
270
|
-
|
283
|
+
0:<push n_args:1, flags:0, modify:2, value:"Alice">,
|
284
|
+
1:<push n_args:1, flags:0, modify:0, value:"\\\\A[aA].*l">,
|
285
|
+
2:<regexp n_args:2, flags:0, modify:0, value:(NULL)>
|
286
|
+
}>
|
287
|
+
INSPECTED
|
288
|
+
end
|
289
|
+
|
290
|
+
def test_name
|
291
|
+
@expression.append_operation("regexp", 2)
|
292
|
+
assert_equal(<<-INSPECTED.chomp, @expression.inspect)
|
293
|
+
#<Groonga::Expression
|
294
|
+
vars:{
|
295
|
+
},
|
296
|
+
codes:{
|
297
|
+
0:<push n_args:1, flags:0, modify:2, value:"Alice">,
|
298
|
+
1:<push n_args:1, flags:0, modify:0, value:"\\\\A[aA].*l">,
|
299
|
+
2:<regexp n_args:2, flags:0, modify:0, value:(NULL)>
|
300
|
+
}>
|
301
|
+
INSPECTED
|
302
|
+
end
|
271
303
|
end
|
272
304
|
end
|
273
305
|
|
data/test/test-index-column.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
|
-
# Copyright (C) 2009-
|
3
|
+
# Copyright (C) 2009-2015 Kouhei Sutou <kou@clear-code.com>
|
4
4
|
#
|
5
5
|
# This library is free software; you can redistribute it and/or
|
6
6
|
# modify it under the terms of the GNU Lesser General Public
|
@@ -502,43 +502,116 @@ class IndexColumnTest < Test::Unit::TestCase
|
|
502
502
|
end
|
503
503
|
|
504
504
|
class EstimateSizeTest < self
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
505
|
+
sub_test_case "token ID" do
|
506
|
+
setup
|
507
|
+
def setup_schema
|
508
|
+
Groonga::Schema.define do |schema|
|
509
|
+
schema.create_table("Articles") do |table|
|
510
|
+
table.text("content")
|
511
|
+
end
|
511
512
|
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
513
|
+
schema.create_table("Terms",
|
514
|
+
:type => :hash,
|
515
|
+
:key_type => "ShortText",
|
516
|
+
:default_tokenizer => "TokenBigram",
|
517
|
+
:normalizer => "NormalizerAuto") do |table|
|
518
|
+
table.index("Articles.content",
|
519
|
+
:name => "articles_content",
|
520
|
+
:with_position => true,
|
521
|
+
:with_section => true)
|
522
|
+
end
|
521
523
|
end
|
524
|
+
|
525
|
+
@articles = Groonga["Articles"]
|
526
|
+
@terms = Groonga["Terms"]
|
527
|
+
@index = Groonga["Terms.articles_content"]
|
522
528
|
end
|
523
529
|
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
530
|
+
setup
|
531
|
+
def setup_data
|
532
|
+
@articles.add(:content => "Groonga is fast")
|
533
|
+
@articles.add(:content => "Rroonga is fast")
|
534
|
+
@articles.add(:content => "Mroonga is fast")
|
535
|
+
end
|
528
536
|
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
537
|
+
def test_id
|
538
|
+
assert_equal(7, @index.estimate_size(@terms["fast"].id))
|
539
|
+
end
|
540
|
+
|
541
|
+
def test_record
|
542
|
+
assert_equal(7, @index.estimate_size(@terms["fast"]))
|
543
|
+
end
|
534
544
|
end
|
535
545
|
|
536
|
-
|
537
|
-
|
546
|
+
sub_test_case "query" do
|
547
|
+
setup
|
548
|
+
def setup_schema
|
549
|
+
Groonga::Schema.define do |schema|
|
550
|
+
schema.create_table("Articles") do |table|
|
551
|
+
table.text("content")
|
552
|
+
end
|
553
|
+
|
554
|
+
schema.create_table("Terms",
|
555
|
+
:type => :hash,
|
556
|
+
:key_type => "ShortText",
|
557
|
+
:default_tokenizer => "TokenBigramSplitSymbolAlpha",
|
558
|
+
:normalizer => "NormalizerAuto") do |table|
|
559
|
+
table.index("Articles.content",
|
560
|
+
:name => "articles_content",
|
561
|
+
:with_position => true,
|
562
|
+
:with_section => true)
|
563
|
+
end
|
564
|
+
end
|
565
|
+
|
566
|
+
@articles = Groonga["Articles"]
|
567
|
+
@index = Groonga["Terms.articles_content"]
|
568
|
+
end
|
569
|
+
|
570
|
+
setup
|
571
|
+
def setup_data
|
572
|
+
@articles.add(:content => "Groonga is fast")
|
573
|
+
@articles.add(:content => "Rroonga is fast")
|
574
|
+
@articles.add(:content => "Mroonga is fast")
|
575
|
+
end
|
576
|
+
|
577
|
+
def test_query
|
578
|
+
assert_equal(6, @index.estimate_size("roonga"))
|
579
|
+
end
|
538
580
|
end
|
539
581
|
|
540
|
-
|
541
|
-
|
582
|
+
sub_test_case "lexicon cursor" do
|
583
|
+
setup
|
584
|
+
def setup_schema
|
585
|
+
Groonga::Schema.define do |schema|
|
586
|
+
schema.create_table("Memos") do |table|
|
587
|
+
table.short_text("tags", :type => :vector)
|
588
|
+
end
|
589
|
+
|
590
|
+
schema.create_table("Tags",
|
591
|
+
:type => :patricia_trie,
|
592
|
+
:key_type => "ShortText") do |table|
|
593
|
+
table.index("Memos.tags",
|
594
|
+
:name => "memos_tags")
|
595
|
+
end
|
596
|
+
end
|
597
|
+
|
598
|
+
@memos = Groonga["Memos"]
|
599
|
+
@tags = Groonga["Tags"]
|
600
|
+
@index = Groonga["Tags.memos_tags"]
|
601
|
+
end
|
602
|
+
|
603
|
+
setup
|
604
|
+
def setup_data
|
605
|
+
@memos.add(:tags => ["Groonga"])
|
606
|
+
@memos.add(:tags => ["Rroonga", "Ruby"])
|
607
|
+
@memos.add(:tags => ["grndump", "Rroonga"])
|
608
|
+
end
|
609
|
+
|
610
|
+
def test_query
|
611
|
+
@tags.open_prefix_cursor("R") do |cursor|
|
612
|
+
assert_equal(5, @index.estimate_size(cursor))
|
613
|
+
end
|
614
|
+
end
|
542
615
|
end
|
543
616
|
end
|
544
617
|
end
|
data/test/test-normalizer.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
#
|
3
|
-
# Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
|
3
|
+
# Copyright (C) 2012-2015 Kouhei Sutou <kou@clear-code.com>
|
4
4
|
#
|
5
5
|
# This library is free software; you can redistribute it and/or
|
6
6
|
# modify it under the terms of the GNU Lesser General Public
|
@@ -20,33 +20,39 @@ class NormalizerTest < Test::Unit::TestCase
|
|
20
20
|
|
21
21
|
setup :setup_database
|
22
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
|
-
|
23
|
+
sub_test_case(".normalize") do
|
24
|
+
def test_normal
|
25
|
+
assert_equal("abc", Groonga::Normalizer.normalize("AbC"))
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_space
|
29
|
+
assert_equal("abcdefgh", Groonga::Normalizer.normalize("AbC Def gh"))
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_remove_blank
|
33
|
+
assert_equal("abcdefgh",
|
34
|
+
Groonga::Normalizer.normalize("AbC Def gh",
|
35
|
+
:remove_blank => true))
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_group_text
|
39
|
+
assert_equal("キロメートルキロメートルキロメートルキロメートル",
|
40
|
+
Groonga::Normalizer.normalize("㌖㌖㌖㌖"));
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_keep_space
|
44
|
+
# full width space => half width space
|
45
|
+
assert_equal("abc def gh",
|
46
|
+
Groonga::Normalizer.normalize("AbC Def gh",
|
47
|
+
:remove_blank => false))
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_tilda
|
51
|
+
assert_equal("~~~", Groonga::Normalizer.normalize("~~〜"))
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_empty
|
55
|
+
assert_equal("", Groonga::Normalizer.normalize(""))
|
56
|
+
end
|
51
57
|
end
|
52
58
|
end
|