]> git.vpit.fr Git - perl/modules/Sub-Nary.git/blob - t/22-call.t
Add tests for delete
[perl/modules/Sub-Nary.git] / t / 22-call.t
1 #!perl -T
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 41;
7
8 use Sub::Nary;
9
10 my $sn = Sub::Nary->new();
11
12 sub CORE::GLOBAL::reset {
13  return 1, 2, 3
14 }
15
16 sub zero { }
17 sub one  { 1 }
18 sub two  { 1, 2 }
19 sub lots { @_ }
20
21 sub rec { rec(); }
22
23 sub rec1 { rec2(); }
24 sub rec2 { rec1(); }
25
26 my @tests = (
27  [ sub { zero }, 0 ],
28  [ sub { one  }, 1 ],
29  [ sub { two  }, 2 ],
30  [ sub { lots }, 'list' ],
31
32  [ sub { one, zero, two }, 3 ],
33  [ sub { one, lots },      'list' ],
34  [ sub { lots, two },      'list' ],
35
36  [ sub { do { one, do { two } } },  3 ],
37  [ sub { do { lots, do { one } } }, 'list' ],
38
39  [ sub { 1, return two, do { 4 } }, 3 ],
40  [ sub { two 1, return 2 },         1 ],
41
42  [ sub { 1, one(), 2 },   3 ],
43  [ sub { 1, one(), @_ },  'list' ],
44  [ sub { $_[0], two() },  3 ],
45  [ sub { my $x = two() }, 1 ],
46  [ sub { my @a = two() }, 2 ],
47
48  [ sub { 1, do { two, 1 }, do { one }, @_[0, 1] }, 7 ],
49  [ sub { 1, do { two, 1, do { one, @_[0, 1] } } }, 7 ],
50
51  [ sub { $_[0]->what },                'list' ],
52  [ sub { my $m = $_[1]; $_[0]->$m() }, 'list' ],
53  [ sub { $_[0]->() },                  'list' ],
54  [ sub { &two },                       2 ],
55  [ sub { goto &two },                  2 ],
56  [ sub { my $x = $_[0]; goto &$x },    'list' ],
57  [ sub { FOO: goto FOO, 1 },           'list' ],
58
59  [ sub { rec() },                      'list' ],
60  [ sub { rec1() },                     'list' ],
61
62  [ sub { sub { 1, 2 }, 2, 3 },                                      3 ],
63  [ sub { sub { 1, 2 }->() },                                        2 ],
64  [ sub { sub { 1, 2 }->(), 1, 2 },                                  4 ],
65  [ sub { do { sub { 1, 2 } }->(), 3 },                              3 ],
66  [ sub { do { my $x = sub { }; sub { 1, 2 } }->(), 3 },             3 ],
67  [ sub { do { my $x = \&zero; sub { 1, 2 } }->(), 3 },              3 ],
68  [ sub { do { my $x = 1; do { my $y = 2; sub { 1, 2 } } }->(), 3 }, 3 ],
69  [ sub { sub { sub { 1, 2 } }->()->() },                            'list' ],
70  [ sub { sub { sub { 1, 2 }->(), 3 }->(), 4 },                      4 ],
71
72  [ sub { \&zero },          1 ],
73  [ sub { *zero },           1 ],
74  [ sub { *zero{CODE}->() }, 'list' ],
75
76  [ sub { &CORE::GLOBAL::shift }, 'list' ],
77  [ sub { &CORE::GLOBAL::reset }, 3 ],
78 );
79
80 my $i = 1;
81 for (@tests) {
82  my $r = $sn->nary($_->[0]);
83  my $exp = ref $_->[1] ? $_->[1] : { $_->[1] => 1 };
84  is_deeply($r, $exp, 'call test ' . $i);
85  ++$i;
86 }