Skip to content

Commit 6b2e75e

Browse files
committed
Add more exhaustive infix metaop tests
1 parent bd04e44 commit 6b2e75e

File tree

1 file changed

+168
-102
lines changed

1 file changed

+168
-102
lines changed

S03-metaops/infix.t

Lines changed: 168 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ my @infixes =
3535
;
3636
my $iterations = @infixes / 3;
3737

38-
plan 60 * $iterations;
38+
plan 162 * $iterations;
3939

4040
=begin pod
4141
@@ -44,115 +44,181 @@ plan 60 * $iterations;
4444
=end pod
4545

4646
for @infixes -> $name, &op, &metaop {
47+
my $a = 1;
48+
my $reset = $a;
49+
my $b = 6;
50+
my $result = op($a, $b);
51+
52+
# $a >>op<< $b
53+
is-deeply $a >>[&op]<< $b, $result, "\$a >>$name\<< \$b";
54+
is-deeply $a <<[&op]<< $b, $result, "\$a <<$name\<< \$b";
55+
is-deeply $a <<[&op]>> $b, $result, "\$a <<$name>> \$b";
56+
is-deeply $a >>[&op]>> $b, $result, "\$a >>$name>> \$b";
57+
58+
# $a >>op=<< $b
59+
is-deeply $a >>[&metaop]<< $b, $result, "\$a >>$name=<< \$b";
60+
is-deeply $a, $result, "\$a assigned from \$a >>$name=<< \$b";
61+
$a = $reset;
62+
is-deeply $a <<[&metaop]<< $b, $result, "\$a <<$name=<< \$b";
63+
is-deeply $a, $result, "\$a assigned from \$a <<$name=<< \$b";
64+
$a = $reset;
65+
is-deeply $a <<[&metaop]>> $b, $result, "\$a <<$name=>> \$b";
66+
is-deeply $a, $result, "\$a assigned from \$a <<$name=>> \$b";
67+
$a = $reset;
68+
is-deeply $a >>[&metaop]>> $b, $result, "\$a >>$name=>> \$b";
69+
is-deeply $a, $result, "\$a assigned from \$a >>$name=>> \$b";
70+
$a = $reset;
71+
72+
# ordinary array initialization
4773
my @a = 1..5;
4874
my @reset = @a;
4975
my @b = 6..10;
50-
51-
# @a >>op<< @b
5276
my @result = (^@a).map: { op(@a[$_], @b[$_]) }
53-
is-deeply @a >>[&op]<< @b, @result, "@a >>$name\<< @b";
54-
is-deeply @a <<[&op]<< @b, @result, "@a <<$name\<< @b";
55-
is-deeply @a <<[&op]>> @b, @result, "@a <<$name>> @b";
56-
is-deeply @a >>[&op]>> @b, @result, "@a >>$name>> @b";
57-
58-
# @a >>op=<< @b
59-
is-deeply @a >>[&metaop]<< @b, @result, "@a >>$name=<< @b";
60-
is-deeply @a, @result, "@a assigned from @a >>$name=<< @b";
61-
@a = @reset;
62-
is-deeply @a <<[&metaop]<< @b, @result, "@a <<$name=<< @b";
63-
is-deeply @a, @result, "@a assigned from @a <<$name=<< @b";
64-
@a = @reset;
65-
is-deeply @a <<[&metaop]>> @b, @result, "@a <<$name=>> @b";
66-
is-deeply @a, @result, "@a assigned from @a <<$name=>> @b";
67-
@a = @reset;
68-
is-deeply @a >>[&metaop]>> @b, @result, "@a >>$name=>> @b";
69-
is-deeply @a, @result, "@a assigned from @a >>$name=>> @b";
70-
@a = @reset;
71-
72-
# @a >>op<< 3
73-
@result = (^@a).map: { op(@a[$_], 3) }
74-
dies-ok { @a >>[&op]<< 3 }, "@a >>$name\<< 3 dies";
75-
dies-ok { @a <<[&op]<< 3 }, "@a <<$name\<< 3 dies";
76-
is-deeply @a <<[&op]>> 3, @result, "@a <<$name>> 3";
77-
is-deeply @a >>[&op]>> 3, @result, "@a >>$name>> 3";
78-
79-
# @a >>op=<< 3
80-
dies-ok { @a >>[&metaop]<< 3 }, "@a >>$name=<< 3 dies";
81-
dies-ok { @a <<[&metaop]<< 3 }, "@a <<$name=<< 3 dies";
82-
is-deeply @a <<[&metaop]>> 3, @result, "@a <<$name=>> 3";
83-
is-deeply @a, @result, "@a assigned from @a <<$name=>> 3";
84-
@a = @reset;
85-
is-deeply @a >>[&metaop]>> 3, @result, "@a >>$name=>> 3";
86-
is-deeply @a, @result, "@a assigned from @a >>$name=>> 3";
87-
@a = @reset;
88-
89-
# 3 >>op<< @a
90-
@result = (^@a).map: { op(3, @a[$_]) }
91-
dies-ok { 3 >>[&op]<< @a }, "3 >>$name\<< @a dies";
92-
dies-ok { 3 >>[&op]>> @a }, "3 >>$name>> @a dies";
93-
is-deeply 3 <<[&op]>> @a, @result, "3 <<$name>> @a";
94-
is-deeply 3 <<[&op]<< @a, @result, "3 <<$name\<< @a";
95-
96-
# 3 >>op=<< @a
97-
dies-ok { 3 >>[&metaop]<< @a }, "3 >>$name=<< @a dies";
98-
dies-ok { 3 >>[&metaop]>> @a }, "3 >>$name=>> @a dies";
99-
dies-ok { 3 <<[&metaop]>> @a }, "3 <<$name=>> @a dies";
100-
dies-ok { 3 <<[&metaop]<< @a }, "3 <<$name=<< @a dies";
101-
77+
my @resultop3 = (^@a).map: { op(@a[$_], 3) }
78+
my @result3op = (^@a).map: { op(3, @a[$_]) }
79+
80+
# typed array initialization
81+
my Cool @ac = 1..5;
82+
my Cool @resetc = @ac;
83+
my Cool @bc = 6..10;
84+
my Cool @resultc = (^@ac).map: { op(@ac[$_], @bc[$_]) }
85+
my Cool @resultop3c = (^@ac).map: { op(@ac[$_], 3) }
86+
my Cool @result3opc = (^@ac).map: { op(3, @ac[$_]) }
87+
88+
for (
89+
@a, @b, @reset, @result, @resultop3, @result3op,
90+
@ac, @bc, @resetc, @resultc, @resultop3c, @result3opc,
91+
92+
) -> @a, @b, @reset, @result, @resultop3, @result3op {
93+
94+
# @a >>op<< @b
95+
is-deeply @a >>[&op]<< @b, @result, "@a >>$name\<< @b";
96+
is-deeply @a <<[&op]<< @b, @result, "@a <<$name\<< @b";
97+
is-deeply @a <<[&op]>> @b, @result, "@a <<$name>> @b";
98+
is-deeply @a >>[&op]>> @b, @result, "@a >>$name>> @b";
99+
100+
# @a >>op=<< @b
101+
is-deeply @a >>[&metaop]<< @b, @result, "@a >>$name=<< @b";
102+
is-deeply @a, @result, "@a assigned from @a >>$name=<< @b";
103+
@a = @reset;
104+
is-deeply @a <<[&metaop]<< @b, @result, "@a <<$name=<< @b";
105+
is-deeply @a, @result, "@a assigned from @a <<$name=<< @b";
106+
@a = @reset;
107+
is-deeply @a <<[&metaop]>> @b, @result, "@a <<$name=>> @b";
108+
is-deeply @a, @result, "@a assigned from @a <<$name=>> @b";
109+
@a = @reset;
110+
is-deeply @a >>[&metaop]>> @b, @result, "@a >>$name=>> @b";
111+
is-deeply @a, @result, "@a assigned from @a >>$name=>> @b";
112+
@a = @reset;
113+
114+
# @a >>op<< 3
115+
dies-ok { @a >>[&op]<< 3 }, "@a >>$name\<< 3 dies";
116+
dies-ok { @a <<[&op]<< 3 }, "@a <<$name\<< 3 dies";
117+
is-deeply @a <<[&op]>> 3, @resultop3, "@a <<$name>> 3";
118+
is-deeply @a >>[&op]>> 3, @resultop3, "@a >>$name>> 3";
119+
120+
# @a >>op=<< 3
121+
dies-ok { @a >>[&metaop]<< 3 }, "@a >>$name=<< 3 dies";
122+
dies-ok { @a <<[&metaop]<< 3 }, "@a <<$name=<< 3 dies";
123+
is-deeply @a <<[&metaop]>> 3, @resultop3, "@a <<$name=>> 3";
124+
is-deeply @a, @resultop3, "@a assigned from @a <<$name=>> 3";
125+
@a = @reset;
126+
is-deeply @a >>[&metaop]>> 3, @resultop3, "@a >>$name=>> 3";
127+
is-deeply @a, @resultop3, "@a assigned from @a >>$name=>> 3";
128+
@a = @reset;
129+
130+
# 3 >>op<< @a
131+
dies-ok { 3 >>[&op]<< @a }, "3 >>$name\<< @a dies";
132+
dies-ok { 3 >>[&op]>> @a }, "3 >>$name>> @a dies";
133+
is-deeply 3 <<[&op]>> @a, @result3op, "3 <<$name>> @a";
134+
is-deeply 3 <<[&op]<< @a, @result3op, "3 <<$name\<< @a";
135+
136+
# 3 >>op=<< @a
137+
dies-ok { 3 >>[&metaop]<< @a }, "3 >>$name=<< @a dies";
138+
dies-ok { 3 >>[&metaop]>> @a }, "3 >>$name=>> @a dies";
139+
dies-ok { 3 <<[&metaop]>> @a }, "3 <<$name=>> @a dies";
140+
dies-ok { 3 <<[&metaop]<< @a }, "3 <<$name=<< @a dies";
141+
}
142+
143+
# ordinary hashes initialization
102144
my %a = "a".."e" Z=> 1..5;
103145
my %reset = %a;
104146
my %b = "a".."e" Z=> 6..10;
105-
106-
# %a >>op<< %b
107147
my %result = %a.map: { .key => op(.value, %b{.key}) }
108-
is-deeply %a >>[&op]<< %b, %result, "%a >>$name\<< %b";
109-
is-deeply %a <<[&op]<< %b, %result, "%a <<$name\<< %b";
110-
is-deeply %a <<[&op]>> %b, %result, "%a <<$name>> %b";
111-
is-deeply %a >>[&op]>> %b, %result, "%a >>$name>> %b";
112-
113-
# %a >>op=<< %b
114-
is-deeply %a >>[&metaop]<< %b, %result, "%a >>$name=<< %b";
115-
is-deeply %a, %result, "%a assigned from %a >>$name=<< %b";
116-
%a = %reset;
117-
is-deeply %a <<[&metaop]<< %b, %result, "%a <<$name=<< %b";
118-
is-deeply %a, %result, "%a assigned from %a <<$name=<< %b";
119-
%a = %reset;
120-
is-deeply %a <<[&metaop]>> %b, %result, "%a <<$name=>> %b";
121-
is-deeply %a, %result, "%a assigned from %a <<$name=>> %b";
122-
%a = %reset;
123-
is-deeply %a >>[&metaop]>> %b, %result, "%a >>$name=>> %b";
124-
is-deeply %a, %result, "%a assigned from %a >>$name=>> %b";
125-
%a = %reset;
126-
127-
# %a >>op<< 3
128-
my %result = %a.map: { .key => op(.value, 3) }
129-
dies-ok { %a >>[&op]<< 3 }, "%a >>$name\<< 3 dies";
130-
dies-ok { %a <<[&op]<< 3 }, "%a <<$name\<< 3 dies";
131-
is-deeply %a <<[&op]>> 3, %result, "%a <<$name>> 3";
132-
is-deeply %a >>[&op]>> 3, %result, "%a >>$name>> 3";
133-
134-
# %a >>op=<< 3
135-
dies-ok { %a >>[&metaop]<< 3 }, "%a >>$name=<< 3 dies";
136-
dies-ok { %a <<[&metaop]<< 3 }, "%a <<$name=<< 3 dies";
137-
is-deeply %a <<[&metaop]>> 3, %result, "%a <<$name=>> 3";
138-
is-deeply %a, %result, "%a assigned from %a <<$name=>> 3";
139-
%a = %reset;
140-
is-deeply %a >>[&metaop]>> 3, %result, "%a >>$name=>> 3";
141-
is-deeply %a, %result, "%a assigned from %a >>$name=>> 3";
142-
%a = %reset;
143-
144-
# 3 >>op<< %a
145-
my %result = %a.map: { .key => op(3, .value) }
146-
dies-ok { 3 >>[&op]<< %a }, "3 >>$name\<< %a dies";
147-
dies-ok { 3 >>[&op]>> %a }, "3 >>$name>> %a dies";
148-
is-deeply 3 <<[&op]>> %a, %result, "3 <<$name>> %a";
149-
is-deeply 3 <<[&op]<< %a, %result, "3 <<$name\<< %a";
150-
151-
# 3 >>op<< %a
152-
dies-ok { 3 >>[&metaop]<< %a }, "3 >>$name=<< %a dies";
153-
dies-ok { 3 >>[&metaop]>> %a }, "3 >>$name=>> %a dies";
154-
dies-ok { 3 <<[&metaop]>> %a }, "3 <<$name=>> %a dies";
155-
dies-ok { 3 <<[&metaop]<< %a }, "3 <<$name=<< %a dies";
148+
my %resultop3 = %a.map: { .key => op(.value, 3) }
149+
my %result3op = %a.map: { .key => op(3, .value) }
150+
151+
# typed hashes initialization
152+
my Cool %ac = %a;
153+
my Cool %resetc = %ac;
154+
my Cool %bc = %b;
155+
my Cool %resultc = %result;
156+
my Cool %resultop3c = %resultop3;
157+
my Cool %result3opc = %result3op;
158+
159+
# object hashes initialization
160+
my %ao{Any} = %a;
161+
my %reseto{Any} = %ao;
162+
my %bo{Any} = %b;
163+
my %resulto{Any} = %result;
164+
my %resultop3o{Any} = %resultop3;
165+
my %result3opo{Any} = %result3op;
166+
167+
for (
168+
%a, %b, %reset, %result, %resultop3, %result3op,
169+
%ac, %bc, %resetc, %resultc, %resultop3c, %result3opc,
170+
%ao, %bo, %reseto, %resulto, %resultop3o, %result3opo,
171+
172+
) -> %a, %b, %reset, %result, %resultop3, %result3op {
173+
174+
# %a >>op<< %b
175+
is-deeply %a >>[&op]<< %b, %result, "%a >>$name\<< %b";
176+
is-deeply %a <<[&op]<< %b, %result, "%a <<$name\<< %b";
177+
is-deeply %a <<[&op]>> %b, %result, "%a <<$name>> %b";
178+
is-deeply %a >>[&op]>> %b, %result, "%a >>$name>> %b";
179+
180+
# %a >>op=<< %b
181+
is-deeply %a >>[&metaop]<< %b, %result, "%a >>$name=<< %b";
182+
is-deeply %a, %result, "%a assigned from %a >>$name=<< %b";
183+
%a = %reset;
184+
is-deeply %a <<[&metaop]<< %b, %result, "%a <<$name=<< %b";
185+
is-deeply %a, %result, "%a assigned from %a <<$name=<< %b";
186+
%a = %reset;
187+
is-deeply %a <<[&metaop]>> %b, %result, "%a <<$name=>> %b";
188+
is-deeply %a, %result, "%a assigned from %a <<$name=>> %b";
189+
%a = %reset;
190+
is-deeply %a >>[&metaop]>> %b, %result, "%a >>$name=>> %b";
191+
is-deeply %a, %result, "%a assigned from %a >>$name=>> %b";
192+
%a = %reset;
193+
194+
# %a >>op<< 3
195+
dies-ok { %a >>[&op]<< 3 }, "%a >>$name\<< 3 dies";
196+
dies-ok { %a <<[&op]<< 3 }, "%a <<$name\<< 3 dies";
197+
is-deeply %a <<[&op]>> 3, %resultop3, "%a <<$name>> 3";
198+
is-deeply %a >>[&op]>> 3, %resultop3, "%a >>$name>> 3";
199+
200+
# %a >>op=<< 3
201+
dies-ok { %a >>[&metaop]<< 3 }, "%a >>$name=<< 3 dies";
202+
dies-ok { %a <<[&metaop]<< 3 }, "%a <<$name=<< 3 dies";
203+
is-deeply %a <<[&metaop]>> 3, %resultop3, "%a <<$name=>> 3";
204+
is-deeply %a, %resultop3, "%a assigned from %a <<$name=>> 3";
205+
%a = %reset;
206+
is-deeply %a >>[&metaop]>> 3, %resultop3, "%a >>$name=>> 3";
207+
is-deeply %a, %resultop3, "%a assigned from %a >>$name=>> 3";
208+
%a = %reset;
209+
210+
# 3 >>op<< %a
211+
dies-ok { 3 >>[&op]<< %a }, "3 >>$name\<< %a dies";
212+
dies-ok { 3 >>[&op]>> %a }, "3 >>$name>> %a dies";
213+
is-deeply 3 <<[&op]>> %a, %result3op, "3 <<$name>> %a";
214+
is-deeply 3 <<[&op]<< %a, %result3op, "3 <<$name\<< %a";
215+
216+
# 3 >>op<< %a
217+
dies-ok { 3 >>[&metaop]<< %a }, "3 >>$name=<< %a dies";
218+
dies-ok { 3 >>[&metaop]>> %a }, "3 >>$name=>> %a dies";
219+
dies-ok { 3 <<[&metaop]>> %a }, "3 <<$name=>> %a dies";
220+
dies-ok { 3 <<[&metaop]<< %a }, "3 <<$name=<< %a dies";
221+
}
156222
}
157223
158224
# vim: ft=perl6

0 commit comments

Comments
 (0)