]> git.vpit.fr Git - perl/modules/Sub-Nary.git/blob - t/22-call.t
Rewrite normalize in XS
[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 => 42;
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 { hlaghlaghlagh() }, 'list' ],
28
29  [ sub { zero }, 0 ],
30  [ sub { one  }, 1 ],
31  [ sub { two  }, 2 ],
32  [ sub { lots }, 'list' ],
33
34  [ sub { one, zero, two }, 3 ],
35  [ sub { one, lots },      'list' ],
36  [ sub { lots, two },      'list' ],
37
38  [ sub { do { one, do { two } } },  3 ],
39  [ sub { do { lots, do { one } } }, 'list' ],
40
41  [ sub { 1, return two, do { 4 } }, 3 ],
42  [ sub { two 1, return 2 },         1 ],
43
44  [ sub { 1, one(), 2 },   3 ],
45  [ sub { 1, one(), @_ },  'list' ],
46  [ sub { $_[0], two() },  3 ],
47  [ sub { my $x = two() }, 1 ],
48  [ sub { my @a = two() }, 2 ],
49
50  [ sub { 1, do { two, 1 }, do { one }, @_[0, 1] }, 7 ],
51  [ sub { 1, do { two, 1, do { one, @_[0, 1] } } }, 7 ],
52
53  [ sub { $_[0]->what },                'list' ],
54  [ sub { my $m = $_[1]; $_[0]->$m() }, 'list' ],
55  [ sub { $_[0]->() },                  'list' ],
56  [ sub { &two },                       2 ],
57  [ sub { goto &two },                  2 ],
58  [ sub { my $x = $_[0]; goto &$x },    'list' ],
59  [ sub { FOO: goto FOO, 1 },           'list' ],
60
61  [ sub { rec() },                      'list' ],
62  [ sub { rec1() },                     'list' ],
63
64  [ sub { sub { 1, 2 }, 2, 3 },                                      3 ],
65  [ sub { sub { 1, 2 }->() },                                        2 ],
66  [ sub { sub { 1, 2 }->(), 1, 2 },                                  4 ],
67  [ sub { do { sub { 1, 2 } }->(), 3 },                              3 ],
68  [ sub { do { my $x = sub { }; sub { 1, 2 } }->(), 3 },             3 ],
69  [ sub { do { my $x = \&zero; sub { 1, 2 } }->(), 3 },              3 ],
70  [ sub { do { my $x = 1; do { my $y = 2; sub { 1, 2 } } }->(), 3 }, 3 ],
71  [ sub { sub { sub { 1, 2 } }->()->() },                            'list' ],
72  [ sub { sub { sub { 1, 2 }->(), 3 }->(), 4 },                      4 ],
73
74  [ sub { \&zero },          1 ],
75  [ sub { *zero },           1 ],
76  [ sub { *zero{CODE}->() }, 'list' ],
77
78  [ sub { &CORE::GLOBAL::shift }, 'list' ],
79  [ sub { &CORE::GLOBAL::reset }, 3 ],
80 );
81
82 my $i = 1;
83 for (@tests) {
84  my $r = $sn->nary($_->[0]);
85  my $exp = ref $_->[1] ? $_->[1] : { $_->[1] => 1 };
86  is_deeply($r, $exp, 'call test ' . $i);
87  ++$i;
88 }