@@ -387,6 +387,67 @@ fn test_bit_vec_clone() {
387
387
assert ! ( b. contains( & 1000 ) ) ;
388
388
}
389
389
390
+ #[ test]
391
+ fn test_bit_set_append ( ) {
392
+ let mut a = BitSet :: new ( ) ;
393
+ a. insert ( 2 ) ;
394
+ a. insert ( 6 ) ;
395
+
396
+ let mut b = BitSet :: new ( ) ;
397
+ b. insert ( 1 ) ;
398
+ b. insert ( 3 ) ;
399
+ b. insert ( 6 ) ;
400
+
401
+ a. append ( & mut b) ;
402
+
403
+ assert_eq ! ( a. len( ) , 4 ) ;
404
+ assert_eq ! ( b. len( ) , 0 ) ;
405
+ assert ! ( b. capacity( ) >= 6 ) ;
406
+
407
+ assert_eq ! ( a, BitSet :: from_bit_vec( BitVec :: from_bytes( & [ 0b01110010 ] ) ) ) ;
408
+ }
409
+
410
+ #[ test]
411
+ fn test_bit_set_split_off ( ) {
412
+ // Split at 0
413
+ let mut a = BitSet :: from_bit_vec ( BitVec :: from_bytes ( & [ 0b10100000 , 0b00010010 , 0b10010010 ,
414
+ 0b00110011 , 0b01101011 , 0b10101101 ] ) ) ;
415
+
416
+ let b = a. split_off ( 0 ) ;
417
+
418
+ assert_eq ! ( a. len( ) , 0 ) ;
419
+ assert_eq ! ( b. len( ) , 21 ) ;
420
+
421
+ assert_eq ! ( b, BitSet :: from_bit_vec( BitVec :: from_bytes( & [ 0b10100000 , 0b00010010 , 0b10010010 ,
422
+ 0b00110011 , 0b01101011 , 0b10101101 ] ) ) ) ;
423
+
424
+ // Split behind last element
425
+ let mut a = BitSet :: from_bit_vec ( BitVec :: from_bytes ( & [ 0b10100000 , 0b00010010 , 0b10010010 ,
426
+ 0b00110011 , 0b01101011 , 0b10101101 ] ) ) ;
427
+
428
+ let b = a. split_off ( 50 ) ;
429
+
430
+ assert_eq ! ( a. len( ) , 21 ) ;
431
+ assert_eq ! ( b. len( ) , 0 ) ;
432
+
433
+ assert_eq ! ( a, BitSet :: from_bit_vec( BitVec :: from_bytes( & [ 0b10100000 , 0b00010010 , 0b10010010 ,
434
+ 0b00110011 , 0b01101011 , 0b10101101 ] ) ) ) ;
435
+
436
+ // Split at arbitrary element
437
+ let mut a = BitSet :: from_bit_vec ( BitVec :: from_bytes ( & [ 0b10100000 , 0b00010010 , 0b10010010 ,
438
+ 0b00110011 , 0b01101011 , 0b10101101 ] ) ) ;
439
+
440
+ let b = a. split_off ( 34 ) ;
441
+
442
+ assert_eq ! ( a. len( ) , 12 ) ;
443
+ assert_eq ! ( b. len( ) , 9 ) ;
444
+
445
+ assert_eq ! ( a, BitSet :: from_bit_vec( BitVec :: from_bytes( & [ 0b10100000 , 0b00010010 , 0b10010010 ,
446
+ 0b00110011 , 0b01000000 ] ) ) ) ;
447
+ assert_eq ! ( b, BitSet :: from_bit_vec( BitVec :: from_bytes( & [ 0 , 0 , 0 , 0 ,
448
+ 0b00101011 , 0b10101101 ] ) ) ) ;
449
+ }
450
+
390
451
mod bench {
391
452
use std:: collections:: { BitSet , BitVec } ;
392
453
use std:: __rand:: { Rng , thread_rng, ThreadRng } ;
0 commit comments