rbtree 0.4.5 → 0.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/README +6 -0
  3. data/extconf.rb +0 -8
  4. data/rbtree.c +76 -94
  5. data/test.rb +135 -131
  6. metadata +37 -39
data/test.rb CHANGED
@@ -10,11 +10,11 @@ class RBTreeTest < Test::Unit::TestCase
10
10
  def setup
11
11
  @rbtree = RBTree[*%w(b B d D a A c C)]
12
12
  end
13
-
13
+
14
14
  def have_enumerator?
15
15
  defined?(Enumerable::Enumerator) or defined?(Enumerator)
16
16
  end
17
-
17
+
18
18
  def test_new
19
19
  assert_nothing_raised {
20
20
  RBTree.new
@@ -36,90 +36,90 @@ class RBTreeTest < Test::Unit::TestCase
36
36
  assert_raises(TypeError) { RBTree.new(&lambda {|a, b, c, *d|}) }
37
37
  end
38
38
  end
39
-
39
+
40
40
  def test_aref
41
41
  assert_equal("A", @rbtree["a"])
42
42
  assert_equal("B", @rbtree["b"])
43
43
  assert_equal("C", @rbtree["c"])
44
44
  assert_equal("D", @rbtree["d"])
45
-
45
+
46
46
  assert_equal(nil, @rbtree["e"])
47
47
  @rbtree.default = "E"
48
48
  assert_equal("E", @rbtree["e"])
49
49
  end
50
-
50
+
51
51
  def test_size
52
52
  assert_equal(4, @rbtree.size)
53
53
  end
54
-
54
+
55
55
  def test_create
56
56
  rbtree = RBTree[]
57
57
  assert_equal(0, rbtree.size)
58
-
58
+
59
59
  rbtree = RBTree[@rbtree]
60
60
  assert_equal(4, rbtree.size)
61
61
  assert_equal("A", @rbtree["a"])
62
62
  assert_equal("B", @rbtree["b"])
63
63
  assert_equal("C", @rbtree["c"])
64
64
  assert_equal("D", @rbtree["d"])
65
-
65
+
66
66
  rbtree = RBTree[RBTree.new("e")]
67
67
  assert_equal(nil, rbtree.default)
68
68
  rbtree = RBTree[RBTree.new { "e" }]
69
69
  assert_equal(nil, rbtree.default_proc)
70
70
  @rbtree.readjust {|a,b| b <=> a }
71
71
  assert_equal(nil, RBTree[@rbtree].cmp_proc)
72
-
72
+
73
73
  assert_raises(ArgumentError) { RBTree["e"] }
74
-
74
+
75
75
  rbtree = RBTree[Hash[*%w(b B d D a A c C)]]
76
76
  assert_equal(4, rbtree.size)
77
77
  assert_equal("A", rbtree["a"])
78
78
  assert_equal("B", rbtree["b"])
79
79
  assert_equal("C", rbtree["c"])
80
80
  assert_equal("D", rbtree["d"])
81
-
81
+
82
82
  rbtree = RBTree[[%w(a A), %w(b B), %w(c C), %w(d D)]];
83
83
  assert_equal(4, rbtree.size)
84
84
  assert_equal("A", rbtree["a"])
85
85
  assert_equal("B", rbtree["b"])
86
86
  assert_equal("C", rbtree["c"])
87
87
  assert_equal("D", rbtree["d"])
88
-
88
+
89
89
  # assert_raises(ArgumentError) { RBTree[["a"]] }
90
-
90
+
91
91
  rbtree = RBTree[[["a"]]]
92
92
  assert_equal(1, rbtree.size)
93
93
  assert_equal(nil, rbtree["a"])
94
-
94
+
95
95
  # assert_raises(ArgumentError) { RBTree[[["a", "A", "b", "B"]]] }
96
96
  end
97
-
97
+
98
98
  def test_clear
99
99
  @rbtree.clear
100
100
  assert_equal(0, @rbtree.size)
101
101
  end
102
-
102
+
103
103
  def test_aset
104
104
  @rbtree["e"] = "E"
105
105
  assert_equal(5, @rbtree.size)
106
106
  assert_equal("E", @rbtree["e"])
107
-
107
+
108
108
  @rbtree["c"] = "E"
109
109
  assert_equal(5, @rbtree.size)
110
110
  assert_equal("E", @rbtree["c"])
111
-
111
+
112
112
  assert_raises(ArgumentError) { @rbtree[100] = 100 }
113
113
  assert_equal(5, @rbtree.size)
114
-
115
-
114
+
115
+
116
116
  key = "f"
117
117
  @rbtree[key] = "F"
118
118
  cloned_key = @rbtree.last[0]
119
119
  assert_equal("f", cloned_key)
120
120
  assert_not_same(key, cloned_key)
121
121
  assert_equal(true, cloned_key.frozen?)
122
-
122
+
123
123
  @rbtree["f"] = "F"
124
124
  assert_same(cloned_key, @rbtree.last[0])
125
125
 
@@ -129,7 +129,7 @@ class RBTreeTest < Test::Unit::TestCase
129
129
  assert_same(key, rbtree.first[0])
130
130
  assert_equal(false, key.frozen?)
131
131
  end
132
-
132
+
133
133
  def test_clone
134
134
  clone = @rbtree.clone
135
135
  assert_equal(4, @rbtree.size)
@@ -137,71 +137,71 @@ class RBTreeTest < Test::Unit::TestCase
137
137
  assert_equal("B", @rbtree["b"])
138
138
  assert_equal("C", @rbtree["c"])
139
139
  assert_equal("D", @rbtree["d"])
140
-
140
+
141
141
  rbtree = RBTree.new("e")
142
142
  clone = rbtree.clone
143
143
  assert_equal("e", clone.default)
144
-
144
+
145
145
  rbtree = RBTree.new { "e" }
146
146
  clone = rbtree.clone
147
147
  assert_equal("e", clone.default(nil))
148
-
148
+
149
149
  rbtree = RBTree.new
150
150
  rbtree.readjust {|a, b| a <=> b }
151
151
  clone = rbtree.clone
152
152
  assert_equal(rbtree.cmp_proc, clone.cmp_proc)
153
153
  end
154
-
154
+
155
155
  def test_default
156
156
  rbtree = RBTree.new("e")
157
157
  assert_equal("e", rbtree.default)
158
158
  assert_equal("e", rbtree.default("f"))
159
159
  assert_raises(ArgumentError) { rbtree.default("e", "f") }
160
-
160
+
161
161
  rbtree = RBTree.new {|tree, key| @rbtree[key || "c"] }
162
162
  assert_equal(nil, rbtree.default)
163
163
  assert_equal("C", rbtree.default(nil))
164
164
  assert_equal("B", rbtree.default("b"))
165
165
  end
166
-
166
+
167
167
  def test_set_default
168
168
  rbtree = RBTree.new { "e" }
169
169
  rbtree.default = "f"
170
170
  assert_equal("f", rbtree.default)
171
171
  assert_equal(nil, rbtree.default_proc)
172
-
172
+
173
173
  rbtree = RBTree.new { "e" }
174
174
  rbtree.default = nil
175
175
  assert_equal(nil, rbtree.default)
176
176
  assert_equal(nil, rbtree.default_proc)
177
177
  end
178
-
178
+
179
179
  def test_default_proc
180
180
  rbtree = RBTree.new("e")
181
181
  assert_equal(nil, rbtree.default_proc)
182
-
182
+
183
183
  rbtree = RBTree.new { "f" }
184
184
  assert_equal("f", rbtree.default_proc.call)
185
185
  end
186
-
186
+
187
187
  def test_set_default_proc
188
188
  rbtree = RBTree.new("e")
189
189
  rbtree.default_proc = Proc.new { "f" }
190
190
  assert_equal(nil, rbtree.default)
191
191
  assert_equal("f", rbtree.default_proc.call)
192
-
192
+
193
193
  rbtree = RBTree.new("e")
194
194
  rbtree.default_proc = nil
195
195
  assert_equal(nil, rbtree.default)
196
196
  assert_equal(nil, rbtree.default_proc)
197
-
197
+
198
198
  if Symbol.method_defined?(:to_proc)
199
199
  @rbtree.default_proc = :upper_bound
200
200
  assert_equal(%w(d D), @rbtree["e"])
201
201
  end
202
-
202
+
203
203
  assert_raises(TypeError) { rbtree.default_proc = "f" }
204
-
204
+
205
205
  if RUBY_VERSION >= "1.9.2"
206
206
  assert_nothing_raised {
207
207
  @rbtree.default_proc = lambda {|a, b|}
@@ -214,12 +214,12 @@ class RBTreeTest < Test::Unit::TestCase
214
214
  assert_raises(TypeError) { @rbtree.default_proc = lambda {|a, b, c, *d|} }
215
215
  end
216
216
  end
217
-
217
+
218
218
  def test_equal
219
219
  assert_equal(RBTree.new, RBTree.new)
220
220
  assert_equal(@rbtree, @rbtree)
221
221
  assert_not_equal(@rbtree, RBTree.new)
222
-
222
+
223
223
  rbtree = RBTree[*%w(b B d D a A c C)]
224
224
  assert_equal(@rbtree, rbtree)
225
225
  rbtree["d"] = "A"
@@ -229,24 +229,24 @@ class RBTreeTest < Test::Unit::TestCase
229
229
  assert_not_equal(@rbtree, rbtree)
230
230
  @rbtree["e"] = "E"
231
231
  assert_equal(@rbtree, rbtree)
232
-
232
+
233
233
  rbtree.default = "e"
234
234
  assert_equal(@rbtree, rbtree)
235
235
  @rbtree.default = "f"
236
236
  assert_equal(@rbtree, rbtree)
237
-
237
+
238
238
  a = RBTree.new("e")
239
239
  b = RBTree.new { "f" }
240
240
  assert_equal(a, b)
241
241
  assert_equal(b, b.clone)
242
-
242
+
243
243
  a = RBTree.new
244
244
  b = RBTree.new
245
245
  a.readjust {|x, y| x <=> y }
246
246
  assert_not_equal(a, b)
247
247
  b.readjust(a.cmp_proc)
248
248
  assert_equal(a, b)
249
-
249
+
250
250
  if RUBY_VERSION >= "1.8.7"
251
251
  a = RBTree.new
252
252
  a[1] = a
@@ -255,19 +255,19 @@ class RBTreeTest < Test::Unit::TestCase
255
255
  assert_equal(a, b)
256
256
  end
257
257
  end
258
-
258
+
259
259
  def test_fetch
260
260
  assert_equal("A", @rbtree.fetch("a"))
261
261
  assert_equal("B", @rbtree.fetch("b"))
262
262
  assert_equal("C", @rbtree.fetch("c"))
263
263
  assert_equal("D", @rbtree.fetch("d"))
264
-
264
+
265
265
  assert_raises(IndexError) { @rbtree.fetch("e") }
266
-
266
+
267
267
  assert_equal("E", @rbtree.fetch("e", "E"))
268
268
  assert_equal("E", @rbtree.fetch("e") { "E" })
269
269
  # assert_equal("E", @rbtree.fetch("e", "F") { "E" })
270
-
270
+
271
271
  assert_raises(ArgumentError) { @rbtree.fetch }
272
272
  assert_raises(ArgumentError) { @rbtree.fetch("e", "E", "E") }
273
273
  end
@@ -282,17 +282,17 @@ class RBTreeTest < Test::Unit::TestCase
282
282
  @rbtree.clear
283
283
  assert_equal(true, @rbtree.empty?)
284
284
  end
285
-
285
+
286
286
  def test_each
287
287
  result = []
288
288
  @rbtree.each {|key, val| result << key << val }
289
289
  assert_equal(%w(a A b B c C d D), result)
290
-
290
+
291
291
  assert_raises(TypeError) {
292
292
  @rbtree.each { @rbtree["e"] = "E" }
293
293
  }
294
294
  assert_equal(4, @rbtree.size)
295
-
295
+
296
296
  @rbtree.each {
297
297
  @rbtree.each {}
298
298
  assert_raises(TypeError) {
@@ -301,13 +301,13 @@ class RBTreeTest < Test::Unit::TestCase
301
301
  break
302
302
  }
303
303
  assert_equal(4, @rbtree.size)
304
-
304
+
305
305
  if have_enumerator?
306
306
  enumerator = @rbtree.each
307
307
  assert_equal(%w(a A b B c C d D), enumerator.to_a.flatten)
308
308
  end
309
309
  end
310
-
310
+
311
311
  def test_each_key
312
312
  result = []
313
313
  @rbtree.each_key {|key| result.push(key) }
@@ -326,13 +326,13 @@ class RBTreeTest < Test::Unit::TestCase
326
326
  break
327
327
  }
328
328
  assert_equal(4, @rbtree.size)
329
-
329
+
330
330
  if have_enumerator?
331
331
  enumerator = @rbtree.each_key
332
332
  assert_equal(%w(a b c d), enumerator.to_a.flatten)
333
333
  end
334
334
  end
335
-
335
+
336
336
  def test_each_value
337
337
  result = []
338
338
  @rbtree.each_value {|val| result.push(val) }
@@ -351,7 +351,7 @@ class RBTreeTest < Test::Unit::TestCase
351
351
  break
352
352
  }
353
353
  assert_equal(4, @rbtree.size)
354
-
354
+
355
355
  if have_enumerator?
356
356
  enumerator = @rbtree.each_value
357
357
  assert_equal(%w(A B C D), enumerator.to_a.flatten)
@@ -363,53 +363,53 @@ class RBTreeTest < Test::Unit::TestCase
363
363
  assert_equal(3, @rbtree.size)
364
364
  assert_equal(%w(a A), result)
365
365
  assert_equal(nil, @rbtree["a"])
366
-
366
+
367
367
  3.times { @rbtree.shift }
368
368
  assert_equal(0, @rbtree.size)
369
369
  assert_equal(nil, @rbtree.shift)
370
370
  @rbtree.default = "e"
371
371
  assert_equal("e", @rbtree.shift)
372
-
372
+
373
373
  rbtree = RBTree.new { "e" }
374
374
  assert_equal("e", rbtree.shift)
375
375
  end
376
-
376
+
377
377
  def test_pop
378
378
  result = @rbtree.pop
379
379
  assert_equal(3, @rbtree.size)
380
380
  assert_equal(%w(d D), result)
381
381
  assert_equal(nil, @rbtree["d"])
382
-
382
+
383
383
  3.times { @rbtree.pop }
384
384
  assert_equal(0, @rbtree.size)
385
385
  assert_equal(nil, @rbtree.pop)
386
386
  @rbtree.default = "e"
387
387
  assert_equal("e", @rbtree.pop)
388
-
388
+
389
389
  rbtree = RBTree.new { "e" }
390
390
  assert_equal("e", rbtree.pop)
391
391
  end
392
-
392
+
393
393
  def test_delete
394
394
  result = @rbtree.delete("c")
395
395
  assert_equal("C", result)
396
396
  assert_equal(3, @rbtree.size)
397
397
  assert_equal(nil, @rbtree["c"])
398
-
398
+
399
399
  assert_equal(nil, @rbtree.delete("e"))
400
400
  assert_equal("E", @rbtree.delete("e") { "E" })
401
401
  end
402
-
402
+
403
403
  def test_delete_if
404
404
  result = @rbtree.delete_if {|key, val| val == "A" || val == "B" }
405
405
  assert_same(@rbtree, result)
406
406
  assert_equal(RBTree[*%w(c C d D)], @rbtree)
407
-
407
+
408
408
  assert_raises(ArgumentError) {
409
409
  @rbtree.delete_if {|key, val| key == "c" or raise ArgumentError }
410
410
  }
411
411
  assert_equal(2, @rbtree.size)
412
-
412
+
413
413
  assert_raises(TypeError) {
414
414
  @rbtree.delete_if { @rbtree["e"] = "E" }
415
415
  }
@@ -425,7 +425,7 @@ class RBTreeTest < Test::Unit::TestCase
425
425
  true
426
426
  }
