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# values must be returned in the same order as keys reports their 30# corresponding keys 31my @v_in_keys_order = (); 32push @v_in_keys_order, $hmk{$_} foreach keys %hmk; 33is_deeply([values %hmk], \@v_in_keys_order, "values - all"); 34 35# aliased values? 36$_ = 1 foreach values %hmk; 37is($_, 1, 'aliased value') foreach values %hmk; 38 39foreach my $v (values %hmk) { 40 $v =~ s/1/2/g; 41} 42is($_, 2, 'aliased value (2)') foreach values %hmk; 43 44# initialize %hmk again 45$hmk{[join $;, @{$mk[$_]}]} = $v[$_] foreach 0..$#mk; 46 47foreach my $i (0..$#mk) { 48 delete $hmk{[join $;, @{$mk[$i]}]}; 49 @v_in_keys_order = (); 50 push @v_in_keys_order, $hmk{$_} foreach keys %hmk; 51 is_deeply([values %hmk], \@v_in_keys_order, 'values - all'); 52} 53