Added setup_fh that handles inodes separate from open()
[dbsrgits/DBM-Deep.git] / t / 15_digest.t
CommitLineData
ffed8b01 1##
2# DBM::Deep Test
3##
4use strict;
5use Test;
6BEGIN { plan tests => 13 }
7
8use DBM::Deep;
9
10my $salt = 38473827;
11
12##
13# basic file open
14##
15unlink "t/test.db";
16my $db = new DBM::Deep(
17 file => "t/test.db"
18);
ffed8b01 19
20##
21# Set digest handler
22##
1bf65be7 23DBM::Deep::Engine::set_digest( \&my_digest, 8 );
ffed8b01 24
25##
26# put/get key
27##
28$db->{key1} = "value1";
29ok( $db->{key1} eq "value1" );
30
31$db->put("key2", "value2");
32ok( $db->get("key2") eq "value2" );
33
34##
35# key exists
36##
37ok( $db->exists("key1") );
38ok( exists $db->{key2} );
39
40##
41# count keys
42##
43ok( scalar keys %$db == 2 );
44
45##
46# step through keys
47##
48my $temphash = {};
49while ( my ($key, $value) = each %$db ) {
50 $temphash->{$key} = $value;
51}
52
53ok( ($temphash->{key1} eq "value1") && ($temphash->{key2} eq "value2") );
54
55$temphash = {};
56my $key = $db->first_key();
57while ($key) {
58 $temphash->{$key} = $db->get($key);
59 $key = $db->next_key($key);
60}
61
62ok( ($temphash->{key1} eq "value1") && ($temphash->{key2} eq "value2") );
63
64##
65# delete keys
66##
67ok( delete $db->{key1} );
68ok( $db->delete("key2") );
69
70ok( scalar keys %$db == 0 );
71
72##
73# delete all keys
74##
75$db->put("another", "value");
76$db->clear();
77
78ok( scalar keys %$db == 0 );
79
80##
81# replace key
82##
83$db->put("key1", "value1");
84$db->put("key1", "value2");
85
86ok( $db->get("key1") eq "value2" );
87
88$db->put("key1", "value222222222222222222222222");
89
90ok( $db->get("key1") eq "value222222222222222222222222" );
91
92##
93# close, delete file, exit
94##
95undef $db;
96unlink "t/test.db";
97exit(0);
98
99sub 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}