Completed transcription of 02_hash.t
[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
aa7ad9c2 13sub A_assignment : Test( no_plan ) {
d0c365a5 14 my $self = shift;
d0c365a5 15 my $db = $self->{db};
aa7ad9c2 16
17 my $rotate = 0;
18
d0c365a5 19 while ( my ($k,$v) = each %{$self->{data}} ) {
aa7ad9c2 20 $rotate = ++$rotate % 3;
21
22 if ( $rotate == 0 ) {
23 $db->{$k} = $v;
24 }
25 elsif ( $rotate == 1 ) {
26 $db->put( $k => $v );
27 }
28 else {
29 $db->store( $k => $v );
30 }
d0c365a5 31
32 ok( $db->exists( $k ) );
33 ok( exists $db->{$k} );
34
aa7ad9c2 35 is( $db->{$k}, $v );
d0c365a5 36 is( $db->get($k), $v );
37 is( $db->fetch($k), $v );
d0c365a5 38 }
39}
40
aa7ad9c2 41sub B_check_keys : Test( 1 ) {
42 my $self = shift;
43 my $db = $self->{db};
44
45 my @control = sort keys %{$self->{data}};
46 my @test1 = sort keys %$db;
47 is_deeply( \@test1, \@control );
48}
49
50sub C_each : Test( 1 ) {
51 my $self = shift;
52 my $db = $self->{db};
53
54 my $temp = {};
55 while ( my ($k,$v) = each %$db ) {
56 $temp->{$k} = $v;
57 }
58
59 is_deeply( $temp, $self->{data} );
60}
61
62sub D_firstkey : Test( 1 ) {
63 my $self = shift;
64 my $db = $self->{db};
65
66 my $temp = {};
67
68 my $key = $db->first_key;
69 while ( $key ) {
70 $temp->{$key} = $db->get( $key );
71 $key = $db->next_key( $key );
72 }
73
74 is_deeply( $temp, $self->{data} );
75}
76
bcc9f3bd 77sub E_delete : Test( 12 ) {
78 my $self = shift;
79 my $db = $self->{db};
80
81 my @keys = keys %{$self->{data}};
82 cmp_ok( scalar(keys %$db), '==', scalar(@keys) );
83
84 my $key1 = $keys[0];
85 ok( exists $db->{$key1} );
86 is( $db->{$key1}, $self->{data}{$key1} );
87 is( delete $db->{$key1}, $self->{data}{$key1} );
88 ok( !exists $db->{$key1} );
89 cmp_ok( keys %$db, '==', @keys - 1 );
90
91 my $key2 = $keys[1];
92 ok( exists $db->{$key2} );
93 is( $db->{$key2}, $self->{data}{$key2} );
94 is( $db->delete( $key2 ), $self->{data}{$key2} );
95 ok( !exists $db->{$key2} );
96 cmp_ok( keys %$db, '==', @keys - 2 );
97
98 @{$db}{ @keys[0,1] } = @{$self->{data}}{@keys[0,1]};
99
100 cmp_ok( scalar(keys %$db), '==', scalar(@keys) );
101}
102
103sub F_clear : Test( 3 ) {
104 my $self = shift;
105 my $db = $self->{db};
106
107 my @keys = keys %{$self->{data}};
108 cmp_ok( scalar(keys %$db), '==', scalar(@keys) );
109
110 %$db = ();
111
112 cmp_ok( keys %$db, '==', 0 );
113
114 %$db = %{$self->{data}};
115 cmp_ok( scalar(keys %$db), '==', scalar(@keys) );
116}
117
118sub G_reassign_and_close : Test( 4 ) {
119 my $self = shift;
120
121 my @keys = keys %{$self->{data}};
122
123 my $key1 = $keys[0];
124
125 my $long_value = 'long value' x 100;
126 $self->{db}{$key1} = $long_value;
127 is( $self->{db}{$key1}, $long_value );
128
129 my $filename = $self->{db}->_root->{file};
130 undef $self->{db};
131
132 $self->{db} = DBM::Deep->new( $filename );
133
134 is( $self->{db}{$key1}, $long_value );
135
136 $self->{db}{$key1} = $self->{data}{$key1};
137 is( $self->{db}{$key1}, $self->{data}{$key1} );
138
139 cmp_ok( keys %{$self->{db}}, '==', @keys );
140}
141
d0c365a5 1421;
143__END__