6 use Test::More tests => 41;
10 *combine = *Sub::Nary::combine{CODE};
12 my $h12 = { 1 => 0.5, 2 => 0.5 };
13 my $h1l = { 1 => 0.5, list => 0.5 };
14 my $h1e = { 1 => 0.5, exit => 0.5 };
15 my $h1le = { 1 => 0.25, list => 0.25, exit => 0.5 };
21 [ [ { }, { } ], undef ],
28 [ [ 2, undef, 3 ], 5 ],
30 [ [ 'list' ], 'list' ],
31 [ [ { 'list' => 1 } ], 'list' ],
32 [ [ 0, 'list' ], 'list' ],
33 [ [ 1, 'list' ], 'list' ],
34 [ [ 1, { 'list' => 1 } ], 'list' ],
35 [ [ 1, undef, 'list' ], 'list' ],
36 [ [ 1, 'list', 2 ], 'list' ],
39 [ [ 1, $h12 ], { 2 => 0.5, 3 => 0.5 } ],
40 [ [ $h12, 2 ], { 3 => 0.5, 4 => 0.5 } ],
41 [ [ $h12, undef, 3 ], { 4 => 0.5, 5 => 0.5 } ],
42 [ [ $h12, 'list' ], 'list' ],
43 [ [ $h12, 3, 'list' ], 'list' ],
44 [ [ $h12, 'list', $h12 ], 'list' ],
45 [ [ 1, 0, $h12, 2, 0 ], { 4 => 0.5, 5 => 0.5 } ],
47 [ [ $h12, $h12 ], { 2 => 0.25, 3 => 0.5, 4 => 0.25 } ],
48 [ [ 1, $h12, $h12 ], { 3 => 0.25, 4 => 0.5, 5 => 0.25 } ],
49 [ [ $h12, 2, $h12 ], { 4 => 0.25, 5 => 0.5, 6 => 0.25 } ],
50 [ [ $h12, $h12, 3 ], { 5 => 0.25, 6 => 0.5, 7 => 0.25 } ],
52 [ [ 1, { %$h1l } ], { 2 => 0.5, 'list' => 0.5 } ],
53 [ [ { %$h1l }, { %$h1l } ], { 2 => 0.25, list => 0.75 } ],
54 [ [ { %$h1l }, 1, { %$h1l } ], { 3 => 0.25, list => 0.75 } ],
56 [ [ 'exit' ], 'exit' ],
57 [ [ 'exit', 1 ], 'exit' ],
58 [ [ { %$h1e }, 1 ], { exit => 0.5, 2 => 0.5 } ],
59 [ [ { %$h1e }, { %$h1e } ], { exit => 0.75, 2 => 0.25 } ],
60 [ [ { %$h1e }, { %$h1l } ], { exit => 0.5, list => 0.25, 2 => 0.25 } ],
61 [ [ { %$h1l }, { %$h1e } ], { exit => 0.5, list => 0.25, 2 => 0.25 } ],
62 [ [ { %$h1l }, { %$h1le } ], { exit => 0.5, list => 0.375, 2 => 0.125 } ],
63 [ [ { %$h1e }, { %$h1le } ], { exit => 0.75, list => 0.125, 2 => 0.125 } ],
65 [ [ $h1l, $h1l ], { 2 => 0.25, list => 0.5 } ], # Side effects
70 my $r = combine(@{$_->[0]});
71 my $exp = (not defined $_->[1] or ref $_->[1]) ? $_->[1] : { $_->[1] => 1 };
72 is_deeply($r, $exp, 'combine test ' . $i);