Commit | Line | Data |
b12d758c |
1 | #!perl -w |
2 | |
3 | use Test qw(plan ok); |
4 | plan tests => 12; |
5 | |
6 | { |
7 | package LenDigest; |
8 | require Digest::base; |
9 | use vars qw(@ISA); |
10 | @ISA = qw(Digest::base); |
11 | |
12 | sub new { |
13 | my $class = shift; |
14 | my $str = ""; |
15 | bless \$str, $class; |
16 | } |
17 | |
18 | sub add { |
19 | my $self = shift; |
20 | $$self .= join("", @_); |
21 | return $self; |
22 | } |
23 | |
24 | sub digest { |
25 | my $self = shift; |
26 | my $len = length($$self); |
27 | my $first = ($len > 0) ? substr($$self, 0, 1) : "X"; |
28 | $$self = ""; |
29 | return sprintf "$first%04d", $len; |
30 | } |
31 | } |
32 | |
33 | my $ctx = LenDigest->new; |
34 | ok($ctx->digest, "X0000"); |
35 | ok($ctx->hexdigest, "5830303030"); |
36 | ok($ctx->b64digest, "WDAwMDA"); |
37 | |
38 | $ctx->add("foo"); |
39 | ok($ctx->digest, "f0003"); |
40 | |
41 | $ctx->add("foo"); |
42 | ok($ctx->hexdigest, "6630303033"); |
43 | |
44 | $ctx->add("foo"); |
45 | ok($ctx->b64digest, "ZjAwMDM"); |
46 | |
47 | open(F, ">xxtest$$") || die; |
48 | binmode(F); |
49 | print F "abc" x 100, "\n"; |
50 | close(F) || die; |
51 | |
52 | open(F, "xxtest$$") || die; |
53 | $ctx->addfile(*F); |
54 | close(F); |
55 | unlink("xxtest$$") || warn; |
56 | |
57 | ok($ctx->digest, "a0301"); |
58 | |
59 | eval { |
60 | $ctx->add_bits("1010"); |
61 | }; |
62 | ok($@ =~ /^Number of bits must be multiple of 8/); |
63 | |
64 | $ctx->add_bits("01010101"); |
65 | ok($ctx->digest, "U0001"); |
66 | |
67 | eval { |
68 | $ctx->add_bits("abc", 12); |
69 | }; |
70 | ok($@ =~ /^Number of bits must be multiple of 8/); |
71 | |
72 | $ctx->add_bits("abc", 16); |
73 | ok($ctx->digest, "a0002"); |
74 | |
75 | $ctx->add_bits("abc", 32); |
76 | ok($ctx->digest, "a0003"); |