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