@@ -1464,4 +1464,27 @@ mod tests {
14641464 empty_features. hash ( & mut empty_hash) ;
14651465 assert_eq ! ( zerod_hash. finish( ) , empty_hash. finish( ) ) ;
14661466 }
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+ }
14671490}
0 commit comments