@@ -1392,7 +1392,10 @@ mod tests {
13921392 storage. flags . set_data_restored ( true ) ;
13931393 storage. flags . set_meta_restored ( true ) ;
13941394
1395- storage. drop_partial ( true , false ) ;
1395+ assert_eq ! (
1396+ DropPartialOutcome :: HasResidue ,
1397+ storage. drop_partial( true , false )
1398+ ) ;
13961399
13971400 // Persistent entries gone; transient residue preserved.
13981401 assert ! ( !storage. output_dependent( ) . contains( & persistent_task( 1 ) ) ) ;
@@ -1438,7 +1441,10 @@ mod tests {
14381441 storage. flags . set_data_restored ( true ) ;
14391442 storage. flags . set_meta_restored ( true ) ;
14401443
1441- storage. drop_partial ( false , true ) ;
1444+ assert_eq ! (
1445+ DropPartialOutcome :: HasResidue ,
1446+ storage. drop_partial( false , true )
1447+ ) ;
14421448
14431449 // Inline upper: transient residue remains.
14441450 assert_eq ! ( storage. upper( ) . len( ) , 1 ) ;
@@ -1476,7 +1482,13 @@ mod tests {
14761482 storage. flags . set_data_restored ( true ) ;
14771483 storage. flags . set_meta_restored ( true ) ;
14781484
1479- storage. drop_partial ( true , false ) ;
1485+ // Only persistent entries → no `filter_transient` residue, but the
1486+ // `meta_restored` transient flag is still set (we only dropped the
1487+ // data category), so the authoritative outcome is `HasResidue`.
1488+ assert_eq ! (
1489+ DropPartialOutcome :: HasResidue ,
1490+ storage. drop_partial( true , false )
1491+ ) ;
14801492
14811493 assert ! ( storage. output_dependent( ) . is_empty( ) ) ;
14821494 }
@@ -1494,7 +1506,10 @@ mod tests {
14941506 storage. flags . set_invalidator ( true ) ;
14951507 storage. flags . set_immutable ( true ) ;
14961508
1497- storage. drop_partial ( true , true ) ;
1509+ // Drop both categories → both `*_restored` transient flags are
1510+ // cleared, persisted flag bits are cleared, no residue. Outcome is
1511+ // `Empty` and the caller can erase the entry.
1512+ assert_eq ! ( DropPartialOutcome :: Empty , storage. drop_partial( true , true ) ) ;
14981513
14991514 assert ! ( !storage. flags. invalidator( ) ) ;
15001515 assert ! ( !storage. flags. immutable( ) ) ;
@@ -1517,7 +1532,11 @@ mod tests {
15171532 storage. flags . set_data_restored ( true ) ;
15181533 storage. flags . set_meta_restored ( true ) ;
15191534
1520- storage. drop_partial ( false , true ) ;
1535+ // Filter-transient `output` keeps its transient value → residue.
1536+ assert_eq ! (
1537+ DropPartialOutcome :: HasResidue ,
1538+ storage. drop_partial( false , true )
1539+ ) ;
15211540
15221541 // Transient output retained.
15231542 assert_eq ! (
@@ -1579,7 +1598,12 @@ mod tests {
15791598 storage. flags . set_data_restored ( true ) ;
15801599 storage. flags . set_meta_restored ( true ) ;
15811600
1582- storage. drop_partial ( true , false ) ;
1601+ // KeepMe is `evict = "last"` → non-recoverable → retained as
1602+ // residue.
1603+ assert_eq ! (
1604+ DropPartialOutcome :: HasResidue ,
1605+ storage. drop_partial( true , false )
1606+ ) ;
15831607
15841608 let cells = storage. cell_data ( ) . expect ( "residue keeps the variant" ) ;
15851609 assert_eq ! ( cells. len( ) , 1 ) ;
@@ -1596,7 +1620,10 @@ mod tests {
15961620 storage. flags . set_data_restored ( true ) ;
15971621 storage. flags . set_meta_restored ( true ) ;
15981622
1599- storage. drop_partial ( true , false ) ;
1623+ assert_eq ! (
1624+ DropPartialOutcome :: HasResidue ,
1625+ storage. drop_partial( true , false )
1626+ ) ;
16001627
16011628 assert ! (
16021629 storage. cell_data( ) . is_none( ) ,
@@ -1614,7 +1641,10 @@ mod tests {
16141641 storage. flags . set_data_restored ( true ) ;
16151642 storage. flags . set_meta_restored ( true ) ;
16161643
1617- storage. drop_partial ( true , false ) ;
1644+ assert_eq ! (
1645+ DropPartialOutcome :: HasResidue ,
1646+ storage. drop_partial( true , false )
1647+ ) ;
16181648 // Only KeepMe entry survives.
16191649 assert_eq ! ( storage. cell_data( ) . unwrap( ) . len( ) , 1 ) ;
16201650
@@ -1641,7 +1671,12 @@ mod tests {
16411671 storage. flags . set_data_restored ( true ) ;
16421672 storage. flags . set_meta_restored ( true ) ;
16431673
1644- storage. drop_partial ( false , true ) ;
1674+ // Meta-only drop doesn't touch `cell_data` (data category), so
1675+ // the data category stays non-empty → `HasResidue`.
1676+ assert_eq ! (
1677+ DropPartialOutcome :: HasResidue ,
1678+ storage. drop_partial( false , true )
1679+ ) ;
16451680
16461681 // cell_data is category=data; meta-only drop leaves it alone.
16471682 assert_eq ! ( storage. cell_data( ) . unwrap( ) . len( ) , 1 ) ;
0 commit comments