New testing feature that allows specification of the workdir for the tests
[dbsrgits/DBM-Deep.git] / t / 15_digest.t
CommitLineData
ffed8b01 1##
2# DBM::Deep Test
3##
4use strict;
2a81bf9e 5use Test::More tests => 14;
fde3db1a 6use t::common qw( new_fh );
ffed8b01 7
2a81bf9e 8use_ok( 'DBM::Deep' );
9
fde3db1a 10my ($fh, $filename) = new_fh();
ffed8b01 11
12my $salt = 38473827;
13
ffed8b01 14my $db = new DBM::Deep(
2a81bf9e 15 file => $filename,
ffed8b01 16);
ffed8b01 17
18##
19# Set digest handler
20##
612969fb 21$db->_get_self->{engine}->set_digest( \&my_digest, 8 );
ffed8b01 22
23##
24# put/get key
25##
26$db->{key1} = "value1";
27ok( $db->{key1} eq "value1" );
28
29$db->put("key2", "value2");
30ok( $db->get("key2") eq "value2" );
31
32##
33# key exists
34##
35ok( $db->exists("key1") );
36ok( exists $db->{key2} );
37
38##
39# count keys
40##
41ok( scalar keys %$db == 2 );
42
43##
44# step through keys
45##
46my $temphash = {};
47while ( my ($key, $value) = each %$db ) {
48 $temphash->{$key} = $value;
49}
50
51ok( ($temphash->{key1} eq "value1") && ($temphash->{key2} eq "value2") );
52
53$temphash = {};
54my $key = $db->first_key();
55while ($key) {
56 $temphash->{$key} = $db->get($key);
57 $key = $db->next_key($key);
58}
59
60ok( ($temphash->{key1} eq "value1") && ($temphash->{key2} eq "value2") );
61
62##
63# delete keys
64##
65ok( delete $db->{key1} );
66ok( $db->delete("key2") );
67
68ok( scalar keys %$db == 0 );
69
70##
71# delete all keys
72##
73$db->put("another", "value");
74$db->clear();
75
76ok( scalar keys %$db == 0 );
77
78##
79# replace key
80##
81$db->put("key1", "value1");
82$db->put("key1", "value2");
83
84ok( $db->get("key1") eq "value2" );
85
86$db->put("key1", "value222222222222222222222222");
87
88ok( $db->get("key1") eq "value222222222222222222222222" );
89
ffed8b01 90sub my_digest {
91 ##
92 # Warning: This digest function is for testing ONLY
93 # It is NOT intended for actual use
94 ##
95 my $key = shift;
96 my $num = $salt;
97
98 for (my $k=0; $k<length($key); $k++) {
99 $num += ord( substr($key, $k, 1) );
100 }
101
102 return sprintf("%00000008d", $num);
103}