rbtree 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (7) hide show
  1. data/ChangeLog +119 -61
  2. data/LICENSE +1 -1
  3. data/README +54 -26
  4. data/extconf.rb +4 -27
  5. data/rbtree.c +117 -138
  6. data/test.rb +110 -66
  7. metadata +45 -35
data/test.rb CHANGED
@@ -1,16 +1,6 @@
1
1
  require "rbtree"
2
2
  require "test/unit.rb"
3
3
 
4
- module Test
5
- module Unit
6
- class TestCase
7
- unless method_defined?(:assert_raise)
8
- alias :assert_raise :assert_raises
9
- end
10
- end
11
- end
12
- end
13
-
14
4
  class RBTreeTest < Test::Unit::TestCase
15
5
  def setup
16
6
  @rbtree = RBTree[*%w(b B d D a A c C)]
@@ -22,8 +12,8 @@ class RBTreeTest < Test::Unit::TestCase
22
12
  RBTree.new("a")
23
13
  RBTree.new { "a" }
24
14
  }
25
- assert_raise(ArgumentError) { RBTree.new("a") {} }
26
- assert_raise(ArgumentError) { RBTree.new("a", "a") }
15
+ assert_raises(ArgumentError) { RBTree.new("a") {} }
16
+ assert_raises(ArgumentError) { RBTree.new("a", "a") }
27
17
  end
28
18
 
29
19
  def test_aref
@@ -59,14 +49,25 @@ class RBTreeTest < Test::Unit::TestCase
59
49
  @rbtree.readjust {|a,b| b <=> a }
60
50
  assert_equal(nil, RBTree[@rbtree].cmp_proc)
61
51
 
62
- assert_raise(ArgumentError) { RBTree["e"] }
52
+ assert_raises(ArgumentError) { RBTree["e"] }
63
53
 
64
54
  rbtree = RBTree[Hash[*%w(b B d D a A c C)]]
65
55
  assert_equal(4, rbtree.size)
66
- assert_equal("A", @rbtree["a"])
67
- assert_equal("B", @rbtree["b"])
68
- assert_equal("C", @rbtree["c"])
69
- assert_equal("D", @rbtree["d"])
56
+ assert_equal("A", rbtree["a"])
57
+ assert_equal("B", rbtree["b"])
58
+ assert_equal("C", rbtree["c"])
59
+ assert_equal("D", rbtree["d"])
60
+
61
+ rbtree = RBTree[[%w(a A), %w(b B), %w(c C), %w(d D)]];
62
+ assert_equal(4, rbtree.size)
63
+ assert_equal("A", rbtree["a"])
64
+ assert_equal("B", rbtree["b"])
65
+ assert_equal("C", rbtree["c"])
66
+ assert_equal("D", rbtree["d"])
67
+
68
+ rbtree = RBTree[[["a"]]]
69
+ assert_equal(1, rbtree.size)
70
+ assert_equal(nil, rbtree["a"])
70
71
  end
71
72
 
72
73
  def test_clear
@@ -83,10 +84,8 @@ class RBTreeTest < Test::Unit::TestCase
83
84
  assert_equal(5, @rbtree.size)
84
85
  assert_equal("E", @rbtree["c"])
85
86
 
86
- if VERSION >= "1.8.0"
87
- assert_raise(ArgumentError) { @rbtree[100] = 100 }
88
- assert_equal(5, @rbtree.size)
89
- end
87
+ assert_raises(ArgumentError) { @rbtree[100] = 100 }
88
+ assert_equal(5, @rbtree.size)
90
89
 
91
90
 
92
91
  key = "f"
@@ -134,7 +133,7 @@ class RBTreeTest < Test::Unit::TestCase
134
133
  rbtree = RBTree.new("e")
135
134
  assert_equal("e", rbtree.default)
136
135
  assert_equal("e", rbtree.default("f"))
137
- assert_raise(ArgumentError) { rbtree.default("e", "f") }
136
+ assert_raises(ArgumentError) { rbtree.default("e", "f") }
138
137
 
139
138
  rbtree = RBTree.new {|rbtree, key| @rbtree[key || "c"] }
140
139
  assert_equal("C", rbtree.default(nil))
@@ -194,14 +193,14 @@ class RBTreeTest < Test::Unit::TestCase
194
193
  assert_equal("C", @rbtree.fetch("c"))
195
194
  assert_equal("D", @rbtree.fetch("d"))
196
195
 
