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