Commit | Line | Data |
abccbe86 |
1 | #!perl |
2 | |
3 | use Test::More tests => 120; |
4 | |
5 | use warnings FATAL => 'all'; |
6 | use strict; |
7 | |
8 | use Function::Parameters { |
9 | method => { |
10 | check_argument_count => 1, |
11 | shift => '$self', |
247cbd51 |
12 | attributes => ':method', |
abccbe86 |
13 | }, |
14 | |
15 | cathod => { |
16 | check_argument_count => 0, |
17 | shift => '$self', |
18 | attrs => ':method', |
19 | }, |
20 | |
21 | fun => 'function', |
22 | }; |
23 | |
24 | fun error_like($re, $body, $name = undef) { |
25 | local $@; |
26 | ok !eval { $body->(); 1 }; |
27 | like $@, $re, $name; |
28 | } |
29 | |
30 | method foo_any { [@_] } |
31 | method foo_any_a(@args) { [@args] } |
32 | method foo_any_b($x = undef, @rest) { [@_] } |
33 | method foo_0() { [@_] } |
34 | method foo_1($x) { [@_] } |
35 | method foo_2($x, $y) { [@_] } |
36 | method foo_3($x, $y, $z) { [@_] } |
37 | method foo_0_1($x = 'D0') { [$x] } |
38 | method foo_0_2($x = 'D0', $y = 'D1') { [$x, $y] } |
39 | method foo_0_3($x = 'D0', $y, $z = 'D2') { [$x, $y, $z] } |
40 | method foo_1_2($x, $y = 'D1') { [$x, $y] } |
41 | method foo_1_3($x, $y = 'D1', $z = 'D2') { [$x, $y, $z] } |
42 | method foo_2_3($x, $y, $z = 'D2') { [$x, $y, $z] } |
43 | method foo_1_($x, @y) { [@_] } |
44 | |
45 | error_like qr/Not enough arguments.*foo_any/, sub { foo_any }; |
46 | is_deeply foo_any('a'), []; |
47 | is_deeply foo_any('a', 'b'), ['b']; |
48 | is_deeply foo_any('a', 'b', 'c'), ['b', 'c']; |
49 | is_deeply foo_any('a', 'b', 'c', 'd'), ['b', 'c', 'd']; |
50 | |
51 | error_like qr/Not enough arguments.*foo_any_a/, sub { foo_any_a }; |
52 | is_deeply foo_any_a('a'), []; |
53 | is_deeply foo_any_a('a', 'b'), ['b']; |
54 | is_deeply foo_any_a('a', 'b', 'c'), ['b', 'c']; |
55 | is_deeply foo_any_a('a', 'b', 'c', 'd'), ['b', 'c', 'd']; |
56 | |
57 | error_like qr/Not enough arguments.*foo_any_b/, sub { foo_any_b }; |
58 | is_deeply foo_any_b('a'), []; |
59 | is_deeply foo_any_b('a', 'b'), ['b']; |
60 | is_deeply foo_any_b('a', 'b', 'c'), ['b', 'c']; |
61 | is_deeply foo_any_b('a', 'b', 'c', 'd'), ['b', 'c', 'd']; |
62 | |
63 | error_like qr/Not enough arguments.*foo_0/, sub { foo_0 }; |
64 | is_deeply foo_0('a'), []; |
65 | error_like qr/Too many arguments.*foo_0/, sub { foo_0 'a', 'b' }; |
66 | error_like qr/Too many arguments.*foo_0/, sub { foo_0 'a', 'b', 'c' }; |
67 | error_like qr/Too many arguments.*foo_0/, sub { foo_0 'a', 'b', 'c', 'd' }; |
68 | |
69 | error_like qr/Not enough arguments.*foo_1/, sub { foo_1 }; |
70 | error_like qr/Not enough arguments.*foo_1/, sub { foo_1 'a' }; |
71 | is_deeply foo_1('a', 'b'), ['b']; |
72 | error_like qr/Too many arguments.*foo_1/, sub { foo_1 'a', 'b', 'c' }; |
73 | error_like qr/Too many arguments.*foo_1/, sub { foo_1 'a', 'b', 'c', 'd' }; |
74 | |
75 | error_like qr/Not enough arguments.*foo_2/, sub { foo_2 }; |
76 | error_like qr/Not enough arguments.*foo_2/, sub { foo_2 'a' }; |
77 | error_like qr/Not enough arguments.*foo_2/, sub { foo_2 'a', 'b' }; |
78 | is_deeply foo_2('a', 'b', 'c'), ['b', 'c']; |
79 | error_like qr/Too many arguments.*foo_2/, sub { foo_2 'a', 'b', 'c', 'd' }; |
80 | |
81 | error_like qr/Not enough arguments.*foo_3/, sub { foo_3 }; |
82 | error_like qr/Not enough arguments.*foo_3/, sub { foo_3 'a' }; |
83 | error_like qr/Not enough arguments.*foo_3/, sub { foo_3 'a', 'b' }; |
84 | error_like qr/Not enough arguments.*foo_3/, sub { foo_3 'a', 'b', 'c' }; |
85 | is_deeply foo_3('a', 'b', 'c', 'd'), ['b', 'c', 'd']; |
86 | error_like qr/Too many arguments.*foo_3/, sub { foo_3 'a', 'b', 'c', 'd', 'e' }; |
87 | |
88 | error_like qr/Not enough arguments.*foo_0_1/, sub { foo_0_1 }; |
89 | is_deeply foo_0_1('a'), ['D0']; |
90 | is_deeply foo_0_1('a', 'b'), ['b']; |
91 | error_like qr/Too many arguments.*foo_0_1/, sub { foo_0_1 'a', 'b', 'c' }; |
92 | error_like qr/Too many arguments.*foo_0_1/, sub { foo_0_1 'a', 'b', 'c', 'd' }; |
93 | |
94 | error_like qr/Not enough arguments.*foo_0_2/, sub { foo_0_2 }; |
95 | is_deeply foo_0_2('a'), ['D0', 'D1']; |
96 | is_deeply foo_0_2('a', 'b'), ['b', 'D1']; |
97 | is_deeply foo_0_2('a', 'b', 'c'), ['b', 'c']; |
98 | error_like qr/Too many arguments.*foo_0_2/, sub { foo_0_2 'a', 'b', 'c', 'd' }; |
99 | |
100 | error_like qr/Not enough arguments.*foo_0_3/, sub { foo_0_3 }; |
101 | is_deeply foo_0_3('a'), ['D0', undef, 'D2']; |
102 | is_deeply foo_0_3('a', 'b'), ['b', undef, 'D2']; |
103 | is_deeply foo_0_3('a', 'b', 'c'), ['b', 'c', 'D2']; |
104 | is_deeply foo_0_3('a', 'b', 'c', 'd'), ['b', 'c', 'd']; |
105 | error_like qr/Too many arguments.*foo_0_3/, sub { foo_0_3 'a', 'b', 'c', 'd', 'e' }; |
106 | |
107 | error_like qr/Not enough arguments.*foo_1_2/, sub { foo_1_2 }; |
108 | error_like qr/Not enough arguments.*foo_1_2/, sub { foo_1_2 'a' }; |
109 | is_deeply foo_1_2('a', 'b'), ['b', 'D1']; |
110 | is_deeply foo_1_2('a', 'b', 'c'), ['b', 'c']; |
111 | error_like qr/Too many arguments.*foo_1_2/, sub { foo_1_2 'a', 'b', 'c', 'd' }; |
112 | |
113 | error_like qr/Not enough arguments.*foo_1_3/, sub { foo_1_3 }; |
114 | error_like qr/Not enough arguments.*foo_1_3/, sub { foo_1_3 'a' }; |
115 | is_deeply foo_1_3('a', 'b'), ['b', 'D1', 'D2']; |
116 | is_deeply foo_1_3('a', 'b', 'c'), ['b', 'c', 'D2']; |
117 | is_deeply foo_1_3('a', 'b', 'c', 'd'), ['b', 'c', 'd']; |
118 | error_like qr/Too many arguments.*foo_1_3/, sub { foo_1_3 'a', 'b', 'c', 'd', 'e' }; |
119 | |
120 | error_like qr/Not enough arguments.*foo_2_3/, sub { foo_2_3 }; |
121 | error_like qr/Not enough arguments.*foo_2_3/, sub { foo_2_3 'a' }; |
122 | error_like qr/Not enough arguments.*foo_2_3/, sub { foo_2_3 'a', 'b' }; |
123 | is_deeply foo_2_3('a', 'b', 'c'), ['b', 'c', 'D2']; |
124 | is_deeply foo_2_3('a', 'b', 'c', 'd'), ['b', 'c', 'd']; |
125 | error_like qr/Too many arguments.*foo_2_3/, sub { foo_2_3 'a', 'b', 'c', 'd', 'e' }; |
126 | |
127 | error_like qr/Not enough arguments.*foo_1_/, sub { foo_1_ }; |
128 | error_like qr/Not enough arguments.*foo_1_/, sub { foo_1_ 'a' }; |
129 | is_deeply foo_1_('a', 'b'), ['b']; |
130 | is_deeply foo_1_('a', 'b', 'c'), ['b', 'c']; |
131 | is_deeply foo_1_('a', 'b', 'c', 'd'), ['b', 'c', 'd']; |
132 | |
133 | |
134 | cathod puppy($eyes) { [@_] } |
135 | cathod frog($will, $never) { $will * 3 + (pop) - $never } |
136 | |
137 | is_deeply puppy, []; |
138 | is_deeply puppy('a'), []; |
139 | is_deeply puppy('a', 'b'), ['b']; |
140 | is_deeply puppy('a', 'b', 'c'), ['b', 'c']; |
141 | is_deeply puppy('a', 'b', 'c', 'd'), ['b', 'c', 'd']; |
142 | |
143 | is +main->frog(7, 4, 1), 18; |
144 | is +main->frog(7, 4), 21; |