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