6 use Test::More tests => 32;
10 my $sn = Sub::Nary->new();
15 return (rand() < 0.1) ? () : 1;
33 return 4, do { 5, 6 };
36 my $exp_2 = { 1 => 0.5, 2 => 0.5 };
38 # { 1 => 0.5, 2 => 0.5 } * 0.5 + { 2 => 0.25, 3 => 0.5, 4 => 0.25 } * 0.5
39 my $exp_22 = { 1 => 0.5 * 0.5, 2 => (0.5 + 0.25) * 0.5, 3 => 0.5 * 0.5, 4 => 0.25 * 0.5 };
41 # { 1 => 0.5, 2 => 0.25, 3 => 0.25 } * 0.5 + { 2 => 0.25, 3 => 0.25, 4 => 0.3125, 5 => 0.125, 6 => 0.0625 } * 0.5
42 my $exp_32 = { 1 => 0.5/2, 2 => (0.25+0.25)/2, 3 => (0.25+0.25)/2, 4 => (0.3125)/2, 5 => (0.125)/2, 6 => (0.0625)/2 };
45 my $exp_23 = { 3 => $b3, 4 => 3 * $b3, 5 => 3 * $b3, 6 => $b3 };
48 [ sub { grep { return 2, 4 } 5 .. 10 }, 2 ],
49 [ sub { grep { $_ > 1 } do { return 2, 4; 5 .. 10 } }, 2 ],
50 [ sub { grep { return 2, 4 } () }, 0 ],
51 [ sub { grep { return $_ ? 2 : (3, 4) } 7 .. 8 }, $exp_2 ],
52 [ sub { grep { return 2 if $_; 3 } 7 .. 8 },
53 { 1 => 0.75, list => 0.25 } ],
54 [ sub { grep { $_ > 1 } do { return $x ? 7 : (8, 9) } }, $exp_2 ],
55 [ sub { grep { return $_ ? 2 : (3, 4) } do { return 3 .. 5 if $x; } },
56 { 3 => 0.5, 1 => 0.25, 2 => 0.25 } ],
57 [ sub { grep { return $_ ? 2 : (3, 4) } do { return 3 .. 5 if $x; () } },
58 { 3 => 0.5, 0 => 0.5 } ],
60 [ sub { map { return 2, 4 } 5 .. 10 }, 2 ],
61 [ sub { map { $_ + 1 } do { return 2, 4; 5 .. 10 } }, 2 ],
62 [ sub { map { return 2, 4 } () }, 0 ],
63 [ sub { map { return $_ ? 2 : (3, 4) } 7 .. 8 }, $exp_2 ],
64 [ sub { map { return 2 if $_; 3 } 7 .. 8 },
65 { 1 => 0.75, 2 => 0.25 } ],
66 [ sub { map { $_ > 1 } do { return $x ? 7 : (8, 9) } }, $exp_2 ],
67 [ sub { map { return $_ ? 2 : (3, 4) } do { return 3 .. 5 if $x; } },
68 { 3 => 0.5, 1 => 0.25, 2 => 0.25 } ],
69 [ sub { map { return $_ ? 2 : (3, 4) } do { return 3 .. 5 if $x; () } },
70 { 3 => 0.5, 0 => 0.5 } ],
72 [ sub { grep { 1 } 1 .. 10 }, 'list' ],
73 [ sub { grep { 1 } @_ }, 'list' ],
74 [ sub { grep { 1 } () }, 0 ],
76 [ sub { map { $_ } 1 .. 3 }, 3 ],
77 [ sub { map { () } @_ }, 0 ],
78 [ sub { map { @_ } () }, 0 ],
79 [ sub { map { @_ } 1, 2 }, 'list' ],
80 [ sub { map { $_ } oneortwo() }, { 1 => 0.5, 2 => 0.5 } ],
81 [ sub { map { $_ ? 7 : (8, 9) } 1 .. 3 }, $exp_23 ],
82 [ sub { map oneortwo, 1 .. 3 }, $exp_23 ],
83 [ sub { map oneortwo, @_ }, 'list' ],
84 [ sub { map zeroorone, @_ }, { 0 => 0.5, list => 0.5 } ],
85 [ sub { map { $_ ? () : 12 } do { $x ? 7 : () } }, { 0 => 0.75, 1 => 0.25 } ],
86 [ sub { map zeroorone, do { $x ? 7 : () } }, { 0 => 0.75, 1 => 0.25 } ],
87 [ sub { map oneortwo, oneortwo }, $exp_22 ],
88 [ sub { map onetwothree, oneortwo }, $exp_32 ],
93 my $r = $sn->nary($_->[0]);
94 my $exp = ref $_->[1] ? $_->[1] : { $_->[1] => 1 };
95 is_deeply($r, $exp, 'grep/map test ' . $i);