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.
- checksums.yaml +4 -4
- data/README +6 -0
- data/extconf.rb +0 -8
- data/rbtree.c +76 -94
- data/test.rb +135 -131
- 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
|
-
|
|
863
|
+
pp)
|
|
860
864
|
assert_equal(%(#<RBTree: {"a"=>"A", "b"=>"B"}, default=nil, cmp_proc=nil>\n),
|
|
861
|
-
|
|
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,
|
|
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,
|
|
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
|