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