@@ -1464,4 +1464,27 @@ mod tests {
1464
1464
empty_features. hash ( & mut empty_hash) ;
1465
1465
assert_eq ! ( zerod_hash. finish( ) , empty_hash. finish( ) ) ;
1466
1466
}
1467
+
1468
+ #[ test]
1469
+ fn test_feature_flags_transitions ( ) {
1470
+ // Tests transitions from stack to heap and back in `FeatureFlags`
1471
+ let mut flags = FeatureFlags :: empty ( ) ;
1472
+ assert ! ( matches!( flags, FeatureFlags :: Held { .. } ) ) ;
1473
+
1474
+ flags. resize ( DIRECT_ALLOC_BYTES , 42 ) ;
1475
+ assert_eq ! ( flags. len( ) , DIRECT_ALLOC_BYTES ) ;
1476
+ assert ! ( flags. iter( ) . take( DIRECT_ALLOC_BYTES ) . all( |b| * b == 42 ) ) ;
1477
+ assert ! ( matches!( flags, FeatureFlags :: Held { .. } ) ) ;
1478
+
1479
+ flags. resize ( DIRECT_ALLOC_BYTES * 2 , 43 ) ;
1480
+ assert_eq ! ( flags. len( ) , DIRECT_ALLOC_BYTES * 2 ) ;
1481
+ assert ! ( flags. iter( ) . take( DIRECT_ALLOC_BYTES ) . all( |b| * b == 42 ) ) ;
1482
+ assert ! ( flags. iter( ) . skip( DIRECT_ALLOC_BYTES ) . all( |b| * b == 43 ) ) ;
1483
+ assert ! ( matches!( flags, FeatureFlags :: Heap ( _) ) ) ;
1484
+
1485
+ flags. resize ( DIRECT_ALLOC_BYTES , 0 ) ;
1486
+ assert_eq ! ( flags. len( ) , DIRECT_ALLOC_BYTES ) ;
1487
+ assert ! ( flags. iter( ) . take( DIRECT_ALLOC_BYTES ) . all( |b| * b == 42 ) ) ;
1488
+ assert ! ( matches!( flags, FeatureFlags :: Held { .. } ) ) ;
1489
+ }
1467
1490
}
0 commit comments