diff --git a/lib/Digest/MD5.pm b/lib/Digest/MD5.pm index da62224..423cb67 100644 --- a/lib/Digest/MD5.pm +++ b/lib/Digest/MD5.pm @@ -62,4 +62,12 @@ class Digest::MD5:auth:ver<0.05> { multi method md5_hex(@str) { md5( @str.join.encode('ascii') ).list».fmt('%02x').join } + + multi method md5_buf(Str $str --> Buf) { + md5( $str.encode('ascii') ); + } + + multi method md5_buf(@str --> Buf) { + md5( @str.join.encode('ascii') ); + } } diff --git a/lib/Digest/MD5.pm.perl b/lib/Digest/MD5.pm.perl index f355dd1..a39d0fa 100644 --- a/lib/Digest/MD5.pm.perl +++ b/lib/Digest/MD5.pm.perl @@ -61,4 +61,12 @@ multi method md5_hex(@str) { md5( @str.join.encode('ascii') ).list».fmt('%02x').join } + + multi method md5_buf(Str $str --> Buf) { + md5( $str.encode('ascii') ); + } + + multi method md5_buf(@str --> Buf) { + md5( @str.join.encode('ascii') ); + } } diff --git a/t/perl5-compat.t b/t/perl5-compat.t index 1d69337..4f334f4 100644 --- a/t/perl5-compat.t +++ b/t/perl5-compat.t @@ -19,12 +19,35 @@ for @cases -> $values, $md5 { Digest::MD5.md5_hex($values), $md5, "MD5 hex of '$values' must be '$md5' (static method)" ); - + is( $digest.md5_hex($values), $md5, "MD5 hex of '$values' must be '$md5' (instance method)" ); + + my Buf $md5_buf = Digest::MD5.md5_buf($values); + is $md5_buf.elems, 16, 'Length of buf is 16 bytes'; + + my Str $s = $md5; + $s ~~ m/(<[0..9A..Za..z]>**2)**16/; + my Buf $b .= new( map( {:16($_.Str)}, @($/[0][*]))); + is-deeply( + $md5_buf.list, $b.list, + "MD5 binary of '$values' (static method)" + ); + + + $md5_buf = $digest.md5_buf($values); + is $md5_buf.elems, 16, 'Length of buf is 16 bytes'; + + $s = $md5; + $s ~~ m/(<[0..9A..Za..z]>**2)**16/; + $b .= new( map( {:16($_.Str)}, @($/[0][*]))); + is-deeply( + $md5_buf.list, $b.list, + "MD5 binary of '$values' (instance method)" + ); } done;