]> git.vpit.fr Git - perl/modules/Sub-Nary.git/blob - t/16-combine.t
Work in progress
[perl/modules/Sub-Nary.git] / t / 16-combine.t
1 #!perl -T
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 60;
7
8 use Sub::Nary;
9
10 *combine = *Sub::Nary::combine{CODE};
11
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 };
20
21 my @tests = (
22  [ [ ],          undef ],
23  [ [ undef ],    undef ],
24  [ [ { } ],      undef ],
25  [ [ { }, { } ], undef ],
26
27  [ [ 0 ],                0 ],
28  [ [ 1, undef ],         1 ],
29  [ [ undef, 2 ],         2 ],
30  [ [ 0, 1 ],             1 ],
31  [ [ 1, 2 ],             3 ],
32  [ [ 2, undef, 3 ],      5 ],
33
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' ],
41
42  [ [ $h12 ],               $h12 ],
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 } ],
50
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 } ],
55
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 } ],
59
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 } ],
64
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 } ],
69
70  [ [ 'die' ],                 'die' ],
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 } ],
75
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 } ],
80
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 } ],
87
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 } ],
96
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  } ],
101
102  [ [ $h1l, $h1l ],              { 2 => 0.25, list => 0.5 } ], # Side effects
103 );
104
105 my $i = 1;
106 for (@tests) {
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);
110  ++$i;
111 }