base.t revision 1
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee#!perl -w
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeuse Test qw(plan ok);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeplan tests => 12;
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee{
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee package LenDigest;
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee require Digest::base;
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee use vars qw(@ISA);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee @ISA = qw(Digest::base);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee sub new {
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee my $class = shift;
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee my $str = "";
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee bless \$str, $class;
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee }
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee sub add {
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee my $self = shift;
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee $$self .= join("", @_);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee return $self;
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee }
e77b06d21580f630e0a7c437495ab283d3672828tomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee sub digest {
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee my $self = shift;
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee my $len = length($$self);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee my $first = ($len > 0) ? substr($$self, 0, 1) : "X";
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee $$self = "";
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee return sprintf "$first%04d", $len;
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee }
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee}
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeemy $ctx = LenDigest->new;
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeok($ctx->digest, "X0000");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeok($ctx->hexdigest, "5830303030");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeok($ctx->b64digest, "WDAwMDA");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee$ctx->add("foo");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeok($ctx->digest, "f0003");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee$ctx->add("foo");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeok($ctx->hexdigest, "6630303033");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee$ctx->add("foo");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeok($ctx->b64digest, "ZjAwMDM");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeopen(F, ">xxtest$$") || die;
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeebinmode(F);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeprint F "abc" x 100, "\n";
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeclose(F) || die;
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeopen(F, "xxtest$$") || die;
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee$ctx->addfile(*F);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeclose(F);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeunlink("xxtest$$") || warn;
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeok($ctx->digest, "a0301");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeeval {
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee $ctx->add_bits("1010");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee};
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeok($@ =~ /^Number of bits must be multiple of 8/);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee$ctx->add_bits("01010101");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeok($ctx->digest, "U0001");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeeval {
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee $ctx->add_bits("abc", 12);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee};
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeok($@ =~ /^Number of bits must be multiple of 8/);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee$ctx->add_bits("abc", 16);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeok($ctx->digest, "a0002");
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomee$ctx->add_bits("abc", 32);
fb3fb4f3d76d55b64440afd0af72775dfad3bd1dtomeeok($ctx->digest, "a0003");
127bbe13a6d36580af6a8ded154f1201a6250772tomee