427
427
  assert_equal(0, @rbtree.size)
428
-
428
+
429
429
  if have_enumerator?
430
430
  rbtree = RBTree[*%w(b B d D a A c C)]
431
431
  rbtree.delete_if.with_index {|(key, val), i| i < 2 }
@@ -437,7 +437,7 @@ class RBTreeTest < Test::Unit::TestCase
437
437
  result = @rbtree.keep_if {|key, val| val == "A" || val == "B" }
438
438
  assert_same(@rbtree, result)
439
439
  assert_equal(RBTree[*%w(a A b B)], @rbtree)
440
-
440
+
441
441
  if have_enumerator?
442
442
  rbtree = RBTree[*%w(b B d D a A c C)]
443
443
  rbtree.keep_if.with_index {|(key, val), i| i < 2 }
@@ -449,27 +449,27 @@ class RBTreeTest < Test::Unit::TestCase
449
449
  result = @rbtree.reject! { false }
450
450
  assert_equal(nil, result)
451
451
  assert_equal(4, @rbtree.size)
452
-
452
+
453
453
  result = @rbtree.reject! {|key, val| val == "A" || val == "B" }
454
454
  assert_same(@rbtree, result)
455
455
  assert_equal(RBTree[*%w(c C d D)], result)
456
-
456
+
457
457
  if have_enumerator?
