Added more tests
[dbsrgits/DBM-Deep.git] / t / lib / TestSimpleHash.pm
CommitLineData
d0c365a5 1package TestSimpleHash;
2
3use 5.6.0;
4
5use strict;
6use warnings;
7
8use Test::More;
9use Test::Exception;
10
11use base 'TestBase';
12
4c3601d7 13sub A_assignment : Test( 23 ) {
d0c365a5 14 my $self = shift;
d0c365a5 15 my $db = $self->{db};
aa7ad9c2 16
4c3601d7 17 my @keys = keys %{$self->{data}};
18
19 push @keys, $keys[0] while @keys < 3;
aa7ad9c2 20
4c3601d7 21 #die "@keys\n";
aa7ad9c2 22
4c3601d7 23 cmp_ok( keys %$db, '==', 0 );
24
25 foreach my $k ( @keys[0..2] ) {
26 ok( !exists $db->{$k} );
27 ok( !$db->exists( $k ) );
28 }
d0c365a5 29
4c3601d7 30 $db->{$keys[0]} = $self->{data}{$keys[0]};
31 $db->put( $keys[1] => $self->{data}{$keys[1]} );
32 $db->store( $keys[2] => $self->{data}{$keys[2]} );
33
34 foreach my $k ( @keys[0..2] ) {
d0c365a5 35 ok( $db->exists( $k ) );
36 ok( exists $db->{$k} );
37
4c3601d7 38 is( $db->{$k}, $self->{data}{$k} );
39 is( $db->get($k), $self->{data}{$k} );
40 is( $db->fetch($k), $self->{data}{$k} );
41 }
42
43 if ( @keys > 3 ) {
44 $db->{$_} = $self->{data}{$_} for @keys[3..$#keys];
d0c365a5 45 }
4c3601d7 46
47 cmp_ok( keys %$db, '==', @keys );
d0c365a5 48}
49
aa7ad9c2 50sub B_check_keys : Test( 1 ) {
51 my $self = shift;
52 my $db = $self->{db};
53
54 my @control = sort keys %{$self->{data}};
55 my @test1 = sort keys %$db;
56 is_deeply( \@test1, \@control );
57}
58
59sub C_each : Test( 1 ) {
60 my $self = shift;
61 my $db = $self->{db};
62
63 my $temp = {};
64 while ( my ($k,$v) = each %$db ) {
65 $temp->{$k} = $v;
66 }
67
68 is_deeply( $temp, $self->{data} );
69}
70
71sub D_firstkey : Test( 1 ) {
72 my $self = shift;
73 my $db = $self->{db};
74
75 my $temp = {};
76
77 my $key = $db->first_key;
78 while ( $key ) {
79 $temp->{$key} = $db->get( $key );
80 $key = $db->next_key( $key );
81 }
82
83 is_deeply( $temp, $self->{data} );
84}
85
bcc9f3bd 86sub E_delete : Test( 12 ) {
87 my $self = shift;
88 my $db = $self->{db};
89
90 my @keys = keys %{$self->{data}};
4c3601d7 91 cmp_ok( keys %$db, '==', @keys );
bcc9f3bd 92
93 my $key1 = $keys[0];
94 ok( exists $db->{$key1} );
95 is( $db->{$key1}, $self->{data}{$key1} );
96 is( delete $db->{$key1}, $self->{data}{$key1} );
97 ok( !exists $db->{$key1} );
98 cmp_ok( keys %$db, '==', @keys - 1 );
99
100 my $key2 = $keys[1];
101 ok( exists $db->{$key2} );
102 is( $db->{$key2}, $self->{data}{$key2} );
103 is( $db->delete( $key2 ), $self->{data}{$key2} );
104 ok( !exists $db->{$key2} );
105 cmp_ok( keys %$db, '==', @keys - 2 );
106
107 @{$db}{ @keys[0,1] } = @{$self->{data}}{@keys[0,1]};
108
4c3601d7 109 cmp_ok( keys %$db, '==', @keys );
bcc9f3bd 110}
111
112sub F_clear : Test( 3 ) {
113 my $self = shift;
114 my $db = $self->{db};
115
116 my @keys = keys %{$self->{data}};
4c3601d7 117 cmp_ok( keys %$db, '==', @keys );
bcc9f3bd 118
119 %$db = ();
120
121 cmp_ok( keys %$db, '==', 0 );
122
123 %$db = %{$self->{data}};
4c3601d7 124 cmp_ok( keys %$db, '==', @keys );
bcc9f3bd 125}
126
127sub G_reassign_and_close : Test( 4 ) {
128 my $self = shift;
129
130 my @keys = keys %{$self->{data}};
131
132 my $key1 = $keys[0];
133
134 my $long_value = 'long value' x 100;
135 $self->{db}{$key1} = $long_value;
136 is( $self->{db}{$key1}, $long_value );
137
138 my $filename = $self->{db}->_root->{file};
139 undef $self->{db};
140
141 $self->{db} = DBM::Deep->new( $filename );
142
143 is( $self->{db}{$key1}, $long_value );
144
145 $self->{db}{$key1} = $self->{data}{$key1};
146 is( $self->{db}{$key1}, $self->{data}{$key1} );
147
148 cmp_ok( keys %{$self->{db}}, '==', @keys );
149}
150
d0c365a5 1511;
152__END__