197
- assert_raise(IndexError) { @rbtree.fetch("e") }
196
+ assert_raises(IndexError) { @rbtree.fetch("e") }
198
197
 
199
198
  assert_equal("E", @rbtree.fetch("e", "E"))
200
199
  assert_equal("E", @rbtree.fetch("e") { "E" })
201
200
  assert_equal("E", @rbtree.fetch("e", "F") { "E" })
202
201
 
203
- assert_raise(ArgumentError) { @rbtree.fetch }
204
- assert_raise(ArgumentError) { @rbtree.fetch("e", "E", "E") }
202
+ assert_raises(ArgumentError) { @rbtree.fetch }
203
+ assert_raises(ArgumentError) { @rbtree.fetch("e", "E", "E") }
205
204
  end
206
205
 
207
206
  def test_index
@@ -220,79 +219,99 @@ class RBTreeTest < Test::Unit::TestCase
220
219
  @rbtree.each {|key, val| ret << key << val }
221
220
  assert_equal(%w(a A b B c C d D), ret)
222
221
 
223
- assert_raise(TypeError) {
222
+ assert_raises(TypeError) {
224
223
  @rbtree.each { @rbtree["e"] = "E" }
225
224
  }
226
225
  assert_equal(4, @rbtree.size)
227
226
 
228
227
  @rbtree.each {
229
228
  @rbtree.each {}
230
- assert_raise(TypeError) {
229
+ assert_raises(TypeError) {
231
230
  @rbtree["e"] = "E"
232
231
  }
233
232
  break
234
233
  }
235
234
  assert_equal(4, @rbtree.size)
235
+
236
+ if defined?(Enumerable::Enumerator)
237
+ enumerator = @rbtree.each
238
+ assert_equal(%w(a A b B c C d D), enumerator.map.flatten)
239
+ end
236
240
  end
237
-
241
+
238
242
  def test_each_pair
239
243
  ret = []
240
244
  @rbtree.each_pair {|key, val| ret << key << val }
241
245
  assert_equal(%w(a A b B c C d D), ret)
242
246
 
243
- assert_raise(TypeError) {
247
+ assert_raises(TypeError) {
244
248
  @rbtree.each_pair { @rbtree["e"] = "E" }
245
249
  }
246
250
  assert_equal(4, @rbtree.size)
247
251
 
248
252
  @rbtree.each_pair {
249
253
  @rbtree.each_pair {}
250
- assert_raise(TypeError) {
254
+ assert_raises(TypeError) {
251
255
  @rbtree["e"] = "E"
252
256
  }
253
257
  break
254
258
  }
255
259
  assert_equal(4, @rbtree.size)
260
+
261
+ if defined?(Enumerable::Enumerator)
262
+ enumerator = @rbtree.each_pair
263
+ assert_equal(%w(a A b B c C d D), enumerator.map.flatten)
264
+ end
256
265
  end
257
266
 
258
267
  def test_each_key
259
268
  ret = []
260
- @rbtree.each_key {|val| ret.push(val) }
269
+ @rbtree.each_key {|key| ret.push(key) }
261
270
  assert_equal(%w(a b c d), ret)
262
271
 
263
- assert_raise(TypeError) {
272
+ assert_raises(TypeError) {
264
273
  @rbtree.each_key { @rbtree["e"] = "E" }
265
274
  }
266
275
  assert_equal(4, @rbtree.size)
267
276
 
268
277
  @rbtree.each_key {
269
278
  @rbtree.each_key {}
270
- assert_raise(TypeError) {
279
+ assert_raises(TypeError) {
271
280
  @rbtree["e"] = "E"
272
281
  }
273
282
  break
274
283
  }
275
284
  assert_equal(4, @rbtree.size)
285
+
286
+ if defined?(Enumerable::Enumerator)
287
+ enumerator = @rbtree.each_key
288
+ assert_equal(%w(a b c d), enumerator.map.flatten)
289
+ end
276
290
  end
277
291
 
278
292
  def test_each_value
279
293
  ret = []
280
- @rbtree.each_value {|key| ret.push(key) }
294
+ @rbtree.each_value {|val| ret.push(val) }
281
295
  assert_equal(%w(A B C D), ret)
282
296
 
283
- assert_raise(TypeError) {
297
+ assert_raises(TypeError) {
284
298
  @rbtree.each_value { @rbtree["e"] = "E" }
285
299
  }
286
300
  assert_equal(4, @rbtree.size)
287
301
 
288
302
  @rbtree.each_value {
289
303
  @rbtree.each_value {}
290
- assert_raise(TypeError) {
304
+ assert_raises(TypeError) {
291
305
  @rbtree["e"] = "E"
292
306
  }
293
307
  break
294
308
  }
295
309
  assert_equal(4, @rbtree.size)
310
+
311
+ if defined?(Enumerable::Enumerator)
312
+ enumerator = @rbtree.each_value
313
+ assert_equal(%w(A B C D), enumerator.map.flatten)
314
+ end
296
315
  end
297
316
 
298
317
  def test_shift
@@ -341,12 +360,12 @@ class RBTreeTest < Test::Unit::TestCase
341
360
  @rbtree.delete_if {|key, val| val == "A" || val == "B" }
342
361
  assert_equal(RBTree[*%w(c C d D)], @rbtree)
343
362
 
344
- assert_raise(ArgumentError) {
363
+ assert_raises(ArgumentError) {
345
364
  @rbtree.delete_if {|key, val| key == "c" or raise ArgumentError }
346
365
  }
347
366
  assert_equal(2, @rbtree.size)
348
367
 
349
- assert_raise(TypeError) {
368
+ assert_raises(TypeError) {
350
369
  @rbtree.delete_if { @rbtree["e"] = "E" }
351
370
  }
352
371
  assert_equal(2, @rbtree.size)
@@ -355,12 +374,18 @@ class RBTreeTest < Test::Unit::TestCase
355
374
  @rbtree.each {
356
375
  assert_equal(2, @rbtree.size)
357
376
  }
358
- assert_raise(TypeError) {
377
+ assert_raises(TypeError) {
359
378
  @rbtree["e"] = "E"
360
379
  }
361
380
  true
362
381
  }
363
382
  assert_equal(0, @rbtree.size)
383
+
384
+ if defined?(Enumerable::Enumerator)
385
+ rbtree = RBTree[*%w(b B d D a A c C)]
386
+ enumerator = rbtree.delete_if
387
+ assert_equal([true, true, false, false], enumerator.map {|key, val| val == "A" || val == "B" })
388
+ end
364
389
  end
365
390
 
366
391
  def test_reject_bang
@@ -371,8 +396,14 @@ class RBTreeTest < Test::Unit::TestCase
371
396
  ret = @rbtree.reject! {|key, val| val == "A" || val == "B" }
372
397
  assert_same(@rbtree, ret)
373
398
  assert_equal(RBTree[*%w(c C d D)], ret)
399
+
400
+ if defined?(Enumerable::Enumerator)
401
+ rbtree = RBTree[*%w(b B d D a A c C)]
402
+ enumerator = rbtree.reject!
403
+ assert_equal([true, true, false, false], enumerator.map {|key, val| val == "A" || val == "B" })
404
+ end
374
405
  end
375
-
406
+
376
407
  def test_reject
377
408
  ret = @rbtree.reject { false }
378
409
  assert_equal(nil, ret)
@@ -381,12 +412,22 @@ class RBTreeTest < Test::Unit::TestCase
381
412
  ret = @rbtree.reject {|key, val| val == "A" || val == "B" }
382
413
  assert_equal(RBTree[*%w(c C d D)], ret)
383
414
  assert_equal(4, @rbtree.size)
415
+
416
+ if defined?(Enumerable::Enumerator)
417
+ enumerator = @rbtree.reject
418
+ assert_equal([true, true, false, false], enumerator.map {|key, val| val == "A" || val == "B" })
419
+ end
384
420
  end
385
421
 
386
422
  def test_select
387
423
  ret = @rbtree.select {|key, val| val == "A" || val == "B" }
388
424
  assert_equal(%w(a A b B), ret.flatten)
389
- assert_raise(ArgumentError) { @rbtree.select("c") }
425
+ assert_raises(ArgumentError) { @rbtree.select("c") }
426
+
427
+ if defined?(Enumerable::Enumerator)
428
+ enumerator = @rbtree.select
429
+ assert_equal([true, true, false, false], enumerator.map {|key, val| val == "A" || val == "B"})
430
+ end
390
431
  end
391
432
 
392
433
  def test_values_at
@@ -414,7 +455,7 @@ class RBTreeTest < Test::Unit::TestCase
414
455
  }
415
456
  assert_equal(RBTree[*%w(d AB)], @rbtree)
416
457
 
417
- assert_raise(TypeError) { @rbtree.update("e") }
458
+ assert_raises(TypeError) { @rbtree.update("e") }
418
459
  end
419
460
 
420
461
  def test_merge
@@ -538,7 +579,7 @@ class RBTreeTest < Test::Unit::TestCase
538
579
  }
539
580
  assert_equal(%w(b c), ret)
540
581
 
541
- assert_raise(TypeError) {
582
+ assert_raises(TypeError) {
542
583
  @rbtree.bound("a", "d") {
543
584
  @rbtree["e"] = "E"
544
585
  }
@@ -547,7 +588,7 @@ class RBTreeTest < Test::Unit::TestCase
547
588
 
548
589
  @rbtree.bound("b", "c") {
549
590
  @rbtree.bound("b", "c") {}
550
- assert_raise(TypeError) {
591
+ assert_raises(TypeError) {
551
592
  @rbtree["e"] = "E"
552
593
  }
553
594
  break
@@ -588,15 +629,13 @@ class RBTreeTest < Test::Unit::TestCase
588
629
  assert_equal(proc, @rbtree.cmp_proc)
589
630
 
590
631
  @rbtree[0] = nil
591
- if VERSION >= "1.8.0"
592
- assert_raise(ArgumentError) { @rbtree.readjust(nil) }
593
- assert_equal(5, @rbtree.size)
594
- assert_equal(proc, @rbtree.cmp_proc)
595
-
596
- @rbtree.delete(0)
597
- @rbtree.readjust(nil)
598
- assert_raise(ArgumentError) { @rbtree[0] = nil }
599
- end
632
+ assert_raises(ArgumentError) { @rbtree.readjust(nil) }
633
+ assert_equal(5, @rbtree.size)
634
+ assert_equal(proc, @rbtree.cmp_proc)
635
+
636
+ @rbtree.delete(0)
637
+ @rbtree.readjust(nil)
638
+ assert_raises(ArgumentError) { @rbtree[0] = nil }
600
639
 
601
640
 
602
641
  rbtree = RBTree.new
@@ -609,14 +648,12 @@ class RBTreeTest < Test::Unit::TestCase
609
648
  rbtree.readjust
610
649
  assert_equal([["e"], ["f"]], rbtree.keys)
611
650
 
612
- if VERSION >= "1.8.0"
613
- assert_raise(ArgumentError) { @rbtree.readjust { "e" } }
614
- end
615
- assert_raise(TypeError) { @rbtree.readjust("e") }
616
- assert_raise(ArgumentError) {
651
+ assert_raises(ArgumentError) { @rbtree.readjust { "e" } }
652
+ assert_raises(TypeError) { @rbtree.readjust("e") }
653
+ assert_raises(ArgumentError) {
617
654
  @rbtree.readjust(proc) {|a,b| a <=> b }
618
655
  }
619
- assert_raise(ArgumentError) { @rbtree.readjust(proc, proc) }
656
+ assert_raises(ArgumentError) { @rbtree.readjust(proc, proc) }
620
657
  end
621
658
 
622
659
  def test_replace
@@ -630,13 +667,18 @@ class RBTreeTest < Test::Unit::TestCase
630
667
  assert_equal(rbtree.default, @rbtree.default)
631
668
  assert_equal(rbtree.cmp_proc, @rbtree.cmp_proc)
632
669
 
633
- assert_raise(TypeError) { @rbtree.replace("e") }
670
+ assert_raises(TypeError) { @rbtree.replace("e") }
634
671
  end
635
672
 
636
673
  def test_reverse_each
637
674
  ret = []
638
675
  @rbtree.reverse_each { |key, val| ret.push([key, val]) }
639
676
  assert_equal(%w(d D c C b B a A), ret.flatten)
677
+
678
+ if defined?(Enumerable::Enumerator)
679
+ enumerator = @rbtree.reverse_each
680
+ assert_equal(%w(d D c C b B a A), enumerator.map.flatten)
681
+ end
640
682
  end
641
683
 
642
684
  def test_marshal
@@ -645,11 +687,11 @@ class RBTreeTest < Test::Unit::TestCase
645
687
  @rbtree.default = "e"
646
688
  assert_equal(@rbtree, Marshal.load(Marshal.dump(@rbtree)))
647
689
 
648
- assert_raise(TypeError) {
690
+ assert_raises(TypeError) {
649
691
  Marshal.dump(RBTree.new { "e" })
650
692
  }
651
693
 
652
- assert_raise(TypeError) {
694
+ assert_raises(TypeError) {
653
695
  @rbtree.readjust {|a, b| a <=> b}
654
696
  Marshal.dump(@rbtree)
655
697
  }
@@ -710,7 +752,7 @@ class MultiRBTreeTest < Test::Unit::TestCase
710
752
  assert_equal(%w(a A b B b C b D c C), @rbtree.to_a.flatten)
711
753
 
712
754
  assert_equal(MultiRBTree[*%w(a A)], MultiRBTree[RBTree[*%w(a A)]])
713
- assert_raise(ArgumentError) {
755
+ assert_raises(TypeError) {
714
756
  RBTree[MultiRBTree[*%w(a A)]]
715
757
  }
716
758
  end
@@ -740,7 +782,9 @@ class MultiRBTreeTest < Test::Unit::TestCase
740
782
  end
741
783
 
742
784
  def test_to_hash
743
- assert_equal(Hash[*%w(a A b D c C)], @rbtree.to_hash)
785
+ assert_raises(TypeError) {
786
+ @rbtree.to_hash
787
+ }
744
788
  end
745
789
 
746
790
  def test_to_rbtree
@@ -766,7 +810,7 @@ class MultiRBTreeTest < Test::Unit::TestCase
766
810
  def test_replace
767
811
  assert_equal(RBTree[*%w(a A)],
768
812
  MultiRBTree[*%w(a A)].replace(RBTree[*%w(a A)]))
769
- assert_raise(TypeError) {
813
+ assert_raises(TypeError) {
770
814
  RBTree[*%w(a A)].replace(MultiRBTree[*%w(a A)])
771
815
  }
772
816
  end
@@ -774,7 +818,7 @@ class MultiRBTreeTest < Test::Unit::TestCase
774
818
  def test_update
775
819
  assert_equal(MultiRBTree[*%w(a A b B)],
776
820
  MultiRBTree[*%w(a A)].update(RBTree[*%w(b B)]))
777
- assert_raise(TypeError) {
821
+ assert_raises(TypeError) {
778
822
  RBTree[*%w(a A)].update(MultiRBTree[*%w(b B)])
779
823
  }
780
824
  end
metadata CHANGED
@@ -1,33 +1,26 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.4
3
- specification_version: 1
4
2
  name: rbtree
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.2.0
7
- date: 2008-02-05 00:00:00 +09:00
8
- summary: A sorted associative collection.
9
- require_paths:
10
- - .
11
- email: burningdowntheopera at yahoo dot co dot jp
12
- homepage: http://www.geocities.co.jp/SiliconValley-PaloAlto/3388/rbtree/README.html
13
- rubyforge_project:
14
- description: RBTree is a sorted associative collection using Red-Black Tree as the internal data structure. The elements of RBTree are ordered and the interface is the almost same as Hash, so simply you can consider RBTree sorted Hash.
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 0.2.1
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - OZAWA Takuma
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-01-27 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: RBTree is a sorted associative collection that is implemented with Red-Black Tree. The elements of RBTree are ordered and its interface is the almost same as Hash, so simply you can consider RBTree sorted Hash.
17
+ email: burningdowntheopera at yahoo dot co dot jp
18
+ executables: []
19
+
20
+ extensions:
21
+ - extconf.rb
22
+ extra_rdoc_files:
23
+ - rbtree.c
31
24
  files:
32
25
  - ChangeLog
33
26
  - LICENSE
@@ -39,20 +32,37 @@ files:
39
32
  - extconf.rb
40
33
  - rbtree.c
41
34
  - test.rb
42
- test_files:
43
- - test.rb
35
+ has_rdoc: true
36
+ homepage: http://www.geocities.co.jp/SiliconValley-PaloAlto/3388/rbtree/README.html
37
+ post_install_message:
44
38
  rdoc_options:
39
+ - -S
40
+ - -t
41
+ - ruby-rbtree
45
42
  - --main
46
- - RBTree
43
+ - MultiRBTree
47
44
  - --exclude
48
45
  - .*
49
- extra_rdoc_files:
50
- - rbtree.c
51
- executables: []
52
-
53
- extensions:
54
- - extconf.rb
46
+ require_paths:
47
+ - .
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.8.0
53
+ version:
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
55
60
  requirements: []
56
61
 
57
- dependencies: []
58
-
62
+ rubyforge_project: rbtree
63
+ rubygems_version: 1.3.1
64
+ signing_key:
65
+ specification_version: 2
66
+ summary: A sorted associative collection.
67
+ test_files:
68
+ - test.rb