Commit | Line | Data |
2120a181 |
1 | ## |
2 | # DBM::Deep Test |
3 | ## |
4 | use strict; |
5 | use Test::More tests => 13; |
6 | use Test::Exception; |
7 | use t::common qw( new_fh ); |
8 | |
9 | use_ok( 'DBM::Deep' ); |
10 | |
11 | { |
12 | my ($fh, $filename) = new_fh(); |
13 | my $db = DBM::Deep->new({ |
14 | file => $filename, |
15 | autoflush => 1, |
16 | }); |
17 | |
18 | $db->{foo} = '1234'; |
19 | $db->{foo} = '2345'; |
20 | |
21 | my $size = -s $filename; |
22 | $db->{foo} = '3456'; |
23 | cmp_ok( $size, '==', -s $filename, "A second overwrite doesn't change size" ); |
24 | |
25 | $size = -s $filename; |
26 | delete $db->{foo}; |
27 | cmp_ok( $size, '==', -s $filename, "Deleted space isn't released" ); |
28 | |
29 | $db->{bar} = '2345'; |
30 | cmp_ok( $size, '==', -s $filename, "Added a new key after a delete reuses space" ); |
31 | |
32 | $db->{baz} = {}; |
33 | $size = -s $filename; |
34 | |
35 | delete $db->{baz}; |
36 | $db->{baz} = {}; |
37 | |
38 | cmp_ok( $size, '==', -s $filename, "delete and rewrite reuses space" ); |
39 | |
40 | $db->{baz} = {}; |
41 | $size = -s $filename; |
42 | |
43 | $db->{baz} = {}; |
44 | |
45 | cmp_ok( $size, '==', -s $filename, "delete and rewrite reuses space" ); |
46 | |
47 | my $x = { foo => 'bar' }; |
48 | $db->{floober} = $x; |
49 | |
50 | delete $db->{floober}; |
51 | |
52 | ok( !exists $x->{foo}, "Deleting floober makes \$x empty (exists)" ); |
53 | is( $x->{foo}, undef, "Deleting floober makes \$x empty (read)" ); |
54 | is( delete $x->{foo}, undef, "Deleting floober makes \$x empty (delete)" ); |
55 | |
56 | eval { $x->{foo} = 'bar'; }; |
57 | like( $@, qr/Cannot write to a deleted spot in DBM::Deep/, "Exception thrown when writing" ); |
58 | |
59 | cmp_ok( scalar( keys %$x ), '==', 0, "Keys returns nothing after deletion" ); |
60 | } |
61 | |
62 | { |
63 | my ($fh, $filename) = new_fh(); |
64 | my $db = DBM::Deep->new({ |
65 | file => $filename, |
66 | autoflush => 1, |
67 | }); |
68 | |
69 | $db->{ $_ } = undef for 1 .. 4; |
70 | delete $db->{ $_ } for 1 .. 4; |
71 | cmp_ok( keys %{ $db }, '==', 0, "We added and removed 4 keys" ); |
72 | |
73 | # So far, we've written 4 keys. Let's write 13 more keys. This should -not- |
74 | # trigger a reindex. This requires knowing how much space is taken. Good thing |
75 | # we wrote this dreck ... |
76 | my $size = -s $filename; |
77 | |
78 | my $expected = $size + 9 * ( 256 + 256 ); |
79 | |
80 | $db->{ $_ } = undef for 5 .. 17; |
81 | |
82 | cmp_ok( $expected, '==', -s $filename, "No reindexing after deletion" ); |
83 | } |