@@ -387,6 +387,67 @@ fn test_bit_vec_clone() {
387387 assert ! ( b. contains( & 1000 ) ) ;
388388}
389389
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+
390451mod bench {
391452 use std:: collections:: { BitSet , BitVec } ;
392453 use std:: __rand:: { Rng , thread_rng, ThreadRng } ;
0 commit comments