/
positional.t
260 lines (251 loc) · 14.7 KB
/
positional.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
use v6;
use lib 't/spec/packages';
use Test;
use Test::Assuming;
plan 229;
is-primed-sig(sub () { }, :(), );
is-primed-sig(sub ($a) { }, :(), 1);
is-primed-sig(sub ($a, $b) { }, :($b), 1);
is-primed-sig(sub ($a?) { }, :(), 1);
is-primed-sig(sub ($a, $b?) { }, :($b?), 1);
is-primed-sig(sub ($a?, $b?) { }, :($b?), 1);
is-primed-sig(sub ($a = 2) { }, :(), 1);
is-primed-sig(sub ($a = 4, $b = 2) { }, :($b?), 1);
is-primed-sig(sub ($a where { True }, $b where { True }) { }, :($b), 1);
is-primed-sig(sub ($a where { True } = 4, $b where { True } = 2) { }, :($b?), 1);
is-primed-sig(sub ($a is raw) { }, :(), 1);
is-primed-sig(sub ($a is raw = 4, $b is raw = 4) { }, :($b? is raw), 1);
is-primed-sig(sub ($a is raw where { True }, $b is raw where { True }) { }, :($b is raw), 1);
is-primed-sig(sub ($a is raw where { True } = 4, $b is raw where { True } = 2) { }, :($b? is raw), 1);
is-primed-sig(sub ($a is copy) { }, :(), 1);
is-primed-sig(sub ($a is copy = 4, $b is copy = 4) { }, :($b? is copy), 1);
is-primed-sig(sub ($a is copy where { True }, $b is copy where { True }) { }, :($b is copy), 1);
is-primed-sig(sub ($a is copy where { True } = 4, $b is copy where { True } = 2) { }, :($b? is copy), 1);
is-primed-sig(sub ($a is rw) { }, :(), 1);
is-primed-sig(sub ($a is rw where { True }, $b is rw where { True }) { }, :($b is rw), 1);
is-primed-sig(sub ($a, $b) { }, :($b), Nil);
is-primed-sig(sub ($a, $b) { }, :($a), *, 2);
is-primed-sig(sub ($a, $b, $c) { }, :($b), 1, *, 3);
is-primed-sig(sub ($a) { }, :($a), *);
is-primed-sig(sub ($) { }, :(), 1);
is-primed-sig(sub ($, $b) { }, :($b), 1);
is-primed-sig(sub ($?) { }, :(), 1);
is-primed-sig(sub ($, $b?) { }, :($b?), 1);
is-primed-sig(sub ($?, $b?) { }, :($b?), 1);
is-primed-sig(sub ($ = 2) { }, :(), 1);
is-primed-sig(sub ($ = 4, $b = 2) { }, :($b?), 1);
is-primed-sig(sub ($ where { True }, $ where { True }) { }, :($), 1);
is-primed-sig(sub ($ where { True } = 4, $ where { True } = 2) { }, :($?), 1);
is-primed-sig(sub ($ is raw) { }, :(), 1);
is-primed-sig(sub ($ is raw = 4, $ is raw = 4) { }, :($? is raw), 1);
is-primed-sig(sub ($ is raw where { True }, $ is raw where { True }) { }, :($ is raw), 1);
is-primed-sig(sub ($ is raw where { True } = 4, $ is raw where { True } = 2) { }, :($? is raw), 1);
is-primed-sig(sub ($ is copy) { }, :(), 1);
is-primed-sig(sub ($ is copy = 4, $ is copy = 4) { }, :($? is copy), 1);
is-primed-sig(sub ($ is copy where { True }, $ is copy where { True }) { }, :($ is copy), 1);
is-primed-sig(sub ($ is copy where { True } = 4, $ is copy where { True } = 2) { }, :($? is copy), 1);
is-primed-sig(sub ($ is rw) { }, :(), 1);
is-primed-sig(sub ($ is rw where { True }, $ is rw where { True }) { }, :($ is rw), 1);
is-primed-sig(sub ($, $b) { }, :($b), Nil);
is-primed-sig(sub ($, $b) { }, :($), *, 2);
is-primed-sig(sub ($, $b, $c) { }, :($b), 1, *, 3);
is-primed-sig(sub ($) { }, :($), *);
is-primed-sig(sub ($, $) { }, :($), 1);
is-primed-sig(sub ($, $?) { }, :($?), 1);
is-primed-sig(sub ($?, $?) { }, :($?), 1);
is-primed-sig(sub ($ = 2) { }, :(), 1);
is-primed-sig(sub ($ = 4, $ = 2) { }, :($?), 1);
is-primed-sig(sub ($, $) { }, :($), Nil);
is-primed-sig(sub ($, $) { }, :($), *, 2);
is-primed-sig(sub ($, $b, $) { }, :($b), 1, *, 3);
is-primed-sig(sub ($, $, $) { }, :($), 1, *, 3);
is-primed-sig(sub ($, 2) { }, :(Int $), 1);
is-primed-sig(sub (Int $a, Int $b) { }, :(Int $b), 1);
is-primed-sig(sub (Int $, Int $b) { }, :(Int $b), 1);
is-primed-sig(sub (Int $, Int $) { }, :(Int $), 1);
is-primed-sig(sub (Int $a, Int $) { }, :(Int $), 1);
is-primed-sig(sub (Int $a, Str $b) { }, :(Str $b), 1);
is-primed-sig(sub (Int $, Str $b) { }, :(Str $b), 1);
is-primed-sig(sub (Int $, Str $) { }, :(Str $), 1);
is-primed-sig(sub (Int $a, Str $) { }, :(Str $), 1);
is-primed-sig(sub (Int $a, Int $) { }, :(Int $), Nil);
is-primed-sig(sub (Int $a, Str $b) { }, :(Int $a), *, "a");
is-primed-sig(sub (Int $, Str $b) { }, :(Int $), *, "a");
is-primed-sig(sub (Int $, Str $) { }, :(Int $), *, "a");
is-primed-sig(sub (Int $a, Str $) { }, :(Int $a), *, "a");
is-primed-sig(sub (Int $a, Str $) { }, :(), 1, Nil);
is-primed-sig(sub (Str(Int) $a, Str(Int) $b) { }, :(Str(Int) $b), 1);
is-primed-sig(sub (Str(Int) $, Str(Int) $b) { }, :(Str(Int) $b), 1);
is-primed-sig(sub (Str(Int) $, Str(Int) $) { }, :(Str(Int) $), 1);
is-primed-sig(sub (Str(Int) $a, Str(Int) $) { }, :(Str(Int) $), 1);
is-primed-sig(sub (int8 $a, int8 $b) { }, :(int8 $b), 1);
is-primed-sig(sub (int8 $, int8 $b) { }, :(int8 $b), 1);
is-primed-sig(sub (int8 $, int8 $) { }, :(int8 $), 1);
is-primed-sig(sub (int8 $a, int8 $) { }, :(int8 $), 1);
my $XAH = X::AdHoc.new(:payload<foo>);
is-primed-sig(sub (X::AdHoc $a, X::AdHoc $b) { }, :(X::AdHoc $b), $XAH);
is-primed-sig(sub (X::AdHoc $, X::AdHoc $b) { }, :(X::AdHoc $b), $XAH);
is-primed-sig(sub (X::AdHoc $, X::AdHoc $) { }, :(X::AdHoc $), $XAH);
is-primed-sig(sub (X::AdHoc $a, X::AdHoc $) { }, :(X::AdHoc $), $XAH);
my Int @AoI = 1,2;
my Str @AoS = <a b>;
my int8 @aoi8 = 1,2;
my X::AdHoc @AoXAH = $XAH,$XAH;
my Array[Int] @AoAoI = $@AoI,$@AoI;
my Array[X::AdHoc] @AoAoXAH = $@AoXAH,$@AoXAH;
is-primed-sig(sub (Array[Str] $a, Array[Int] $b) { }, :(Array[Int] $b), $@AoS);
is-primed-sig(sub (Array[Str] $, Array[Int] $b) { }, :(Array[Int] $b), $@AoS);
is-primed-sig(sub (Array[Str] $, Array[Int] $) { }, :(Array[Int] $), $@AoS);
is-primed-sig(sub (Array[Str] $a, Array[Int] $) { }, :(Array[Int] $), $@AoS);
is-primed-sig(sub (Array[Str] $a, Array[Int] $b) { }, :(Array[Str] $a), *, $@AoI);
is-primed-sig(sub (Array[Str] $, Array[Int] $b) { }, :(Array[Str] $), *, $@AoI);
is-primed-sig(sub (Array[Str] $, Array[Int] $) { }, :(Array[Str] $), *, $@AoI);
is-primed-sig(sub (Array[Str] $a, Array[Int] $) { }, :(Array[Str] $a), *, $@AoI);
is-primed-sig(sub (Array[X::AdHoc] $a, Array[X::AdHoc] $b) { }, :(Array[X::AdHoc] $b), $@AoXAH);
is-primed-sig(sub (Array[X::AdHoc] $, Array[X::AdHoc] $b) { }, :(Array[X::AdHoc] $b), $@AoXAH);
is-primed-sig(sub (Array[X::AdHoc] $, Array[X::AdHoc] $) { }, :(Array[X::AdHoc] $), $@AoXAH);
is-primed-sig(sub (Array[X::AdHoc] $a, Array[X::AdHoc] $) { }, :(Array[X::AdHoc] $), $@AoXAH);
is-primed-sig(sub (Array[Array[Int]] $a, Array[Array[Int]] $b) { }, :(Array[Array[Int]] $b), $@AoAoI);
is-primed-sig(sub (Array[Array[Int]] $, Array[Array[Int]] $b) { }, :(Array[Array[Int]] $b), $@AoAoI);
is-primed-sig(sub (Array[Array[Int]] $, Array[Array[Int]] $) { }, :(Array[Array[Int]] $), $@AoAoI);
is-primed-sig(sub (Array[Array[Int]] $a, Array[Array[Int]] $) { }, :(Array[Array[Int]] $), $@AoAoI);
is-primed-sig(sub (Array[Array[X::AdHoc]] $a, Array[Array[X::AdHoc]] $b) { }, :(Array[Array[X::AdHoc]] $b), $@AoAoXAH);
is-primed-sig(sub (Array[Array[X::AdHoc]] $, Array[Array[X::AdHoc]] $b) { }, :(Array[Array[X::AdHoc]] $b), $@AoAoXAH);
is-primed-sig(sub (Array[Array[X::AdHoc]] $, Array[Array[X::AdHoc]] $) { }, :(Array[Array[X::AdHoc]] $), $@AoAoXAH);
is-primed-sig(sub (Array[Array[X::AdHoc]] $a, Array[Array[X::AdHoc]] $) { }, :(Array[Array[X::AdHoc]] $), $@AoAoXAH);
is-primed-sig(sub (@a) { }, :(), $[1]);
is-primed-sig(sub (@a, @b) { }, :(@b), $[1]);
is-primed-sig(sub (@a?) { }, :(), $[1]);
is-primed-sig(sub (@a, @b?) { }, :(@b?), $[1]);
is-primed-sig(sub (@a?, @b?) { }, :(@b?), $[1]);
is-primed-sig(sub (@a = 2) { }, :(), $[1]);
is-primed-sig(sub (@a = 4, @b = 2) { }, :(@b?), $[1]);
is-primed-sig(sub (@a, @b) { }, :(@b), Nil);
is-primed-sig(sub (@a, @b) { }, :(@a), *, $[2]);
is-primed-sig(sub (@a, @b, $c) { }, :(@b), $[1], *, $[3]);
is-primed-sig(sub (@a) { }, :(@a), *);
is-primed-sig(sub (@) { }, :(), $[1]);
is-primed-sig(sub (@, @b) { }, :(@b), $[1]);
is-primed-sig(sub (@?) { }, :(), $[1]);
is-primed-sig(sub (@, @b?) { }, :(@b?), $[1]);
is-primed-sig(sub (@?, @b?) { }, :(@b?), $[1]);
is-primed-sig(sub (@ = 2) { }, :(), $[1]);
is-primed-sig(sub (@ = 4, @b = 2) { }, :(@b?), $[1]);
is-primed-sig(sub (@, @b) { }, :(@b), Nil);
is-primed-sig(sub (@, @b) { }, :(@), *, $[2]);
is-primed-sig(sub (@, @b, @c) { }, :(@b), $[1], *, $[3]);
is-primed-sig(sub (@) { }, :(@), *);
is-primed-sig(sub (@, @) { }, :(@), $[1]);
is-primed-sig(sub (@, @?) { }, :(@?), $[1]);
is-primed-sig(sub (@?, @?) { }, :(@?), $[1]);
is-primed-sig(sub (@ = 2) { }, :(), $[1]);
is-primed-sig(sub (@ = 4, @ = 2) { }, :(@?), $[1]);
is-primed-sig(sub (@, @) { }, :(@), Nil);
is-primed-sig(sub (@, @) { }, :(@), *, $[2]);
is-primed-sig(sub (@, @b, @) { }, :(@b), $[1], *, $[3]);
is-primed-sig(sub (@, @, @) { }, :(@), $[1], *, $[3]);
is-primed-sig(sub (@, [2]) { }, :(@), $[1]);
is-primed-sig(sub (Int @a, Int @b) { }, :(Int @b), $@AoI);
is-primed-sig(sub (Int @, Int @b) { }, :(Int @b), $@AoI);
is-primed-sig(sub (Int @, Int @) { }, :(Int @), $@AoI);
is-primed-sig(sub (Int @a, Int @) { }, :(Int @), $@AoI);
is-primed-sig(sub (Int @a, Str @b) { }, :(Str @b), $@AoI);
is-primed-sig(sub (Int @, Str @b) { }, :(Str @b), $@AoI);
is-primed-sig(sub (Int @, Str @) { }, :(Str @), $@AoI);
is-primed-sig(sub (Int @a, Str @) { }, :(Str @), $@AoI);
is-primed-sig(sub (Int @a, Str @b) { }, :(Int @a), *, $@AoS);
is-primed-sig(sub (Int @, Str @b) { }, :(Int @), *, $@AoS);
is-primed-sig(sub (Int @, Str @) { }, :(Int @), *, $@AoS);
is-primed-sig(sub (Int @a, Str @) { }, :(Int @a), *, $@AoS);
is-primed-sig(sub (Str(Int) @a, Str(Int) @b) { }, :(Str(Int) @b), $@AoI);
is-primed-sig(sub (Str(Int) @, Str(Int) @b) { }, :(Str(Int) @b), $@AoI);
is-primed-sig(sub (Str(Int) @, Str(Int) @) { }, :(Str(Int) @), $@AoI);
is-primed-sig(sub (Str(Int) @a, Str(Int) @) { }, :(Str(Int) @), $@AoI);
is-primed-sig(sub (int8 @a, int8 @b) { }, :(int8 @b), $@aoi8);
is-primed-sig(sub (int8 @, int8 @b) { }, :(int8 @b), $@aoi8);
is-primed-sig(sub (int8 @, int8 @) { }, :(int8 @), $@aoi8);
is-primed-sig(sub (int8 @a, int8 @) { }, :(int8 @), $@aoi8);
is-primed-sig(sub (Array[X::AdHoc] @a, Array[X::AdHoc] @b) { }, :(Array[X::AdHoc] @b), $@AoAoXAH);
is-primed-sig(sub (Array[X::AdHoc] @, Array[X::AdHoc] @b) { }, :(Array[X::AdHoc] @b), $@AoAoXAH);
is-primed-sig(sub (Array[X::AdHoc] @, Array[X::AdHoc] @) { }, :(Array[X::AdHoc] @), $@AoAoXAH);
is-primed-sig(sub (Array[X::AdHoc] @a, Array[X::AdHoc] @) { }, :(Array[X::AdHoc] @), $@AoAoXAH);
is-primed-sig(sub (Array[Str] @a, Array[Int] @b) { }, :(Array[Str] @a), *, $@AoAoI);
is-primed-sig(sub (Array[Str] @, Array[Int] @b) { }, :(Array[Str] @), *, $@AoAoI);
is-primed-sig(sub (Array[Str] @, Array[Int] @) { }, :(Array[Str] @), *, $@AoAoI);
is-primed-sig(sub (Array[Str] @a, Array[Int] @) { }, :(Array[Str] @a), *, $@AoAoI);
my X::AdHoc %HoXAH = a => $XAH, b => $XAH;
my Int %HoI = a => 1, b => 2;
my Str %HoS = a => 'A', b => 'B';
my Array[Int] %HoAoI = a => $@AoI, b => $@AoI;
my Hash[X::AdHoc] %HoHoXAH = a => $%HoXAH, b=> $%HoXAH;
is-primed-sig(sub (%a) { }, :(), {:1a,:2b}.item);
is-primed-sig(sub (%a, %b) { }, :(%b), {:1a,:2b}.item);
is-primed-sig(sub (%a?) { }, :(), {:1a,:2b}.item);
is-primed-sig(sub (%a, %b?) { }, :(%b?), {:1a,:2b}.item);
is-primed-sig(sub (%a?, %b?) { }, :(%b?), {:1a,:2b}.item);
is-primed-sig(sub (%a = 2) { }, :(), {:1a,:2b}.item);
is-primed-sig(sub (%a = 4, %b = 2) { }, :(%b?), {:1a,:2b}.item);
is-primed-sig(sub (%a, %b) { }, :(%b), Nil);
is-primed-sig(sub (%a, %b) { }, :(%a), *, {:2b}.item);
is-primed-sig(sub (%a, %b, $c) { }, :(%b), {:1a,:2b}.item, *, {:3c}.item);
is-primed-sig(sub (%a) { }, :(%a), *);
is-primed-sig(sub (%) { }, :(), {:1a,:2b}.item);
is-primed-sig(sub (%, %b) { }, :(%b), {:1a,:2b}.item);
is-primed-sig(sub (%?) { }, :(), {:1a,:2b}.item);
is-primed-sig(sub (%, %b?) { }, :(%b?), {:1a,:2b}.item);
is-primed-sig(sub (%?, %b?) { }, :(%b?), {:1a,:2b}.item);
is-primed-sig(sub (% = 2) { }, :(), {:1a,:2b}.item);
is-primed-sig(sub (% = 4, %b = 2) { }, :(%b?), {:1a,:2b}.item);
is-primed-sig(sub (%, %b) { }, :(%b), Nil);
is-primed-sig(sub (%, %b) { }, :(%), *, {:2b}.item);
is-primed-sig(sub (%, %b, %c) { }, :(%b), {:1a,:2b}.item, *, {:3c}.item);
is-primed-sig(sub (%) { }, :(%), *);
is-primed-sig(sub (%, %) { }, :(%), {:1a,:2b}.item);
is-primed-sig(sub (%, %?) { }, :(%?), {:1a,:2b}.item);
is-primed-sig(sub (%?, %?) { }, :(%?), {:1a,:2b}.item);
is-primed-sig(sub (% = 2) { }, :(), {:1a,:2b}.item);
is-primed-sig(sub (% = 4, % = 2) { }, :(%?), {:1a,:2b}.item);
is-primed-sig(sub (%, %) { }, :(%), Nil);
is-primed-sig(sub (%, %) { }, :(%), *, {:2b}.item);
is-primed-sig(sub (%, %b, %) { }, :(%b), {:1a,:2b}.item, *, {:3c}.item);
is-primed-sig(sub (%, %, %) { }, :(%), {:1a,:2b}.item, *, {:3c}.item);
is-primed-sig(sub (Int %a, Int %b) { }, :(Int %b), $%HoI);
is-primed-sig(sub (Int %, Int %b) { }, :(Int %b), $%HoI);
is-primed-sig(sub (Int %, Int %) { }, :(Int %), $%HoI);
is-primed-sig(sub (Int %a, Int %) { }, :(Int %), $%HoI);
is-primed-sig(sub (Int %a, Str %b) { }, :(Str %b), $%HoI);
is-primed-sig(sub (Int %, Str %b) { }, :(Str %b), $%HoI);
is-primed-sig(sub (Int %, Str %) { }, :(Str %), $%HoI);
is-primed-sig(sub (Int %a, Str %) { }, :(Str %), $%HoI);
is-primed-sig(sub (Int %a, Str %b) { }, :(Int %a), *, $%HoS);
is-primed-sig(sub (Int %, Str %b) { }, :(Int %), *, $%HoS);
is-primed-sig(sub (Int %, Str %) { }, :(Int %), *, $%HoS);
is-primed-sig(sub (Int %a, Str %) { }, :(Int %a), *, $%HoS);
is-primed-sig(sub (Str(Int) %a, Str(Int) %b) { }, :(Str(Int) %b), $%HoI);
is-primed-sig(sub (Str(Int) %, Str(Int) %b) { }, :(Str(Int) %b), $%HoI);
is-primed-sig(sub (Str(Int) %, Str(Int) %) { }, :(Str(Int) %), $%HoI);
is-primed-sig(sub (Str(Int) %a, Str(Int) %) { }, :(Str(Int) %), $%HoI);
is-primed-sig(sub (Hash[X::AdHoc] %a, Hash[X::AdHoc] %b) { }, :(Hash[X::AdHoc] %b), $%HoHoXAH);
is-primed-sig(sub (Hash[X::AdHoc] %, Hash[X::AdHoc] %b) { }, :(Hash[X::AdHoc] %b), $%HoHoXAH);
is-primed-sig(sub (Hash[X::AdHoc] %, Hash[X::AdHoc] %) { }, :(Hash[X::AdHoc] %), $%HoHoXAH);
is-primed-sig(sub (Hash[X::AdHoc] %a, Hash[X::AdHoc] %) { }, :(Hash[X::AdHoc] %), $%HoHoXAH);
is-primed-sig(sub (Array[Str] %a, Array[Int] %b) { }, :(Array[Str] %a), *, $%HoAoI);
is-primed-sig(sub (Array[Str] %, Array[Int] %b) { }, :(Array[Str] %), *, $%HoAoI);
is-primed-sig(sub (Array[Str] %, Array[Int] %) { }, :(Array[Str] %), *, $%HoAoI);
is-primed-sig(sub (Array[Str] %a, Array[Int] %) { }, :(Array[Str] %a), *, $%HoAoI);
priming-fails-bind-ok(sub (Str $a) { }, '$a', Str, 1);
priming-fails-bind-ok(sub (Int(Str) $a) { }, '$a', Str, 1);
priming-fails-bind-ok(sub ($a) { }, "", "Too many positionals", 1, 2);
sub abc123 ($a,$b,$c,$o,$t,$th) { $a,$b,$c,$o,$t,$th; }
proto testsubproto ($x, $y) {*}
multi testsubproto (Str $x, $y) { "Str + $y" }
multi testsubproto (Int $x, $y) { "Int + $y" }
is-primed-call(&abc123, \(1,2,3), ['a','b','c',1,2,3], 'a','b','c');
is-primed-call(-> Str $a { $a.WHAT }, \(), $[Str], Nil);
is-primed-call(&testsubproto, \(43), $["Int + 43"], 42);
is-primed-call(&testsubproto, \(44), $["Str + 44"], "a Str");
is-primed-call(&atan2, \(2), $[atan2(1,2)],1);
is-primed-call(&atan2, \(1), $[atan2(1,2)],*,2);
# RT#126332
is-primed-call(&substr, \(0,2), $[substr("hello world", 0, 2)], "hello world");
is-primed-call(sub (*@x) { @x.perl }, \("c","d","e"), $[sub (*@x) { @x.perl }("a","b","c","d","e")], "a", "b");