@@ -4,6 +4,7 @@ use std::convert::TryFrom;
4
4
use std:: fmt:: Debug ;
5
5
use std:: iter:: FromIterator ;
6
6
use std:: ops:: Bound :: { self , Excluded , Included , Unbounded } ;
7
+ use std:: ops:: RangeBounds ;
7
8
use std:: rc:: Rc ;
8
9
9
10
use super :: DeterministicRng ;
@@ -68,6 +69,11 @@ fn test_basic_small() {
68
69
assert_eq ! ( map. last_key_value( ) , None ) ;
69
70
assert_eq ! ( map. keys( ) . count( ) , 0 ) ;
70
71
assert_eq ! ( map. values( ) . count( ) , 0 ) ;
72
+ assert_eq ! ( map. range( ..) . next( ) , None ) ;
73
+ assert_eq ! ( map. range( ..1 ) . next( ) , None ) ;
74
+ assert_eq ! ( map. range( 1 ..) . next( ) , None ) ;
75
+ assert_eq ! ( map. range( 1 ..=1 ) . next( ) , None ) ;
76
+ assert_eq ! ( map. range( 1 ..2 ) . next( ) , None ) ;
71
77
assert_eq ! ( map. insert( 1 , 1 ) , None ) ;
72
78
73
79
// 1 key-value pair:
@@ -118,6 +124,11 @@ fn test_basic_small() {
118
124
assert_eq ! ( map. last_key_value( ) , None ) ;
119
125
assert_eq ! ( map. keys( ) . count( ) , 0 ) ;
120
126
assert_eq ! ( map. values( ) . count( ) , 0 ) ;
127
+ assert_eq ! ( map. range( ..) . next( ) , None ) ;
128
+ assert_eq ! ( map. range( ..1 ) . next( ) , None ) ;
129
+ assert_eq ! ( map. range( 1 ..) . next( ) , None ) ;
130
+ assert_eq ! ( map. range( 1 ..=1 ) . next( ) , None ) ;
131
+ assert_eq ! ( map. range( 1 ..2 ) . next( ) , None ) ;
121
132
assert_eq ! ( map. remove( & 1 ) , None ) ;
122
133
}
123
134
@@ -128,7 +139,6 @@ fn test_iter() {
128
139
#[ cfg( miri) ]
129
140
let size = 200 ;
130
141
131
- // Forwards
132
142
let mut map: BTreeMap < _ , _ > = ( 0 ..size) . map ( |i| ( i, i) ) . collect ( ) ;
133
143
134
144
fn test < T > ( size : usize , mut iter : T )
@@ -154,7 +164,6 @@ fn test_iter_rev() {
154
164
#[ cfg( miri) ]
155
165
let size = 200 ;
156
166
157
- // Forwards
158
167
let mut map: BTreeMap < _ , _ > = ( 0 ..size) . map ( |i| ( i, i) ) . collect ( ) ;
159
168
160
169
fn test < T > ( size : usize , mut iter : T )
@@ -275,7 +284,6 @@ fn test_iter_mixed() {
275
284
#[ cfg( miri) ]
276
285
let size = 200 ;
277
286
278
- // Forwards
279
287
let mut map: BTreeMap < _ , _ > = ( 0 ..size) . map ( |i| ( i, i) ) . collect ( ) ;
280
288
281
289
fn test < T > ( size : usize , mut iter : T )
@@ -299,27 +307,147 @@ fn test_iter_mixed() {
299
307
test ( size, map. into_iter ( ) ) ;
300
308
}
301
309
302
- #[ test]
303
- fn test_range_small ( ) {
304
- let size = 5 ;
305
-
306
- // Forwards
307
- let map: BTreeMap < _ , _ > = ( 0 ..size) . map ( |i| ( i, i) ) . collect ( ) ;
308
-
309
- let mut j = 0 ;
310
- for ( ( & k, & v) , i) in map. range ( 2 ..) . zip ( 2 ..size) {
311
- assert_eq ! ( k, i) ;
312
- assert_eq ! ( v, i) ;
313
- j += 1 ;
314
- }
315
- assert_eq ! ( j, size - 2 ) ;
310
+ fn range_keys ( map : & BTreeMap < i32 , i32 > , range : impl RangeBounds < i32 > ) -> Vec < i32 > {
311
+ map. range ( range)
312
+ . map ( |( & k, & v) | {
313
+ assert_eq ! ( k, v) ;
314
+ k
315
+ } )
316
+ . collect ( )
316
317
}
317
318
318
319
#[ test]
319
- fn test_range_inclusive ( ) {
320
- let size = 500 ;
320
+ fn test_range_small ( ) {
321
+ let size = 4 ;
322
+
323
+ let map: BTreeMap < _ , _ > = ( 1 ..=size) . map ( |i| ( i, i) ) . collect ( ) ;
324
+ let all: Vec < _ > = ( 1 ..=size) . collect ( ) ;
325
+ let ( first, last) = ( vec ! [ all[ 0 ] ] , vec ! [ all[ size as usize - 1 ] ] ) ;
326
+
327
+ assert_eq ! ( range_keys( & map, ( Excluded ( 0 ) , Excluded ( size + 1 ) ) ) , all) ;
328
+ assert_eq ! ( range_keys( & map, ( Excluded ( 0 ) , Included ( size + 1 ) ) ) , all) ;
329
+ assert_eq ! ( range_keys( & map, ( Excluded ( 0 ) , Included ( size) ) ) , all) ;
330
+ assert_eq ! ( range_keys( & map, ( Excluded ( 0 ) , Unbounded ) ) , all) ;
331
+ assert_eq ! ( range_keys( & map, ( Included ( 0 ) , Excluded ( size + 1 ) ) ) , all) ;
332
+ assert_eq ! ( range_keys( & map, ( Included ( 0 ) , Included ( size + 1 ) ) ) , all) ;
333
+ assert_eq ! ( range_keys( & map, ( Included ( 0 ) , Included ( size) ) ) , all) ;
334
+ assert_eq ! ( range_keys( & map, ( Included ( 0 ) , Unbounded ) ) , all) ;
335
+ assert_eq ! ( range_keys( & map, ( Included ( 1 ) , Excluded ( size + 1 ) ) ) , all) ;
336
+ assert_eq ! ( range_keys( & map, ( Included ( 1 ) , Included ( size + 1 ) ) ) , all) ;
337
+ assert_eq ! ( range_keys( & map, ( Included ( 1 ) , Included ( size) ) ) , all) ;
338
+ assert_eq ! ( range_keys( & map, ( Included ( 1 ) , Unbounded ) ) , all) ;
339
+ assert_eq ! ( range_keys( & map, ( Unbounded , Excluded ( size + 1 ) ) ) , all) ;
340
+ assert_eq ! ( range_keys( & map, ( Unbounded , Included ( size + 1 ) ) ) , all) ;
341
+ assert_eq ! ( range_keys( & map, ( Unbounded , Included ( size) ) ) , all) ;
342
+ assert_eq ! ( range_keys( & map, ..) , all) ;
343
+
344
+ assert_eq ! ( range_keys( & map, ( Excluded ( 0 ) , Excluded ( 1 ) ) ) , vec![ ] ) ;
345
+ assert_eq ! ( range_keys( & map, ( Excluded ( 0 ) , Included ( 0 ) ) ) , vec![ ] ) ;
346
+ assert_eq ! ( range_keys( & map, ( Included ( 0 ) , Included ( 0 ) ) ) , vec![ ] ) ;
347
+ assert_eq ! ( range_keys( & map, ( Included ( 0 ) , Excluded ( 1 ) ) ) , vec![ ] ) ;
348
+ assert_eq ! ( range_keys( & map, ( Unbounded , Excluded ( 1 ) ) ) , vec![ ] ) ;
349
+ assert_eq ! ( range_keys( & map, ( Unbounded , Included ( 0 ) ) ) , vec![ ] ) ;
350
+ assert_eq ! ( range_keys( & map, ( Excluded ( 0 ) , Excluded ( 2 ) ) ) , first) ;
351
+ assert_eq ! ( range_keys( & map, ( Excluded ( 0 ) , Included ( 1 ) ) ) , first) ;
352
+ assert_eq ! ( range_keys( & map, ( Included ( 0 ) , Excluded ( 2 ) ) ) , first) ;
353
+ assert_eq ! ( range_keys( & map, ( Included ( 0 ) , Included ( 1 ) ) ) , first) ;
354
+ assert_eq ! ( range_keys( & map, ( Included ( 1 ) , Excluded ( 2 ) ) ) , first) ;
355
+ assert_eq ! ( range_keys( & map, ( Included ( 1 ) , Included ( 1 ) ) ) , first) ;
356
+ assert_eq ! ( range_keys( & map, ( Unbounded , Excluded ( 2 ) ) ) , first) ;
357
+ assert_eq ! ( range_keys( & map, ( Unbounded , Included ( 1 ) ) ) , first) ;
358
+ assert_eq ! ( range_keys( & map, ( Excluded ( size - 1 ) , Excluded ( size + 1 ) ) ) , last) ;
359
+ assert_eq ! ( range_keys( & map, ( Excluded ( size - 1 ) , Included ( size + 1 ) ) ) , last) ;
360
+ assert_eq ! ( range_keys( & map, ( Excluded ( size - 1 ) , Included ( size) ) ) , last) ;
361
+ assert_eq ! ( range_keys( & map, ( Excluded ( size - 1 ) , Unbounded ) ) , last) ;
362
+ assert_eq ! ( range_keys( & map, ( Included ( size) , Excluded ( size + 1 ) ) ) , last) ;
363
+ assert_eq ! ( range_keys( & map, ( Included ( size) , Included ( size + 1 ) ) ) , last) ;
364
+ assert_eq ! ( range_keys( & map, ( Included ( size) , Included ( size) ) ) , last) ;
365
+ assert_eq ! ( range_keys( & map, ( Included ( size) , Unbounded ) ) , last) ;
366
+ assert_eq ! ( range_keys( & map, ( Excluded ( size) , Excluded ( size + 1 ) ) ) , vec![ ] ) ;
367
+ assert_eq ! ( range_keys( & map, ( Excluded ( size) , Included ( size) ) ) , vec![ ] ) ;
368
+ assert_eq ! ( range_keys( & map, ( Excluded ( size) , Unbounded ) ) , vec![ ] ) ;
369
+ assert_eq ! ( range_keys( & map, ( Included ( size + 1 ) , Excluded ( size + 1 ) ) ) , vec![ ] ) ;
370
+ assert_eq ! ( range_keys( & map, ( Included ( size + 1 ) , Included ( size + 1 ) ) ) , vec![ ] ) ;
371
+ assert_eq ! ( range_keys( & map, ( Included ( size + 1 ) , Unbounded ) ) , vec![ ] ) ;
372
+
373
+ assert_eq ! ( range_keys( & map, ..3 ) , vec![ 1 , 2 ] ) ;
374
+ assert_eq ! ( range_keys( & map, 3 ..) , vec![ 3 , 4 ] ) ;
375
+ assert_eq ! ( range_keys( & map, 2 ..=3 ) , vec![ 2 , 3 ] ) ;
376
+ }
377
+
378
+ #[ test]
379
+ fn test_range_depth_2 ( ) {
380
+ // Assuming that node.CAPACITY is 11, having 12 pairs implies a depth 2 tree
381
+ // with 2 leaves. Depending on details we don't want or need to rely upon,
382
+ // the single key at the root will be 6 or 7.
383
+
384
+ let map: BTreeMap < _ , _ > = ( 1 ..=12 ) . map ( |i| ( i, i) ) . collect ( ) ;
385
+ for & root in & [ 6 , 7 ] {
386
+ assert_eq ! ( range_keys( & map, ( Excluded ( root) , Excluded ( root + 1 ) ) ) , vec![ ] ) ;
387
+ assert_eq ! ( range_keys( & map, ( Excluded ( root) , Included ( root + 1 ) ) ) , vec![ root + 1 ] ) ;
388
+ assert_eq ! ( range_keys( & map, ( Included ( root) , Excluded ( root + 1 ) ) ) , vec![ root] ) ;
389
+ assert_eq ! ( range_keys( & map, ( Included ( root) , Included ( root + 1 ) ) ) , vec![ root, root + 1 ] ) ;
390
+
391
+ assert_eq ! ( range_keys( & map, ( Excluded ( root - 1 ) , Excluded ( root) ) ) , vec![ ] ) ;
392
+ assert_eq ! ( range_keys( & map, ( Included ( root - 1 ) , Excluded ( root) ) ) , vec![ root - 1 ] ) ;
393
+ assert_eq ! ( range_keys( & map, ( Excluded ( root - 1 ) , Included ( root) ) ) , vec![ root] ) ;
394
+ assert_eq ! ( range_keys( & map, ( Included ( root - 1 ) , Included ( root) ) ) , vec![ root - 1 , root] ) ;
395
+ }
396
+ }
397
+
398
+ #[ test]
399
+ fn test_range_large ( ) {
400
+ let size = 200 ;
321
401
322
- let map: BTreeMap < _ , _ > = ( 0 ..=size) . map ( |i| ( i, i) ) . collect ( ) ;
402
+ let map: BTreeMap < _ , _ > = ( 1 ..=size) . map ( |i| ( i, i) ) . collect ( ) ;
403
+ let all: Vec < _ > = ( 1 ..=size) . collect ( ) ;
404
+ let ( first, last) = ( vec ! [ all[ 0 ] ] , vec ! [ all[ size as usize - 1 ] ] ) ;
405
+
406
+ assert_eq ! ( range_keys( & map, ( Excluded ( 0 ) , Excluded ( size + 1 ) ) ) , all) ;
407
+ assert_eq ! ( range_keys( & map, ( Excluded ( 0 ) , Included ( size + 1 ) ) ) , all) ;
408
+ assert_eq ! ( range_keys( & map, ( Excluded ( 0 ) , Included ( size) ) ) , all) ;
409
+ assert_eq ! ( range_keys( & map, ( Excluded ( 0 ) , Unbounded ) ) , all) ;
410
+ assert_eq ! ( range_keys( & map, ( Included ( 0 ) , Excluded ( size + 1 ) ) ) , all) ;
411
+ assert_eq ! ( range_keys( & map, ( Included ( 0 ) , Included ( size + 1 ) ) ) , all) ;
412
+ assert_eq ! ( range_keys( & map, ( Included ( 0 ) , Included ( size) ) ) , all) ;
413
+ assert_eq ! ( range_keys( & map, ( Included ( 0 ) , Unbounded ) ) , all) ;
414
+ assert_eq ! ( range_keys( & map, ( Included ( 1 ) , Excluded ( size + 1 ) ) ) , all) ;
415
+ assert_eq ! ( range_keys( & map, ( Included ( 1 ) , Included ( size + 1 ) ) ) , all) ;
416
+ assert_eq ! ( range_keys( & map, ( Included ( 1 ) , Included ( size) ) ) , all) ;
417
+ assert_eq ! ( range_keys( & map, ( Included ( 1 ) , Unbounded ) ) , all) ;
418
+ assert_eq ! ( range_keys( & map, ( Unbounded , Excluded ( size + 1 ) ) ) , all) ;
419
+ assert_eq ! ( range_keys( & map, ( Unbounded , Included ( size + 1 ) ) ) , all) ;
420
+ assert_eq ! ( range_keys( & map, ( Unbounded , Included ( size) ) ) , all) ;
421
+ assert_eq ! ( range_keys( & map, ..) , all) ;
422
+
423
+ assert_eq ! ( range_keys( & map, ( Excluded ( 0 ) , Excluded ( 1 ) ) ) , vec![ ] ) ;
424
+ assert_eq ! ( range_keys( & map, ( Excluded ( 0 ) , Included ( 0 ) ) ) , vec![ ] ) ;
425
+ assert_eq ! ( range_keys( & map, ( Included ( 0 ) , Included ( 0 ) ) ) , vec![ ] ) ;
426
+ assert_eq ! ( range_keys( & map, ( Included ( 0 ) , Excluded ( 1 ) ) ) , vec![ ] ) ;
427
+ assert_eq ! ( range_keys( & map, ( Unbounded , Excluded ( 1 ) ) ) , vec![ ] ) ;
428
+ assert_eq ! ( range_keys( & map, ( Unbounded , Included ( 0 ) ) ) , vec![ ] ) ;
429
+ assert_eq ! ( range_keys( & map, ( Excluded ( 0 ) , Excluded ( 2 ) ) ) , first) ;
430
+ assert_eq ! ( range_keys( & map, ( Excluded ( 0 ) , Included ( 1 ) ) ) , first) ;
431
+ assert_eq ! ( range_keys( & map, ( Included ( 0 ) , Excluded ( 2 ) ) ) , first) ;
432
+ assert_eq ! ( range_keys( & map, ( Included ( 0 ) , Included ( 1 ) ) ) , first) ;
433
+ assert_eq ! ( range_keys( & map, ( Included ( 1 ) , Excluded ( 2 ) ) ) , first) ;
434
+ assert_eq ! ( range_keys( & map, ( Included ( 1 ) , Included ( 1 ) ) ) , first) ;
435
+ assert_eq ! ( range_keys( & map, ( Unbounded , Excluded ( 2 ) ) ) , first) ;
436
+ assert_eq ! ( range_keys( & map, ( Unbounded , Included ( 1 ) ) ) , first) ;
437
+ assert_eq ! ( range_keys( & map, ( Excluded ( size - 1 ) , Excluded ( size + 1 ) ) ) , last) ;
438
+ assert_eq ! ( range_keys( & map, ( Excluded ( size - 1 ) , Included ( size + 1 ) ) ) , last) ;
439
+ assert_eq ! ( range_keys( & map, ( Excluded ( size - 1 ) , Included ( size) ) ) , last) ;
440
+ assert_eq ! ( range_keys( & map, ( Excluded ( size - 1 ) , Unbounded ) ) , last) ;
441
+ assert_eq ! ( range_keys( & map, ( Included ( size) , Excluded ( size + 1 ) ) ) , last) ;
442
+ assert_eq ! ( range_keys( & map, ( Included ( size) , Included ( size + 1 ) ) ) , last) ;
443
+ assert_eq ! ( range_keys( & map, ( Included ( size) , Included ( size) ) ) , last) ;
444
+ assert_eq ! ( range_keys( & map, ( Included ( size) , Unbounded ) ) , last) ;
445
+ assert_eq ! ( range_keys( & map, ( Excluded ( size) , Excluded ( size + 1 ) ) ) , vec![ ] ) ;
446
+ assert_eq ! ( range_keys( & map, ( Excluded ( size) , Included ( size) ) ) , vec![ ] ) ;
447
+ assert_eq ! ( range_keys( & map, ( Excluded ( size) , Unbounded ) ) , vec![ ] ) ;
448
+ assert_eq ! ( range_keys( & map, ( Included ( size + 1 ) , Excluded ( size + 1 ) ) ) , vec![ ] ) ;
449
+ assert_eq ! ( range_keys( & map, ( Included ( size + 1 ) , Included ( size + 1 ) ) ) , vec![ ] ) ;
450
+ assert_eq ! ( range_keys( & map, ( Included ( size + 1 ) , Unbounded ) ) , vec![ ] ) ;
323
451
324
452
fn check < ' a , L , R > ( lhs : L , rhs : R )
325
453
where
@@ -331,18 +459,9 @@ fn test_range_inclusive() {
331
459
assert_eq ! ( lhs, rhs) ;
332
460
}
333
461
334
- check ( map. range ( size + 1 ..=size + 1 ) , vec ! [ ] ) ;
335
- check ( map. range ( size..=size) , vec ! [ ( & size, & size) ] ) ;
336
- check ( map. range ( size..=size + 1 ) , vec ! [ ( & size, & size) ] ) ;
337
- check ( map. range ( 0 ..=0 ) , vec ! [ ( & 0 , & 0 ) ] ) ;
338
- check ( map. range ( 0 ..=size - 1 ) , map. range ( ..size) ) ;
339
- check ( map. range ( -1 ..=-1 ) , vec ! [ ] ) ;
340
- check ( map. range ( -1 ..=size) , map. range ( ..) ) ;
341
- check ( map. range ( ..=size) , map. range ( ..) ) ;
342
- check ( map. range ( ..=200 ) , map. range ( ..201 ) ) ;
462
+ check ( map. range ( ..=100 ) , map. range ( ..101 ) ) ;
343
463
check ( map. range ( 5 ..=8 ) , vec ! [ ( & 5 , & 5 ) , ( & 6 , & 6 ) , ( & 7 , & 7 ) , ( & 8 , & 8 ) ] ) ;
344
- check ( map. range ( -1 ..=0 ) , vec ! [ ( & 0 , & 0 ) ] ) ;
345
- check ( map. range ( -1 ..=2 ) , vec ! [ ( & 0 , & 0 ) , ( & 1 , & 1 ) , ( & 2 , & 2 ) ] ) ;
464
+ check ( map. range ( -1 ..=2 ) , vec ! [ ( & 1 , & 1 ) , ( & 2 , & 2 ) ] ) ;
346
465
}
347
466
348
467
#[ test]
0 commit comments