6 use Test::More tests => 60;
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 $h1d = { 1 => 0.5, die => 0.5 };
16 my $h1le = { 1 => 0.25, list => 0.25, exit => 0.5 };
17 my $h12e = { 1 => 0.25, 2 => 0.25, exit => 0.5 };
18 my $h1ld = { 1 => 0.25, list => 0.25, die => 0.5 };
19 my $h12d = { 1 => 0.25, 2 => 0.25, die => 0.5 };
25 [ [ { }, { } ], undef ],
32 [ [ 2, undef, 3 ], 5 ],
34 [ [ 'list' ], 'list' ],
35 [ [ { 'list' => 1 } ], 'list' ],
36 [ [ 0, 'list' ], 'list' ],
37 [ [ 1, 'list' ], 'list' ],
38 [ [ 1, { 'list' => 1 } ], 'list' ],
39 [ [ 1, undef, 'list' ], 'list' ],
40 [ [ 1, 'list', 2 ], 'list' ],
43 [ [ 1, $h12 ], { 2 => 0.5, 3 => 0.5 } ],
44 [ [ $h12, 2 ], { 3 => 0.5, 4 => 0.5 } ],
45 [ [ $h12, undef, 3 ], { 4 => 0.5, 5 => 0.5 } ],
46 [ [ $h12, 'list' ], 'list' ],
47 [ [ $h12, 3, 'list' ], 'list' ],
48 [ [ $h12, 'list', $h12 ], 'list' ],
49 [ [ 1, 0, $h12, 2, 0 ], { 4 => 0.5, 5 => 0.5 } ],
51 [ [ $h12, $h12 ], { 2 => 0.25, 3 => 0.5, 4 => 0.25 } ],
52 [ [ 1, $h12, $h12 ], { 3 => 0.25, 4 => 0.5, 5 => 0.25 } ],
53 [ [ $h12, 2, $h12 ], { 4 => 0.25, 5 => 0.5, 6 => 0.25 } ],
54 [ [ $h12, $h12, 3 ], { 5 => 0.25, 6 => 0.5, 7 => 0.25 } ],
56 [ [ 1, { %$h1l } ], { 2 => 0.5, 'list' => 0.5 } ],
57 [ [ { %$h1l }, { %$h1l } ], { 2 => 0.25, list => 0.75 } ],
58 [ [ { %$h1l }, 1, { %$h1l } ], { 3 => 0.25, list => 0.75 } ],
60 [ [ 'exit' ], 'exit' ],
61 [ [ 'exit', 1 ], 'exit' ],
62 [ [ { %$h1e }, 1 ], { exit => 0.5, 2 => 0.5 } ],
63 [ [ { %$h1e }, { %$h1e } ], { exit => 0.75, 2 => 0.25 } ],
65 [ [ { %$h1e }, { %$h1l } ], { exit => 0.5, list => 0.25, 2 => 0.25 } ],
66 [ [ { %$h1l }, { %$h1e } ], { exit => 0.5, list => 0.25, 2 => 0.25 } ],
67 [ [ { %$h1l }, { %$h1le } ], { exit => 0.5, list => 0.375, 2 => 0.125 } ],
68 [ [ { %$h1e }, { %$h1le } ], { exit => 0.75, list => 0.125, 2 => 0.125 } ],
71 [ [ 'die', 2 ], 'die' ],
72 [ [ { %$h1d }, 2 ], { die => 0.5, 3 => 0.5 } ],
73 [ [ { %$h1d }, 1 ], { die => 0.5, 2 => 0.5 } ],
74 [ [ { %$h1d }, { %$h1d } ], { die => 0.75, 2 => 0.25 } ],
76 [ [ { %$h1d }, { %$h1l } ], { die => 0.5, list => 0.25, 2 => 0.25 } ],
77 [ [ { %$h1l }, { %$h1d } ], { die => 0.5, list => 0.25, 2 => 0.25 } ],
78 [ [ { %$h1l }, { %$h1ld } ], { die => 0.5, list => 0.375, 2 => 0.125 } ],
79 [ [ { %$h1d }, { %$h1ld } ], { die => 0.75, list => 0.125, 2 => 0.125 } ],
81 [ [ { %$h1e }, { %$h1d } ], { exit => 0.5, die => 0.25, 2 => 0.25 } ],
82 [ [ { %$h1d }, { %$h1e } ], { exit => 0.25, die => 0.5, 2 => 0.25 } ],
83 [ [ { %$h1e }, { %$h1ld } ], { exit => 0.5, die => 0.25,
84 list => 0.125, 2 => 0.125 } ],
85 [ [ { %$h1d }, { %$h1le } ], { exit => 0.25, die => 0.5,
86 list => 0.125, 2 => 0.125 } ],
88 [ [ { %$h12d }, { %$h1le } ], { exit => 0.25, die => 0.5,
89 list => 0.125, 2 => 0.0625, 3 => 0.0625 } ],
90 [ [ { %$h12e }, { %$h1ld } ], { exit => 0.5, die => 0.25,
91 list => 0.125, 2 => 0.0625, 3 => 0.0625 } ],
92 [ [ { %$h1ld }, { %$h12e } ], { exit => 0.25, die => 0.5,
93 list => 0.125, 2 => 0.0625, 3 => 0.0625 } ],
94 [ [ { %$h1le }, { %$h12d } ], { exit => 0.5, die => 0.25,
95 list => 0.125, 2 => 0.0625, 3 => 0.0625 } ],
97 [ [ { %$h1ld }, { %$h1le } ], { exit => 0.25, die => 0.5,
98 list => 0.1875, 2 => 0.0625 } ],
99 [ [ { %$h1le }, { %$h1ld } ], { exit => 0.5, die => 0.25,
100 list => 0.1875, 2 => 0.0625 } ],
102 [ [ $h1l, $h1l ], { 2 => 0.25, list => 0.5 } ], # Side effects
107 my $r = combine(@{$_->[0]});
108 my $exp = (not defined $_->[1] or ref $_->[1]) ? $_->[1] : { $_->[1] => 1 };
109 is_deeply($r, $exp, 'combine test ' . $i);