@@ -1359,3 +1359,43 @@ fn read_only_while_writer_holds_db() {
13591359 drop ( db) ;
13601360 let _ = fs:: remove_file ( & db_path) ;
13611361}
1362+
1363+ #[ test]
1364+ fn reset_to_empty ( ) {
1365+ let db = Database :: memory ( ) . unwrap ( ) ;
1366+ let empty_root = db. begin_read ( ) . unwrap ( ) . compute_root ( ) . unwrap ( ) ;
1367+
1368+ // Insert data across multiple snapshots
1369+ let mut write = db. begin_write ( ) . unwrap ( ) ;
1370+ for i in 0u8 ..10 {
1371+ let mut k = [ 0u8 ; 32 ] ;
1372+ k[ 0 ] = i;
1373+ write = write. insert ( k, vec ! [ i] ) . unwrap ( ) ;
1374+ }
1375+ write. commit ( ) . unwrap ( ) ;
1376+
1377+ db. begin_write ( ) . unwrap ( )
1378+ . insert ( [ 0xFFu8 ; 32 ] , vec ! [ 0xFF ] ) . unwrap ( )
1379+ . commit ( ) . unwrap ( ) ;
1380+
1381+ assert_eq ! ( db. iter( ) . count( ) , 2 , "should have 2 snapshots" ) ;
1382+ assert_ne ! ( db. begin_read( ) . unwrap( ) . compute_root( ) . unwrap( ) , empty_root) ;
1383+
1384+ // Reset to empty
1385+ db. reset ( ) . unwrap ( ) ;
1386+
1387+ // Should behave like a fresh database
1388+ let mut snapshot = db. begin_read ( ) . unwrap ( ) ;
1389+ assert_eq ! ( snapshot. compute_root( ) . unwrap( ) , empty_root) ;
1390+ assert_eq ! ( snapshot. get( & [ 0u8 ; 32 ] ) . unwrap( ) , None ) ;
1391+ assert_eq ! ( db. iter( ) . count( ) , 0 , "should have 0 snapshots after reset" ) ;
1392+
1393+ // Should be able to write again after reset
1394+ db. begin_write ( ) . unwrap ( )
1395+ . insert ( [ 0x42u8 ; 32 ] , vec ! [ 1 , 2 , 3 ] ) . unwrap ( )
1396+ . commit ( ) . unwrap ( ) ;
1397+
1398+ let mut snapshot = db. begin_read ( ) . unwrap ( ) ;
1399+ assert_eq ! ( snapshot. get( & [ 0x42u8 ; 32 ] ) . unwrap( ) , Some ( vec![ 1 , 2 , 3 ] ) ) ;
1400+ assert_ne ! ( snapshot. compute_root( ) . unwrap( ) , empty_root) ;
1401+ }
0 commit comments