458
458
  rbtree = RBTree[*%w(b B d D a A c C)]
459
459
  rbtree.reject!.with_index {|(key, val), i| i < 2 }
460
460
  assert_equal(RBTree[*%w(c C d D)], rbtree)
461
461
  end
462
462
  end
463
-
463
+
464
464
  def test_reject
465
465
  result = @rbtree.reject { false }
466
466
  assert_equal(RBTree[*%w(a A b B c C d D)], result)
467
467
  assert_equal(4, @rbtree.size)
468
-
468
+
469
469
  result = @rbtree.reject {|key, val| val == "A" || val == "B" }
470
470
  assert_equal(RBTree[*%w(c C d D)], result)
471
471
  assert_equal(4, @rbtree.size)
472
-
472
+
473
473
  if have_enumerator?
474
474
  result = @rbtree.reject.with_index {|(key, val), i| i < 2 }
475
475
  assert_equal(RBTree[*%w(c C d D)], result)
@@ -480,11 +480,11 @@ class RBTreeTest < Test::Unit::TestCase
480
480
  result = @rbtree.select! { true }
481
481
  assert_equal(nil, result)
482
482
  assert_equal(4, @rbtree.size)
483
-
483
+
484
484
  result = @rbtree.select! {|key, val| val == "A" || val == "B" }
