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