1*cbfb5651Safresh1#!/usr/bin/perl 2*cbfb5651Safresh1use strict; 3*cbfb5651Safresh1use warnings; 4*cbfb5651Safresh1 5*cbfb5651Safresh1use Test::More; 6*cbfb5651Safresh1use Digest::MD5; 7*cbfb5651Safresh1 8*cbfb5651Safresh1foreach my $string ( map { 'a' x $_ } 9*cbfb5651Safresh1 1..17, 10*cbfb5651Safresh1 31..33, 11*cbfb5651Safresh1 64..65, 12*cbfb5651Safresh1 127..129, 13*cbfb5651Safresh1 191..193, 14*cbfb5651Safresh1 1023..1025, 15*cbfb5651Safresh1 2047..2049, 16*cbfb5651Safresh1) { 17*cbfb5651Safresh1 my $expect = do { 18*cbfb5651Safresh1 my $ctx = Digest::MD5->new; 19*cbfb5651Safresh1 $ctx->add($string); 20*cbfb5651Safresh1 $ctx->add($string); 21*cbfb5651Safresh1 $ctx->add($string); 22*cbfb5651Safresh1 $ctx->hexdigest; 23*cbfb5651Safresh1 }; 24*cbfb5651Safresh1 25*cbfb5651Safresh1 my $got = do { 26*cbfb5651Safresh1 my $ctx1 = Digest::MD5->new; 27*cbfb5651Safresh1 $ctx1->add($string); 28*cbfb5651Safresh1 29*cbfb5651Safresh1 my $ctx2 = Digest::MD5->new; 30*cbfb5651Safresh1 $ctx2->context( $ctx1->context ); 31*cbfb5651Safresh1 $ctx2->add($string); 32*cbfb5651Safresh1 33*cbfb5651Safresh1 my $ctx3 = Digest::MD5->new; 34*cbfb5651Safresh1 $ctx3->context( $ctx2->context ); 35*cbfb5651Safresh1 $ctx3->add($string); 36*cbfb5651Safresh1 37*cbfb5651Safresh1 $ctx3->hexdigest; 38*cbfb5651Safresh1 }; 39*cbfb5651Safresh1 40*cbfb5651Safresh1 is $got, $expect, length($string) . " saved context"; 41*cbfb5651Safresh1} 42*cbfb5651Safresh1 43*cbfb5651Safresh1done_testing; 44