485
485
  assert_same(@rbtree, result)
486
486
  assert_equal(RBTree[*%w(a A b B)], result)
487
-
487
+
488
488
  if have_enumerator?
489
489
  rbtree = RBTree[*%w(b B d D a A c C)]
490
490
  rbtree.select!.with_index {|(key, val), i| i < 2 }
@@ -496,11 +496,11 @@ class RBTreeTest < Test::Unit::TestCase
496
496
  result = @rbtree.select { true }
497
497
  assert_equal(RBTree[*%w(a A b B c C d D)], result)
498
498
  assert_equal(4, @rbtree.size)
499
-
499
+
500
500
  result = @rbtree.select {|key, val| val == "A" || val == "B" }
501
501
  assert_equal(RBTree[*%w(a A b B)], result)
502
502
  assert_raises(ArgumentError) { @rbtree.select("c") }
503
-
503
+
504
504
  if have_enumerator?
505
505
  result = @rbtree.select.with_index {|(key, val), i| i < 2 }
506
506
  assert_equal(RBTree[*%w(a A b B)], result)
@@ -511,37 +511,37 @@ class RBTreeTest < Test::Unit::TestCase
511
511
  result = @rbtree.values_at("d", "a", "e")
512
512
  assert_equal(["D", "A", nil], result)
