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