Refactored to _descend to fix the recursion bug
[dbsrgits/DBM-Deep.git] / t / 15_digest.t
CommitLineData
ffed8b01 1use strict;
0e3e3555 2use warnings FATAL => 'all';
ffed8b01 3
0e3e3555 4use Test::More;
5use t::common qw( new_dbm );
2a81bf9e 6
0e3e3555 7use_ok( 'DBM::Deep' );
ffed8b01 8
9my $salt = 38473827;
10
0e3e3555 11# Warning: This digest function is for testing ONLY.
12# It is NOT intended for actual use. If you do so, I will laugh at you.
13sub my_digest {
14 my $key = shift;
15 my $num = $salt;
16
17 for (my $k=0; $k<length($key); $k++) {
18 $num += ord( substr($key, $k, 1) );
19 }
20
21 return sprintf("%00000008d", $num);
ffed8b01 22}
23
0e3e3555 24my $dbm_factory = new_dbm( digest => \&my_digest, hash_size => 8 );
25while ( my $dbm_maker = $dbm_factory->() ) {
26 my $db = $dbm_maker->();
ffed8b01 27
0e3e3555 28 ##
29 # put/get key
30 ##
31 $db->{key1} = "value1";
32 ok( $db->{key1} eq "value1" );
ffed8b01 33
0e3e3555 34 $db->put("key2", "value2");
35 ok( $db->get("key2") eq "value2" );
ffed8b01 36
0e3e3555 37 ##
38 # key exists
39 ##
40 ok( $db->exists("key1") );
41 ok( exists $db->{key2} );
ffed8b01 42
0e3e3555 43 ##
44 # count keys
45 ##
46 ok( scalar keys %$db == 2 );
ffed8b01 47
0e3e3555 48 ##
49 # step through keys
50 ##
51 my $temphash = {};
52 while ( my ($key, $value) = each %$db ) {
53 $temphash->{$key} = $value;
54 }
ffed8b01 55
0e3e3555 56 ok( ($temphash->{key1} eq "value1") && ($temphash->{key2} eq "value2") );
ffed8b01 57
0e3e3555 58 $temphash = {};
59 my $key = $db->first_key();
60 while ($key) {
61 $temphash->{$key} = $db->get($key);
62 $key = $db->next_key($key);
63 }
ffed8b01 64
0e3e3555 65 ok( ($temphash->{key1} eq "value1") && ($temphash->{key2} eq "value2") );
ffed8b01 66
0e3e3555 67 ##
68 # delete keys
69 ##
70 ok( delete $db->{key1} );
71 ok( $db->delete("key2") );
ffed8b01 72
0e3e3555 73 ok( scalar keys %$db == 0 );
ffed8b01 74
0e3e3555 75 ##
76 # delete all keys
77 ##
78 $db->put("another", "value");
79 $db->clear();
80
81 ok( scalar keys %$db == 0 );
82
83 ##
84 # replace key
85 ##
86 $db->put("key1", "value1");
87 $db->put("key1", "value2");
88
89 ok( $db->get("key1") eq "value2" );
90
91 $db->put("key1", "value222222222222222222222222");
92
93 ok( $db->get("key1") eq "value222222222222222222222222" );
ffed8b01 94}
0e3e3555 95done_testing;