d49380eac0e586dc1f7e1ed720c381b4800326f4
[p5sagit/p5-mst-13.2.git] / ext / Digest / SHA / t / bitbuf.t
1 use strict;
2
3 my $MODULE;
4
5 BEGIN {
6         $MODULE = (-e "SHA.pm") ? "Digest::SHA" : "Digest::SHA::PurePerl";
7         eval "require $MODULE" || die $@;
8         $MODULE->import(qw());
9 }
10
11 BEGIN {
12         if ($ENV{PERL_CORE}) {
13                 chdir 't' if -d 't';
14                 @INC = '../lib';
15         }
16 }
17
18 my $numtests = 4;
19 print "1..$numtests\n";
20
21         # Here's the bitstring to test against, and its SHA-1 digest
22
23 my $ONEBITS = pack("B*", "1" x 80000);
24 my $digest = "11003389959355c2773af6b0f36d842fe430ec49";
25
26 my $state = $MODULE->new("sHa1");
27 my $testnum = 1;
28
29 $state->add_bits($ONEBITS, 80000);
30 print "not " unless $state->hexdigest eq $digest;
31 print "ok ", $testnum++, "\n";
32
33         # buffer using a series of increasingly large bitstrings
34
35 # Note that (1 + 2 + ... + 399) + 200 = 80000
36
37 for (1 .. 399) {
38         $state->add_bits($ONEBITS, $_);
39 }
40 $state->add_bits($ONEBITS, 200);
41
42 print "not " unless $state->hexdigest eq $digest;
43 print "ok ", $testnum++, "\n";
44
45         # create a buffer-alignment nuisance
46
47 $state = $MODULE->new("1");
48
49 $state->add_bits($ONEBITS, 1);
50 for (1 .. 99) {
51         $state->add_bits($ONEBITS, 800);
52 }
53 $state->add_bits($ONEBITS, 799);
54
55 print "not " unless $state->hexdigest eq $digest;
56 print "ok ", $testnum++, "\n";
57
58         # buffer randomly-sized bitstrings
59
60 my $reps = 80000;
61 my $maxbits = 8 * 127;
62
63 $state = $MODULE->new(1);
64
65 while ($reps > $maxbits) {
66         my $num = int(rand($maxbits));
67         $state->add_bits($ONEBITS, $num);
68         $reps -= $num;
69 }
70 $state->add_bits($ONEBITS, $reps);
71
72 print "not " unless $state->hexdigest eq $digest;
73 print "ok ", $testnum++, "\n";