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