1# -*- Mode: CPerl -*- 2 3use strict; 4use warnings; 5 6use Test::More 'no_plan'; 7 8use Hash::MultiKey; 9 10tie my (%hmk), 'Hash::MultiKey'; 11 12my @mk = (["foo"], 13 ["foo", "bar", "baz"], 14 ["foo", "bar", "baz", "zoo"], 15 ["goo"], 16 ["goo", "car", "caz"], 17 ["goo", "car", "caz", "aoo"],); 18 19my @v = (undef, 20 1, 21 'string', 22 ['array', 'ref'], 23 {hash => 'ref', with => 'three', keys => undef}, 24 \7,); 25 26# initialize %hmk 27$hmk{[join $;, @{$mk[$_]}]} = $v[$_] foreach 0..$#mk; 28 29# each in list context 30while (my ($mk, $v) = each %hmk) { 31 is_deeply($hmk{$mk}, $v, "each all: list context"); 32} 33 34# each in scalar context 35my $i = 0; 36while (my $mk = each %hmk) { 37 ++$i; 38 ok(exists $hmk{$mk}, 'each all: scalar context'); 39} 40is(scalar(keys %hmk), $i, 'each all: number of iterations'); 41 42foreach my $i (0..$#mk) { 43 delete $hmk{[join $;, @{$mk[$i]}]}; 44 while (my ($mk, $v) = each %hmk) { 45 is_deeply($hmk{$mk}, $v, "each $i: @$mk"); 46 } 47} 48 49# deletion of the last element must be safe 50while (my ($mk, $v) = each %hmk) { 51 is_deeply(delete $hmk{$mk}, $v, 'deletion in each'); 52} 53