513
513
  end
514
-
514
+
515
515
  def test_invert
516
516
  assert_equal(RBTree[*%w(A a B b C c D d)], @rbtree.invert)
517
517
  end
518
-
518
+
519
519
  def test_update
520
520
  rbtree = RBTree.new
521
521
  rbtree["e"] = "E"
522
522
  @rbtree.update(rbtree)
523
523
  assert_equal(RBTree[*%w(a A b B c C d D e E)], @rbtree)
524
-
524
+
525
525
  @rbtree.clear
526
526
  @rbtree["d"] = "A"
527
527
  rbtree.clear
528
528
  rbtree["d"] = "B"
529
-
529
+
530
530
  @rbtree.update(rbtree) {|key, val1, val2|
531
531
  val1 + val2 if key == "d"
532
532
  }
533
533
  assert_equal(RBTree[*%w(d AB)], @rbtree)
534
-
534
+
535
535
  assert_raises(TypeError) { @rbtree.update("e") }
536
536
  end
537
-
537
+
538
538
  def test_merge
539
539
  rbtree = RBTree.new
540
540
  rbtree["e"] = "E"
541
-
541
+
542
542
  result = @rbtree.merge(rbtree)
543
543
  assert_equal(RBTree[*%w(a A b B c C d D e E)], result)
544
-
544
+
545
545
  assert_equal(4, @rbtree.size)
546
546
  end
547
547
 
@@ -556,9 +556,9 @@ class RBTreeTest < Test::Unit::TestCase
556
556
  assert_equal([["a"], ["A"], [["b"]], [["B"]]], rbtree.flatten(1))
557
557
  assert_equal(["a", "A", ["b"], ["B"]], rbtree.flatten(2))
558
558
  assert_equal(["a", "A", "b", "B"], rbtree.flatten(3))
559
-
559
+
560
560
  assert_raises(TypeError) { @rbtree.flatten("e") }
561
- assert_raises(ArgumentError) { @rbtree.flatten(1, 2) }
561
+ assert_raises(ArgumentError) { @rbtree.flatten(1, 2) }
562
562
  end
563
563
  end
564
564
 
@@ -569,7 +569,7 @@ class RBTreeTest < Test::Unit::TestCase
569
569
  assert_equal(true, @rbtree.has_key?("d"))
570
570
  assert_equal(false, @rbtree.has_key?("e"))
571
571
  end
572
-
572
+
573
573
  def test_has_value
574
574
  assert_equal(true, @rbtree.has_value?("A"))
575
575
  assert_equal(true, @rbtree.has_value?("B"))
@@ -608,20 +608,20 @@ class RBTreeTest < Test::Unit::TestCase
608
608
  def test_to_rbtree
