@@ -2586,35 +2586,51 @@ fn original_capacity_from_repr(repr: usize) -> usize {
2586
2586
2587
2587
#[ test]
2588
2588
fn test_original_capacity_to_repr ( ) {
2589
- for & cap in & [ 0 , 1 , 16 , 1000 ] {
2590
- assert_eq ! ( 0 , original_capacity_to_repr( cap) ) ;
2591
- }
2589
+ assert_eq ! ( original_capacity_to_repr( 0 ) , 0 ) ;
2592
2590
2593
- for & cap in & [ 1024 , 1025 , 1100 , 2000 , 2047 ] {
2594
- assert_eq ! ( 1 , original_capacity_to_repr( cap) ) ;
2595
- }
2591
+ let max_width = 32 ;
2596
2592
2597
- for & cap in & [ 2048 , 2049 ] {
2598
- assert_eq ! ( 2 , original_capacity_to_repr( cap) ) ;
2599
- }
2593
+ for width in 1 ..( max_width + 1 ) {
2594
+ let cap = 1 << width - 1 ;
2595
+
2596
+ let expected = if width < MIN_ORIGINAL_CAPACITY_WIDTH {
2597
+ 0
2598
+ } else if width < MAX_ORIGINAL_CAPACITY_WIDTH {
2599
+ width - MIN_ORIGINAL_CAPACITY_WIDTH
2600
+ } else {
2601
+ MAX_ORIGINAL_CAPACITY_WIDTH - MIN_ORIGINAL_CAPACITY_WIDTH
2602
+ } ;
2600
2603
2601
- // TODO: more
2604
+ assert_eq ! ( original_capacity_to_repr ( cap ) , expected ) ;
2602
2605
2603
- for & cap in & [ 65536 , 65537 , 68000 , 1 << 17 , 1 << 18 , 1 << 20 , 1 << 30 ] {
2604
- assert_eq ! ( 7 , original_capacity_to_repr( cap) , "cap={}" , cap) ;
2606
+ if width > 1 {
2607
+ assert_eq ! ( original_capacity_to_repr( cap + 1 ) , expected) ;
2608
+ }
2609
+
2610
+ // MIN_ORIGINAL_CAPACITY_WIDTH must be bigger than 7 to pass tests below
2611
+ if width == MIN_ORIGINAL_CAPACITY_WIDTH + 1 {
2612
+ assert_eq ! ( original_capacity_to_repr( cap - 24 ) , expected - 1 ) ;
2613
+ assert_eq ! ( original_capacity_to_repr( cap + 76 ) , expected) ;
2614
+ } else if width == MIN_ORIGINAL_CAPACITY_WIDTH + 2 {
2615
+ assert_eq ! ( original_capacity_to_repr( cap - 1 ) , expected - 1 ) ;
2616
+ assert_eq ! ( original_capacity_to_repr( cap - 48 ) , expected - 1 ) ;
2617
+ }
2605
2618
}
2606
2619
}
2607
2620
2608
2621
#[ test]
2609
2622
fn test_original_capacity_from_repr ( ) {
2610
2623
assert_eq ! ( 0 , original_capacity_from_repr( 0 ) ) ;
2611
- assert_eq ! ( 1024 , original_capacity_from_repr( 1 ) ) ;
2612
- assert_eq ! ( 1024 * 2 , original_capacity_from_repr( 2 ) ) ;
2613
- assert_eq ! ( 1024 * 4 , original_capacity_from_repr( 3 ) ) ;
2614
- assert_eq ! ( 1024 * 8 , original_capacity_from_repr( 4 ) ) ;
2615
- assert_eq ! ( 1024 * 16 , original_capacity_from_repr( 5 ) ) ;
2616
- assert_eq ! ( 1024 * 32 , original_capacity_from_repr( 6 ) ) ;
2617
- assert_eq ! ( 1024 * 64 , original_capacity_from_repr( 7 ) ) ;
2624
+
2625
+ let min_cap = 1 << MIN_ORIGINAL_CAPACITY_WIDTH ;
2626
+
2627
+ assert_eq ! ( min_cap, original_capacity_from_repr( 1 ) ) ;
2628
+ assert_eq ! ( min_cap * 2 , original_capacity_from_repr( 2 ) ) ;
2629
+ assert_eq ! ( min_cap * 4 , original_capacity_from_repr( 3 ) ) ;
2630
+ assert_eq ! ( min_cap * 8 , original_capacity_from_repr( 4 ) ) ;
2631
+ assert_eq ! ( min_cap * 16 , original_capacity_from_repr( 5 ) ) ;
2632
+ assert_eq ! ( min_cap * 32 , original_capacity_from_repr( 6 ) ) ;
2633
+ assert_eq ! ( min_cap * 64 , original_capacity_from_repr( 7 ) ) ;
2618
2634
}
2619
2635
2620
2636
unsafe impl Send for Inner { }
0 commit comments