Algorithm-MinPerfHashTwoLevel
view release on metacpan or search on metacpan
t/Algo_v5.t view on Meta::CPAN
#########################
use strict;
use warnings;
use Test::More tests => 7;
use Data::Dumper; $Data::Dumper::Sortkeys=1; $Data::Dumper::Useqq=1;
BEGIN { use_ok('Algorithm::MinPerfHashTwoLevel') };
use Algorithm::MinPerfHashTwoLevel qw(hash_with_state);
#########################
my $class= "Algorithm::MinPerfHashTwoLevel";
my $o= $class->new("seed"=>"1234567812345678",debug=>$ENV{TEST_VERBOSE},variant=>5);
my $state= $o->get_state;
my $state_as_hex= unpack "h*",$o->get_state;
is($state_as_hex,"4475044405b585b4c5d575a5454485c5050465a50515e445247574d4752525c4","state for seed is as expected");
for my $tuple (
[ "fnorble", 17300635747579776751 ],
[ "blah blah blah", 7551733764733872358 ],
[ "blah blaH blah", 15370689535882563083 ],
) {
my ($str,$want_hash)= @$tuple;
my $got_hash= hash_with_state($str,$state);
is($got_hash,$want_hash,"test hash function '$str'");
}
my %hash= ("A" .. "Z");
my $buckets= $o->compute(\%hash);
is_deeply($buckets,
[
{
"h0" => "2811388775115704789",
"idx" => 0,
"key" => "M",
"key_is_utf8" => 0,
"key_normalized" => "M",
"val" => "N",
"val_is_utf8" => 0,
"val_normalized" => "N"
},
{
"h0" => "8860848721851830215",
"h1_keys" => 2,
"idx" => 1,
"key" => "K",
"key_is_utf8" => 0,
"key_normalized" => "K",
"val" => "L",
"val_is_utf8" => 0,
"val_normalized" => "L",
"xor_val" => 1
},
{
"h0" => "2333874141850904510",
"h1_keys" => 1,
"idx" => 2,
"key" => "G",
"key_is_utf8" => 0,
"key_normalized" => "G",
"val" => "H",
"val_is_utf8" => 0,
"val_normalized" => "H",
"xor_val" => "4294967295"
},
{
"h0" => "16876117158654460122",
"idx" => 3,
"key" => "Y",
"key_is_utf8" => 0,
"key_normalized" => "Y",
"val" => "Z",
"val_is_utf8" => 0,
"val_normalized" => "Z"
( run in 0.513 second using v1.01-cache-2.11-cpan-0bd6704ced7 )