609
609
  assert_same(@rbtree, @rbtree.to_rbtree)
610
610
  end
611
-
611
+
612
612
  def test_inspect
613
613
  [:to_s, :inspect].each do |method|
614
614
  @rbtree.default = "e"
615
615
  @rbtree.readjust {|a, b| a <=> b}
616
616
  re = /#<RBTree: (\{.*\}), default=(.*), cmp_proc=(.*)>/
617
-
617
+
618
618
  assert_match(re, @rbtree.send(method))
619
619
  match = re.match(@rbtree.send(method))
620
620
  tree, default, cmp_proc = match.to_a[1..-1]
621
621
  assert_equal(%({"a"=>"A", "b"=>"B", "c"=>"C", "d"=>"D"}), tree)
622
622
  assert_equal(%("e"), default)
623
623
  assert_match(/#<Proc:\w+([@ ]#{__FILE__}:\d+)?>/o, cmp_proc)
624
-
624
+
625
625
  rbtree = RBTree.new
626
626
  assert_match(re, rbtree.send(method))
627
627
  match = re.match(rbtree.send(method))
@@ -629,9 +629,9 @@ class RBTreeTest < Test::Unit::TestCase
629
629
  assert_equal("{}", tree)
630
630
  assert_equal("nil", default)
631
631
  assert_equal("nil", cmp_proc)
632
-
632
+
633
633
  next if method == :to_s and RUBY_VERSION < "1.9"
634
-
634
+
635
635
  rbtree = RBTree.new
636
636
  rbtree[rbtree] = rbtree
637
637
  rbtree.default = rbtree
@@ -642,21 +642,21 @@ class RBTreeTest < Test::Unit::TestCase
642
642
  assert_equal("nil", cmp_proc)
643
643
  end
644
644
  end
645
-
645
+
646
646
  def test_lower_bound
647
647
  rbtree = RBTree[*%w(a A c C e E)]
648
648
  assert_equal(%w(c C), rbtree.lower_bound("c"))
649
649
  assert_equal(%w(c C), rbtree.lower_bound("b"))
650
650
  assert_equal(nil, rbtree.lower_bound("f"))
651
651
  end
652
-
652
+
653
653
  def test_upper_bound
654
654
  rbtree = RBTree[*%w(a A c C e E)]
655
655
  assert_equal(%w(c C), rbtree.upper_bound("c"))
656
656
  assert_equal(%w(c C), rbtree.upper_bound("d"))
657
657
  assert_equal(nil, rbtree.upper_bound("Z"))
658
658
  end
659
-
659
+
660
660
  def test_bound
661
661
  rbtree = RBTree[*%w(a A c C e E)]
662
662
  assert_equal(%w(a A c C), rbtree.bound("a", "c").to_a.flatten)
@@ -667,33 +667,33 @@ class RBTreeTest < Test::Unit::TestCase
667
667
  assert_equal([], rbtree.bound("Y", "Z").to_a)
668
668
  assert_equal([], rbtree.bound("f", "g").to_a)
669
669
  assert_equal([], rbtree.bound("f", "Z").to_a)
670
-
670
+
671
671
  if defined?(Enumerator) and Enumerator.method_defined?(:size)
672
672
  assert_equal(2, rbtree.bound("a", "c").size)
673
673
  assert_equal(1, rbtree.bound("a").size)
674
674
  assert_equal(2, rbtree.bound("b", "f").size)
675
-
675
+
676
676
  assert_equal(0, rbtree.bound("b", "b").size)
677
677
  assert_equal(0, rbtree.bound("Y", "Z").size)
678
678
  assert_equal(0, rbtree.bound("f", "g").size)
679
679
  assert_equal(0, rbtree.bound("f", "Z").size)
680
680
  end
681
681
  end
682
-
682
+
683
683
  def test_bound_block
684
684
  result = []
685
685
  @rbtree.bound("b", "c") {|key, val|
686
686
  result.push(key)
687
687
  }
688
688
  assert_equal(%w(b c), result)
689
-
689
+
690
690
  assert_raises(TypeError) {
691
691
  @rbtree.bound("a", "d") {
692
692
  @rbtree["e"] = "E"
693
693
  }
694
694
  }
695
695
  assert_equal(4, @rbtree.size)
696
-
696
+
697
697
  @rbtree.bound("b", "c") {
698
698
  @rbtree.bound("b", "c") {}
699
699
  assert_raises(TypeError) {
@@ -703,10 +703,10 @@ class RBTreeTest < Test::Unit::TestCase
703
703
  }
704
704
  assert_equal(4, @rbtree.size)
705
705
  end
706
-
706
+
707
707
  def test_first
708
708
  assert_equal(%w(a A), @rbtree.first)
709
-
709
+
710
710
  rbtree = RBTree.new("e")
711
711
  assert_equal("e", rbtree.first)
712
712
 
@@ -716,7 +716,7 @@ class RBTreeTest < Test::Unit::TestCase
716
716
 
717
717
  def test_last
718
718
  assert_equal(%w(d D), @rbtree.last)
719
-
719
+
720
720
  rbtree = RBTree.new("e")
721
721
  assert_equal("e", rbtree.last)
722
722
 
@@ -726,32 +726,32 @@ class RBTreeTest < Test::Unit::TestCase
726
726
 
727
727
  def test_readjust
728
728
  assert_equal(nil, @rbtree.cmp_proc)
729
-
729
+
730
730
  @rbtree.readjust {|a, b| b <=> a }
731
731
  assert_equal(%w(d c b a), @rbtree.keys)
732
732
  assert_not_equal(nil, @rbtree.cmp_proc)
733
-
733
+
734
734
  proc = Proc.new {|a,b| a.to_s <=> b.to_s }
735
735
  @rbtree.readjust(proc)
736
736
  assert_equal(%w(a b c d), @rbtree.keys)
737
737
  assert_equal(proc, @rbtree.cmp_proc)
738
-
738
+
739
739
  @rbtree[0] = nil
740
740
  assert_raises(ArgumentError) { @rbtree.readjust(nil) }
741
741
  assert_equal(5, @rbtree.size)
742
742
  assert_equal(proc, @rbtree.cmp_proc)
743
-
743
+
744
744
  @rbtree.delete(0)
745
745
  @rbtree.readjust(nil)
746
746
  assert_raises(ArgumentError) { @rbtree[0] = nil }
747
-
747
+
748
748
  if Symbol.method_defined?(:to_proc)
749
749
  rbtree = RBTree[*%w(a A B b)]
750
750
  assert_equal(%w(B b a A), rbtree.to_a.flatten)
751
751
  rbtree.readjust(:casecmp)
752
752
  assert_equal(%w(a A B b), rbtree.to_a.flatten)
753
753
  end
754
-
754
+
755
755
  if RUBY_VERSION >= "1.9.2"
756
756
  assert_nothing_raised {
757
757
  @rbtree.readjust(lambda {|a, b| a <=> b })
@@ -799,42 +799,42 @@ class RBTreeTest < Test::Unit::TestCase
799
799
  end
800
800
  end
801
801
  end
802
-
802
+
803
803
  def test_replace
804
804
  rbtree = RBTree.new { "e" }
805
805
  rbtree.readjust {|a, b| a <=> b}
806
806
  rbtree["a"] = "A"
807
807
  rbtree["e"] = "E"
808
-
808
+
809
809
  @rbtree.replace(rbtree)
810
810
  assert_equal(%w(a A e E), @rbtree.to_a.flatten)
811
- assert_equal(rbtree.default, @rbtree.default)
811
+ assert_equal(rbtree.default, @rbtree.default)
812
812
  assert_equal(rbtree.cmp_proc, @rbtree.cmp_proc)
813
813
 
814
814
  assert_raises(TypeError) { @rbtree.replace("e") }
815
815
  end
816
-
816
+
817
817
  def test_reverse_each
818
818
  result = []
819
819
  @rbtree.reverse_each { |key, val| result.push([key, val]) }
820
820
  assert_equal(%w(d D c C b B a A), result.flatten)
821
-
821
+
822
822
  if have_enumerator?
823
823
  enumerator = @rbtree.reverse_each
824
824
  assert_equal(%w(d D c C b B a A), enumerator.to_a.flatten)
825
825
  end
826
826
  end
827
-
827
+
828
828
  def test_marshal
829
829
  assert_equal(@rbtree, Marshal.load(Marshal.dump(@rbtree)))
830
-
830
+
831
831
  @rbtree.default = "e"
832
832
  assert_equal(@rbtree, Marshal.load(Marshal.dump(@rbtree)))
833
-
833
+
834
834
  assert_raises(TypeError) {
835
835
  Marshal.dump(RBTree.new { "e" })
836
836
  }
837
-
837
+
838
838
  assert_raises(TypeError) {
839
839
  @rbtree.readjust {|a, b| a <=> b}
840
840
  Marshal.dump(@rbtree)
@@ -850,16 +850,20 @@ class RBTreeTest < Test::Unit::TestCase
850
850
  can_clear = true
851
851
  assert_raises(TypeError) { @rbtree["e"] }
852
852
  end
853
-
853
+
854
854
  begin
855
855
  require "pp"
856
-
856
+
857
+ def pp(rbtree=RBTree.new)
858
+ PP.pp(rbtree, String.new, 80)
859
+ end
860
+
857
861
  def test_pp
858
862
  assert_equal(%(#<RBTree: {}, default=nil, cmp_proc=nil>\n),
859
- PP.pp(RBTree.new, ""))
863
+ pp)
860
864
  assert_equal(%(#<RBTree: {"a"=>"A", "b"=>"B"}, default=nil, cmp_proc=nil>\n),
861
- PP.pp(RBTree[*%w(a A b B)], ""))
862
-
865
+ pp(RBTree[*%w(a A b B)]))
866
+
863
867
  rbtree = RBTree[*("a".."z").to_a]
864
868
  rbtree.default = "a"
865
869
  rbtree.readjust {|a, b| a <=> b }
@@ -880,7 +884,7 @@ class RBTreeTest < Test::Unit::TestCase
880
884
  default="a",
881
885
  cmp_proc=#{rbtree.cmp_proc}>
882
886
  EOS
883
- assert_equal(expected, PP.pp(rbtree, ""))
887
+ assert_equal(expected, pp(rbtree))
884
888
 
885
889
  rbtree = RBTree.new
886
890
  rbtree[rbtree] = rbtree
@@ -890,7 +894,7 @@ EOS
890
894
  default="#<RBTree: ...>",
891
895
  cmp_proc=nil>
892
896
  EOS
893
- assert_equal(expected, PP.pp(rbtree, ""))
897
+ assert_equal(expected, pp(rbtree))
894
898
  end
895
899
  rescue LoadError
896
900
  end
@@ -904,7 +908,7 @@ class MultiRBTreeTest < Test::Unit::TestCase
904
908
 
905
909
  def test_create
906
910
  assert_equal(%w(a A b B b C b D c C), @rbtree.to_a.flatten)
907
-
911
+
908
912
  assert_equal(MultiRBTree[*%w(a A)], MultiRBTree[RBTree[*%w(a A)]])
909
913
  assert_raises(TypeError) {
910
914
  RBTree[MultiRBTree[*%w(a A)]]
@@ -925,12 +929,12 @@ class MultiRBTreeTest < Test::Unit::TestCase
925
929
  @rbtree.clear
926
930
  assert_equal(true, @rbtree.empty?)
927
931
  end
928
-
932
+
929
933
  def test_to_a
930
934
  assert_equal([%w(a A), %w(b B), %w(b C), %w(b D), %w(c C)],
931
935
  @rbtree.to_a)
932
936
  end
933
-
937
+
934
938
  def test_to_hash
935
939
  assert_raises(TypeError) {
936
940
  @rbtree.to_hash
@@ -956,7 +960,7 @@ class MultiRBTreeTest < Test::Unit::TestCase
956
960
  assert_equal(true, RBTree[*%w(a A)] == MultiRBTree[*%w(a A)])
957
961
  assert_equal(true, MultiRBTree[*%w(a A)] == RBTree[*%w(a A)])
958
962
  end
959
-
963
+
960
964
  def test_replace
961
965
  assert_equal(RBTree[*%w(a A)],
962
966
  MultiRBTree[*%w(a A)].replace(RBTree[*%w(a A)]))
@@ -976,7 +980,7 @@ class MultiRBTreeTest < Test::Unit::TestCase
976
980
  def test_clone
977
981
  assert_equal(@rbtree, @rbtree.clone)
978
982
  end
979
-
983
+
980
984
  def test_each
981
985
  result = []
982
986
  @rbtree.each {|k, v|
@@ -1024,7 +1028,7 @@ class MultiRBTreeTest < Test::Unit::TestCase
1024
1028
  @rbtree.readjust {|a, b| b <=> a }
1025
1029
  assert_equal(%w(c C b B b C b D a A), @rbtree.to_a.flatten)
1026
1030
  end
1027
-
1031
+
1028
1032
  def test_marshal
1029
1033
  assert_equal(@rbtree, Marshal.load(Marshal.dump(@rbtree)))
1030
1034
  end
@@ -1040,7 +1044,7 @@ class MultiRBTreeTest < Test::Unit::TestCase
1040
1044
  def test_bound
1041
1045
  assert_equal(%w(b B b C b D), @rbtree.bound("b").to_a.flatten)
1042
1046
  end
1043
-
1047
+
1044
1048
  def test_first
1045
1049
  assert_equal(%w(a A), @rbtree.first)
1046
1050
  end