2 use warnings FATAL => 'all';
6 use t::common qw( new_fh );
11 my ($fh, $filename) = new_fh();
12 my $db = DBM::Deep->new({
20 my $size = -s $filename;
22 cmp_ok( $size, '==', -s $filename, "A second overwrite doesn't change size" );
26 cmp_ok( $size, '==', -s $filename, "Deleted space isn't released" );
29 cmp_ok( $size, '==', -s $filename, "Added a new key after a delete reuses space" );
37 cmp_ok( $size, '==', -s $filename, "delete and rewrite reuses space" );
44 cmp_ok( $size, '==', -s $filename, "delete and rewrite reuses space" );
46 my $x = { foo => 'bar' };
49 delete $db->{floober};
51 ok( !exists $x->{foo}, "Deleting floober makes \$x empty (exists)" );
52 is( $x->{foo}, undef, "Deleting floober makes \$x empty (read)" );
53 is( delete $x->{foo}, undef, "Deleting floober makes \$x empty (delete)" );
55 eval { $x->{foo} = 'bar'; };
56 like( $@, qr/Cannot write to a deleted spot in DBM::Deep/, "Exception thrown when writing" );
58 cmp_ok( scalar( keys %$x ), '==', 0, "Keys returns nothing after deletion" );
62 my ($fh, $filename) = new_fh();
63 my $db = DBM::Deep->new({
68 $db->{ $_ } = undef for 1 .. 4;
69 delete $db->{ $_ } for 1 .. 4;
70 cmp_ok( keys %{ $db }, '==', 0, "We added and removed 4 keys" );
72 # So far, we've written 4 keys. Let's write 13 more keys. This should -not-
73 # trigger a reindex. This requires knowing how much space is taken. Good thing
74 # we wrote this dreck ...
75 my $size = -s $filename;
77 my $data_sector_size = $db->_engine->data_sector_size;
78 my $expected = $size + 9 * ( 2 * $data_sector_size );
80 $db->{ $_ } = undef for 5 .. 17;
82 cmp_ok( $expected, '==', -s $filename, "No reindexing after deletion" );