D'oh. Don't turn on warnings on the #! line without actually testing
[p5sagit/p5-mst-13.2.git] / ext / B / t / f_map.t
CommitLineData
cc02ea56 1#!perl
2
3BEGIN {
4 chdir q(t);
5 @INC = qw(../lib ../ext/B/t);
6 require q(./test.pl);
7}
8use OptreeCheck;
9plan tests => 9;
10
11
12=for gentest
13
14# chunk: #!perl
15# examples shamelessly snatched from perldoc -f map
16
17=cut
18
19=for gentest
20
21# chunk: # translates a list of numbers to the corresponding characters.
22@chars = map(chr, @nums);
23
24=cut
25
26checkOptree(note => q{},
27 bcopts => q{-exec},
28 code => q{@chars = map(chr, @nums); },
29 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
30# 1 <;> nextstate(main 475 (eval 10):1) v
31# 2 <0> pushmark s
32# 3 <0> pushmark s
33# 4 <#> gv[*nums] s
34# 5 <1> rv2av[t7] lKM/1
35# 6 <@> mapstart lK
36# 7 <|> mapwhile(other->8)[t8] lK
37# 8 <#> gvsv[*_] s
38# 9 <1> chr[t5] sK/1
39# goto 7
40# a <0> pushmark s
41# b <#> gv[*chars] s
42# c <1> rv2av[t2] lKRM*/1
43# d <2> aassign[t9] KS/COMMON
44# e <1> leavesub[1 ref] K/REFC,1
45EOT_EOT
46# 1 <;> nextstate(main 559 (eval 15):1) v
47# 2 <0> pushmark s
48# 3 <0> pushmark s
49# 4 <$> gv(*nums) s
50# 5 <1> rv2av[t4] lKM/1
51# 6 <@> mapstart lK
52# 7 <|> mapwhile(other->8)[t5] lK
53# 8 <$> gvsv(*_) s
54# 9 <1> chr[t3] sK/1
55# goto 7
56# a <0> pushmark s
57# b <$> gv(*chars) s
58# c <1> rv2av[t1] lKRM*/1
59# d <2> aassign[t6] KS/COMMON
60# e <1> leavesub[1 ref] K/REFC,1
61EONT_EONT
62
63
64=for gentest
65
66# chunk: %hash = map { getkey($_) => $_ } @array;
67
68=cut
69
70checkOptree(note => q{},
71 bcopts => q{-exec},
72 code => q{%hash = map { getkey($_) => $_ } @array; },
73 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
74# 1 <;> nextstate(main 476 (eval 10):1) v
75# 2 <0> pushmark s
76# 3 <0> pushmark s
77# 4 <#> gv[*array] s
78# 5 <1> rv2av[t8] lKM/1
79# 6 <@> mapstart lK*
80# 7 <|> mapwhile(other->8)[t9] lK
81# 8 <0> enter l
82# 9 <;> nextstate(main 475 (eval 10):1) v
83# a <0> pushmark s
84# b <0> pushmark s
85# c <#> gvsv[*_] s
86# d <#> gv[*getkey] s/EARLYCV
87# e <1> entersub[t5] lKS/TARG,1
88# f <#> gvsv[*_] s
89# g <@> list lK
90# h <@> leave lKP
91# goto 7
92# i <0> pushmark s
93# j <#> gv[*hash] s
94# k <1> rv2hv[t2] lKRM*/1
95# l <2> aassign[t10] KS/COMMON
96# m <1> leavesub[1 ref] K/REFC,1
97EOT_EOT
98# 1 <;> nextstate(main 560 (eval 15):1) v
99# 2 <0> pushmark s
100# 3 <0> pushmark s
101# 4 <$> gv(*array) s
102# 5 <1> rv2av[t3] lKM/1
103# 6 <@> mapstart lK*
104# 7 <|> mapwhile(other->8)[t4] lK
105# 8 <0> enter l
106# 9 <;> nextstate(main 559 (eval 15):1) v
107# a <0> pushmark s
108# b <0> pushmark s
109# c <$> gvsv(*_) s
110# d <$> gv(*getkey) s/EARLYCV
111# e <1> entersub[t2] lKS/TARG,1
112# f <$> gvsv(*_) s
113# g <@> list lK
114# h <@> leave lKP
115# goto 7
116# i <0> pushmark s
117# j <$> gv(*hash) s
118# k <1> rv2hv[t1] lKRM*/1
119# l <2> aassign[t5] KS/COMMON
120# m <1> leavesub[1 ref] K/REFC,1
121EONT_EONT
122
123
124=for gentest
125
126# chunk: {
127 %hash = ();
128 foreach $_ (@array) {
129 $hash{getkey($_)} = $_;
130 }
131}
132
133=cut
134
135checkOptree(note => q{},
136 bcopts => q{-exec},
137 code => q{{ %hash = (); foreach $_ (@array) { $hash{getkey($_)} = $_; } } },
138 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
139# 1 <;> nextstate(main 478 (eval 10):1) v
140# 2 <{> enterloop(next->u last->u redo->3)
141# 3 <;> nextstate(main 475 (eval 10):1) v
142# 4 <0> pushmark s
143# 5 <0> pushmark s
144# 6 <#> gv[*hash] s
145# 7 <1> rv2hv[t2] lKRM*/1
146# 8 <2> aassign[t3] vKS
147# 9 <;> nextstate(main 476 (eval 10):1) v
148# a <0> pushmark sM
149# b <#> gv[*array] s
150# c <1> rv2av[t6] sKRM/1
151# d <#> gv[*_] s
152# e <1> rv2gv sKRM/1
153# f <{> enteriter(next->q last->t redo->g) lKS
154# r <0> iter s
155# s <|> and(other->g) K/1
156# g <;> nextstate(main 475 (eval 10):1) v
157# h <#> gvsv[*_] s
158# i <#> gv[*hash] s
159# j <1> rv2hv sKR/1
160# k <0> pushmark s
161# l <#> gvsv[*_] s
162# m <#> gv[*getkey] s/EARLYCV
163# n <1> entersub[t10] sKS/TARG,1
164# o <2> helem sKRM*/2
165# p <2> sassign vKS/2
166# q <0> unstack s
167# goto r
168# t <2> leaveloop K/2
169# u <2> leaveloop K/2
170# v <1> leavesub[1 ref] K/REFC,1
171EOT_EOT
172# 1 <;> nextstate(main 562 (eval 15):1) v
173# 2 <{> enterloop(next->u last->u redo->3)
174# 3 <;> nextstate(main 559 (eval 15):1) v
175# 4 <0> pushmark s
176# 5 <0> pushmark s
177# 6 <$> gv(*hash) s
178# 7 <1> rv2hv[t1] lKRM*/1
179# 8 <2> aassign[t2] vKS
180# 9 <;> nextstate(main 560 (eval 15):1) v
181# a <0> pushmark sM
182# b <$> gv(*array) s
183# c <1> rv2av[t3] sKRM/1
184# d <$> gv(*_) s
185# e <1> rv2gv sKRM/1
186# f <{> enteriter(next->q last->t redo->g) lKS
187# r <0> iter s
188# s <|> and(other->g) K/1
189# g <;> nextstate(main 559 (eval 15):1) v
190# h <$> gvsv(*_) s
191# i <$> gv(*hash) s
192# j <1> rv2hv sKR/1
193# k <0> pushmark s
194# l <$> gvsv(*_) s
195# m <$> gv(*getkey) s/EARLYCV
196# n <1> entersub[t4] sKS/TARG,1
197# o <2> helem sKRM*/2
198# p <2> sassign vKS/2
199# q <0> unstack s
200# goto r
201# t <2> leaveloop K/2
202# u <2> leaveloop K/2
203# v <1> leavesub[1 ref] K/REFC,1
204EONT_EONT
205
206
207=for gentest
208
209# chunk: #%hash = map { "\L$_", 1 } @array; # perl guesses EXPR. wrong
210%hash = map { +"\L$_", 1 } @array; # perl guesses BLOCK. right
211
212=cut
213
214checkOptree(note => q{},
215 bcopts => q{-exec},
216 code => q{%hash = map { +"\L$_", 1 } @array; },
217 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
218# 1 <;> nextstate(main 476 (eval 10):1) v
219# 2 <0> pushmark s
220# 3 <0> pushmark s
221# 4 <#> gv[*array] s
222# 5 <1> rv2av[t7] lKM/1
223# 6 <@> mapstart lK*
224# 7 <|> mapwhile(other->8)[t9] lK
225# 8 <0> pushmark s
226# 9 <#> gvsv[*_] s
227# a <1> lc[t4] sK/1
228# b <@> stringify[t5] sK/1
229# c <$> const[IV 1] s
230# d <@> list lK
231# - <@> scope lK
232# goto 7
233# e <0> pushmark s
234# f <#> gv[*hash] s
235# g <1> rv2hv[t2] lKRM*/1
236# h <2> aassign[t10] KS/COMMON
237# i <1> leavesub[1 ref] K/REFC,1
238EOT_EOT
239# 1 <;> nextstate(main 560 (eval 15):1) v
240# 2 <0> pushmark s
241# 3 <0> pushmark s
242# 4 <$> gv(*array) s
243# 5 <1> rv2av[t4] lKM/1
244# 6 <@> mapstart lK*
245# 7 <|> mapwhile(other->8)[t5] lK
246# 8 <0> pushmark s
247# 9 <$> gvsv(*_) s
248# a <1> lc[t2] sK/1
249# b <@> stringify[t3] sK/1
250# c <$> const(IV 1) s
251# d <@> list lK
252# - <@> scope lK
253# goto 7
254# e <0> pushmark s
255# f <$> gv(*hash) s
256# g <1> rv2hv[t1] lKRM*/1
257# h <2> aassign[t6] KS/COMMON
258# i <1> leavesub[1 ref] K/REFC,1
259EONT_EONT
260
261
262=for gentest
263
264# chunk: %hash = map { ("\L$_", 1) } @array; # this also works
265
266=cut
267
268checkOptree(note => q{},
269 bcopts => q{-exec},
270 code => q{%hash = map { ("\L$_", 1) } @array; },
271 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
272# 1 <;> nextstate(main 476 (eval 10):1) v
273# 2 <0> pushmark s
274# 3 <0> pushmark s
275# 4 <#> gv[*array] s
276# 5 <1> rv2av[t7] lKM/1
277# 6 <@> mapstart lK*
278# 7 <|> mapwhile(other->8)[t9] lK
279# 8 <0> pushmark s
280# 9 <#> gvsv[*_] s
281# a <1> lc[t4] sK/1
282# b <@> stringify[t5] sK/1
283# c <$> const[IV 1] s
284# d <@> list lKP
285# - <@> scope lK
286# goto 7
287# e <0> pushmark s
288# f <#> gv[*hash] s
289# g <1> rv2hv[t2] lKRM*/1
290# h <2> aassign[t10] KS/COMMON
291# i <1> leavesub[1 ref] K/REFC,1
292EOT_EOT
293# 1 <;> nextstate(main 560 (eval 15):1) v
294# 2 <0> pushmark s
295# 3 <0> pushmark s
296# 4 <$> gv(*array) s
297# 5 <1> rv2av[t4] lKM/1
298# 6 <@> mapstart lK*
299# 7 <|> mapwhile(other->8)[t5] lK
300# 8 <0> pushmark s
301# 9 <$> gvsv(*_) s
302# a <1> lc[t2] sK/1
303# b <@> stringify[t3] sK/1
304# c <$> const(IV 1) s
305# d <@> list lKP
306# - <@> scope lK
307# goto 7
308# e <0> pushmark s
309# f <$> gv(*hash) s
310# g <1> rv2hv[t1] lKRM*/1
311# h <2> aassign[t6] KS/COMMON
312# i <1> leavesub[1 ref] K/REFC,1
313EONT_EONT
314
315
316=for gentest
317
318# chunk: %hash = map { lc($_), 1 } @array; # as does this.
319
320=cut
321
322checkOptree(note => q{},
323 bcopts => q{-exec},
324 code => q{%hash = map { lc($_), 1 } @array; },
325 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
326# 1 <;> nextstate(main 476 (eval 10):1) v
327# 2 <0> pushmark s
328# 3 <0> pushmark s
329# 4 <#> gv[*array] s
330# 5 <1> rv2av[t6] lKM/1
331# 6 <@> mapstart lK*
332# 7 <|> mapwhile(other->8)[t8] lK
333# 8 <0> pushmark s
334# 9 <#> gvsv[*_] s
335# a <1> lc[t4] sK/1
336# b <$> const[IV 1] s
337# c <@> list lK
338# - <@> scope lK
339# goto 7
340# d <0> pushmark s
341# e <#> gv[*hash] s
342# f <1> rv2hv[t2] lKRM*/1
343# g <2> aassign[t9] KS/COMMON
344# h <1> leavesub[1 ref] K/REFC,1
345EOT_EOT
346# 1 <;> nextstate(main 589 (eval 26):1) v
347# 2 <0> pushmark s
348# 3 <0> pushmark s
349# 4 <$> gv(*array) s
350# 5 <1> rv2av[t3] lKM/1
351# 6 <@> mapstart lK*
352# 7 <|> mapwhile(other->8)[t4] lK
353# 8 <0> pushmark s
354# 9 <$> gvsv(*_) s
355# a <1> lc[t2] sK/1
356# b <$> const(IV 1) s
357# c <@> list lK
358# - <@> scope lK
359# goto 7
360# d <0> pushmark s
361# e <$> gv(*hash) s
362# f <1> rv2hv[t1] lKRM*/1
363# g <2> aassign[t5] KS/COMMON
364# h <1> leavesub[1 ref] K/REFC,1
365EONT_EONT
366
367
368=for gentest
369
370# chunk: %hash = map +( lc($_), 1 ), @array; # this is EXPR and works!
371
372=cut
373
374checkOptree(note => q{},
375 bcopts => q{-exec},
376 code => q{%hash = map +( lc($_), 1 ), @array; },
377 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
378# 1 <;> nextstate(main 475 (eval 10):1) v
379# 2 <0> pushmark s
380# 3 <0> pushmark s
381# 4 <#> gv[*array] s
382# 5 <1> rv2av[t6] lKM/1
383# 6 <@> mapstart lK
384# 7 <|> mapwhile(other->8)[t7] lK
385# 8 <0> pushmark s
386# 9 <#> gvsv[*_] s
387# a <1> lc[t4] sK/1
388# b <$> const[IV 1] s
389# c <@> list lKP
390# goto 7
391# d <0> pushmark s
392# e <#> gv[*hash] s
393# f <1> rv2hv[t2] lKRM*/1
394# g <2> aassign[t8] KS/COMMON
395# h <1> leavesub[1 ref] K/REFC,1
396EOT_EOT
397# 1 <;> nextstate(main 593 (eval 28):1) v
398# 2 <0> pushmark s
399# 3 <0> pushmark s
400# 4 <$> gv(*array) s
401# 5 <1> rv2av[t3] lKM/1
402# 6 <@> mapstart lK
403# 7 <|> mapwhile(other->8)[t4] lK
404# 8 <0> pushmark s
405# 9 <$> gvsv(*_) s
406# a <1> lc[t2] sK/1
407# b <$> const(IV 1) s
408# c <@> list lKP
409# goto 7
410# d <0> pushmark s
411# e <$> gv(*hash) s
412# f <1> rv2hv[t1] lKRM*/1
413# g <2> aassign[t5] KS/COMMON
414# h <1> leavesub[1 ref] K/REFC,1
415EONT_EONT
416
417
418=for gentest
419
420# chunk: %hash = map ( lc($_), 1 ), @array; # evaluates to (1, @array)
421
422=cut
423
424checkOptree(note => q{},
425 bcopts => q{-exec},
426 code => q{%hash = map ( lc($_), 1 ), @array; },
427 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
428# 1 <;> nextstate(main 475 (eval 10):1) v
429# 2 <0> pushmark s
430# 3 <0> pushmark s
431# 4 <0> pushmark s
432# 5 <$> const[IV 1] sM
433# 6 <@> mapstart lK
434# 7 <|> mapwhile(other->8)[t5] lK
435# 8 <#> gvsv[*_] s
436# 9 <1> lc[t4] sK/1
437# goto 7
438# a <0> pushmark s
439# b <#> gv[*hash] s
440# c <1> rv2hv[t2] lKRM*/1
441# d <2> aassign[t6] KS/COMMON
442# e <#> gv[*array] s
443# f <1> rv2av[t8] K/1
444# g <@> list K
445# h <1> leavesub[1 ref] K/REFC,1
446EOT_EOT
447# 1 <;> nextstate(main 597 (eval 30):1) v
448# 2 <0> pushmark s
449# 3 <0> pushmark s
450# 4 <0> pushmark s
451# 5 <$> const(IV 1) sM
452# 6 <@> mapstart lK
453# 7 <|> mapwhile(other->8)[t3] lK
454# 8 <$> gvsv(*_) s
455# 9 <1> lc[t2] sK/1
456# goto 7
457# a <0> pushmark s
458# b <$> gv(*hash) s
459# c <1> rv2hv[t1] lKRM*/1
460# d <2> aassign[t4] KS/COMMON
461# e <$> gv(*array) s
462# f <1> rv2av[t5] K/1
463# g <@> list K
464# h <1> leavesub[1 ref] K/REFC,1
465EONT_EONT
466
467
468=for gentest
469
470# chunk: @hashes = map +{ lc($_), 1 }, @array # EXPR, so needs , at end
471
472=cut
473
474checkOptree(note => q{},
475 bcopts => q{-exec},
476 code => q{@hashes = map +{ lc($_), 1 }, @array },
477 expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT');
478# 1 <;> nextstate(main 475 (eval 10):1) v
479# 2 <0> pushmark s
480# 3 <0> pushmark s
481# 4 <#> gv[*array] s
482# 5 <1> rv2av[t6] lKM/1
483# 6 <@> mapstart lK
484# 7 <|> mapwhile(other->8)[t7] lK
485# 8 <0> pushmark s
486# 9 <#> gvsv[*_] s
487# a <1> lc[t4] sK/1
488# b <$> const[IV 1] s
489# c <@> anonhash sKRM/1
490# d <1> srefgen sK/1
491# goto 7
492# e <0> pushmark s
493# f <#> gv[*hashes] s
494# g <1> rv2av[t2] lKRM*/1
495# h <2> aassign[t8] KS/COMMON
496# i <1> leavesub[1 ref] K/REFC,1
497EOT_EOT
498# 1 <;> nextstate(main 601 (eval 32):1) v
499# 2 <0> pushmark s
500# 3 <0> pushmark s
501# 4 <$> gv(*array) s
502# 5 <1> rv2av[t3] lKM/1
503# 6 <@> mapstart lK
504# 7 <|> mapwhile(other->8)[t4] lK
505# 8 <0> pushmark s
506# 9 <$> gvsv(*_) s
507# a <1> lc[t2] sK/1
508# b <$> const(IV 1) s
509# c <@> anonhash sKRM/1
510# d <1> srefgen sK/1
511# goto 7
512# e <0> pushmark s
513# f <$> gv(*hashes) s
514# g <1> rv2av[t1] lKRM*/1
515# h <2> aassign[t5] KS/COMMON
516# i <1> leavesub[1 ref] K/REFC,1
517EONT_EONT