10 # A lot of tests to check that reversed for works.
12 @array = ('A', 'B', 'C');
16 is ($r, 'ABC', 'Forwards for array');
21 is ($r, '123', 'Forwards for list');
23 for (map {$_} @array) {
26 is ($r, 'ABC', 'Forwards for array via map');
28 for (map {$_} 1,2,3) {
31 is ($r, '123', 'Forwards for list via map');
36 is ($r, '123', 'Forwards for list via ..');
41 is ($r, 'ABC', 'Forwards for list via ..');
44 for (reverse @array) {
47 is ($r, 'CBA', 'Reverse for array');
52 is ($r, '321', 'Reverse for list');
54 for (reverse map {$_} @array) {
57 is ($r, 'CBA', 'Reverse for array via map');
59 for (reverse map {$_} 1,2,3) {
62 is ($r, '321', 'Reverse for list via map');
64 for (reverse 1 .. 3) {
67 is ($r, '321', 'Reverse for list via ..');
69 for (reverse 'A' .. 'C') {
72 is ($r, 'CBA', 'Reverse for list via ..');
78 is ($r, 'ABC', 'Forwards for array with var');
83 is ($r, '123', 'Forwards for list with var');
85 for my $i (map {$_} @array) {
88 is ($r, 'ABC', 'Forwards for array via map with var');
90 for my $i (map {$_} 1,2,3) {
93 is ($r, '123', 'Forwards for list via map with var');
98 is ($r, '123', 'Forwards for list via .. with var');
100 for my $i ('A' .. 'C') {
103 is ($r, 'ABC', 'Forwards for list via .. with var');
106 for my $i (reverse @array) {
109 is ($r, 'CBA', 'Reverse for array with var');
111 for my $i (reverse 1,2,3) {
114 is ($r, '321', 'Reverse for list with var');
116 for my $i (reverse map {$_} @array) {
119 is ($r, 'CBA', 'Reverse for array via map with var');
121 for my $i (reverse map {$_} 1,2,3) {
124 is ($r, '321', 'Reverse for list via map with var');
126 for my $i (reverse 1 .. 3) {
129 is ($r, '321', 'Reverse for list via .. with var');
131 for my $i (reverse 'A' .. 'C') {
134 is ($r, 'CBA', 'Reverse for list via .. with var');
136 # For some reason the generate optree is different when $_ is implicit.
141 is ($r, 'ABC', 'Forwards for array with explicit $_');
146 is ($r, '123', 'Forwards for list with explicit $_');
148 for $_ (map {$_} @array) {
151 is ($r, 'ABC', 'Forwards for array via map with explicit $_');
153 for $_ (map {$_} 1,2,3) {
156 is ($r, '123', 'Forwards for list via map with explicit $_');
161 is ($r, '123', 'Forwards for list via .. with var with explicit $_');
163 for $_ ('A' .. 'C') {
166 is ($r, 'ABC', 'Forwards for list via .. with var with explicit $_');
169 for $_ (reverse @array) {
172 is ($r, 'CBA', 'Reverse for array with explicit $_');
174 for $_ (reverse 1,2,3) {
177 is ($r, '321', 'Reverse for list with explicit $_');
179 for $_ (reverse map {$_} @array) {
182 is ($r, 'CBA', 'Reverse for array via map with explicit $_');
184 for $_ (reverse map {$_} 1,2,3) {
187 is ($r, '321', 'Reverse for list via map with explicit $_');
189 for $_ (reverse 1 .. 3) {
192 is ($r, '321', 'Reverse for list via .. with var with explicit $_');
194 for $_ (reverse 'A' .. 'C') {
197 is ($r, 'CBA', 'Reverse for list via .. with var with explicit $_');
199 # I don't think that my is that different from our in the optree. But test a
202 for our $i (reverse @array) {
205 is ($r, 'CBA', 'Reverse for array with our var');
207 for our $i (reverse 1,2,3) {
210 is ($r, '321', 'Reverse for list with our var');
212 for our $i (reverse map {$_} @array) {
215 is ($r, 'CBA', 'Reverse for array via map with our var');
217 for our $i (reverse map {$_} 1,2,3) {
220 is ($r, '321', 'Reverse for list via map with our var');
222 for our $i (reverse 1 .. 3) {
225 is ($r, '321', 'Reverse for list via .. with our var');
227 for our $i (reverse 'A' .. 'C') {
230 is ($r, 'CBA', 'Reverse for list via .. with our var');
234 for (1, reverse @array) {
237 is ($r, '1CBA', 'Reverse for array with leading value');
239 for ('A', reverse 1,2,3) {
242 is ($r, 'A321', 'Reverse for list with leading value');
244 for (1, reverse map {$_} @array) {
247 is ($r, '1CBA', 'Reverse for array via map with leading value');
249 for ('A', reverse map {$_} 1,2,3) {
252 is ($r, 'A321', 'Reverse for list via map with leading value');
254 for ('A', reverse 1 .. 3) {
257 is ($r, 'A321', 'Reverse for list via .. with leading value');
259 for (1, reverse 'A' .. 'C') {
262 is ($r, '1CBA', 'Reverse for list via .. with leading value');
265 for (reverse (@array), 1) {
268 is ($r, 'CBA1', 'Reverse for array with trailing value');
270 for (reverse (1,2,3), 'A') {
273 is ($r, '321A', 'Reverse for list with trailing value');
275 for (reverse (map {$_} @array), 1) {
278 is ($r, 'CBA1', 'Reverse for array via map with trailing value');
280 for (reverse (map {$_} 1,2,3), 'A') {
283 is ($r, '321A', 'Reverse for list via map with trailing value');
285 for (reverse (1 .. 3), 'A') {
288 is ($r, '321A', 'Reverse for list via .. with trailing value');
290 for (reverse ('A' .. 'C'), 1) {
293 is ($r, 'CBA1', 'Reverse for list via .. with trailing value');
297 for $_ (1, reverse @array) {
300 is ($r, '1CBA', 'Reverse for array with leading value with explicit $_');
302 for $_ ('A', reverse 1,2,3) {
305 is ($r, 'A321', 'Reverse for list with leading value with explicit $_');
307 for $_ (1, reverse map {$_} @array) {
311 'Reverse for array via map with leading value with explicit $_');
313 for $_ ('A', reverse map {$_} 1,2,3) {
316 is ($r, 'A321', 'Reverse for list via map with leading value with explicit $_');
318 for $_ ('A', reverse 1 .. 3) {
321 is ($r, 'A321', 'Reverse for list via .. with leading value with explicit $_');
323 for $_ (1, reverse 'A' .. 'C') {
326 is ($r, '1CBA', 'Reverse for list via .. with leading value with explicit $_');
329 for $_ (reverse (@array), 1) {
332 is ($r, 'CBA1', 'Reverse for array with trailing value with explicit $_');
334 for $_ (reverse (1,2,3), 'A') {
337 is ($r, '321A', 'Reverse for list with trailing value with explicit $_');
339 for $_ (reverse (map {$_} @array), 1) {
343 'Reverse for array via map with trailing value with explicit $_');
345 for $_ (reverse (map {$_} 1,2,3), 'A') {
349 'Reverse for list via map with trailing value with explicit $_');
351 for $_ (reverse (1 .. 3), 'A') {
354 is ($r, '321A', 'Reverse for list via .. with trailing value with explicit $_');
356 for $_ (reverse ('A' .. 'C'), 1) {
359 is ($r, 'CBA1', 'Reverse for list via .. with trailing value with explicit $_');
362 for my $i (1, reverse @array) {
365 is ($r, '1CBA', 'Reverse for array with leading value and var');
367 for my $i ('A', reverse 1,2,3) {
370 is ($r, 'A321', 'Reverse for list with leading value and var');
372 for my $i (1, reverse map {$_} @array) {
375 is ($r, '1CBA', 'Reverse for array via map with leading value and var');
377 for my $i ('A', reverse map {$_} 1,2,3) {
380 is ($r, 'A321', 'Reverse for list via map with leading value and var');
382 for my $i ('A', reverse 1 .. 3) {
385 is ($r, 'A321', 'Reverse for list via .. with leading value and var');
387 for my $i (1, reverse 'A' .. 'C') {
390 is ($r, '1CBA', 'Reverse for list via .. with leading value and var');
393 for my $i (reverse (@array), 1) {
396 is ($r, 'CBA1', 'Reverse for array with trailing value and var');
398 for my $i (reverse (1,2,3), 'A') {
401 is ($r, '321A', 'Reverse for list with trailing value and var');
403 for my $i (reverse (map {$_} @array), 1) {
406 is ($r, 'CBA1', 'Reverse for array via map with trailing value and var');
408 for my $i (reverse (map {$_} 1,2,3), 'A') {
411 is ($r, '321A', 'Reverse for list via map with trailing value and var');
413 for my $i (reverse (1 .. 3), 'A') {
416 is ($r, '321A', 'Reverse for list via .. with trailing value and var');
418 for my $i (reverse ('A' .. 'C'), 1) {
421 is ($r, 'CBA1', 'Reverse for list via .. with trailing value and var');
425 for (reverse 1, @array) {
428 is ($r, 'CBA1', 'Reverse for value and array');
430 for (reverse map {$_} 1, @array) {
433 is ($r, 'CBA1', 'Reverse for value and array via map');
435 for (reverse 1 .. 3, @array) {
438 is ($r, 'CBA321', 'Reverse for .. and array');
440 for (reverse 'X' .. 'Z', @array) {
443 is ($r, 'CBAZYX', 'Reverse for .. and array');
445 for (reverse map {$_} 1 .. 3, @array) {
448 is ($r, 'CBA321', 'Reverse for .. and array via map');
450 for (reverse map {$_} 'X' .. 'Z', @array) {
453 is ($r, 'CBAZYX', 'Reverse for .. and array via map');
456 for (reverse (@array, 1)) {
459 is ($r, '1CBA', 'Reverse for array and value');
461 for (reverse (map {$_} @array, 1)) {
464 is ($r, '1CBA', 'Reverse for array and value via map');
467 for $_ (reverse 1, @array) {
470 is ($r, 'CBA1', 'Reverse for value and array with explicit $_');
472 for $_ (reverse map {$_} 1, @array) {
475 is ($r, 'CBA1', 'Reverse for value and array via map with explicit $_');
477 for $_ (reverse 1 .. 3, @array) {
480 is ($r, 'CBA321', 'Reverse for .. and array with explicit $_');
482 for $_ (reverse 'X' .. 'Z', @array) {
485 is ($r, 'CBAZYX', 'Reverse for .. and array with explicit $_');
487 for $_ (reverse map {$_} 1 .. 3, @array) {
490 is ($r, 'CBA321', 'Reverse for .. and array via map with explicit $_');
492 for $_ (reverse map {$_} 'X' .. 'Z', @array) {
495 is ($r, 'CBAZYX', 'Reverse for .. and array via map with explicit $_');
498 for $_ (reverse (@array, 1)) {
501 is ($r, '1CBA', 'Reverse for array and value with explicit $_');
503 for $_ (reverse (map {$_} @array, 1)) {
506 is ($r, '1CBA', 'Reverse for array and value via map with explicit $_');
510 for my $i (reverse 1, @array) {
513 is ($r, 'CBA1', 'Reverse for value and array with var');
515 for my $i (reverse map {$_} 1, @array) {
518 is ($r, 'CBA1', 'Reverse for value and array via map with var');
520 for my $i (reverse 1 .. 3, @array) {
523 is ($r, 'CBA321', 'Reverse for .. and array with var');
525 for my $i (reverse 'X' .. 'Z', @array) {
528 is ($r, 'CBAZYX', 'Reverse for .. and array with var');
530 for my $i (reverse map {$_} 1 .. 3, @array) {
533 is ($r, 'CBA321', 'Reverse for .. and array via map with var');
535 for my $i (reverse map {$_} 'X' .. 'Z', @array) {
538 is ($r, 'CBAZYX', 'Reverse for .. and array via map with var');
541 for my $i (reverse (@array, 1)) {
544 is ($r, '1CBA', 'Reverse for array and value with var');
546 for my $i (reverse (map {$_} @array, 1)) {
549 is ($r, '1CBA', 'Reverse for array and value via map with var');
551 is do {17; foreach (1, 2) { 1; } }, '', "RT #1085: what should be output of perl -we 'print do { foreach (1, 2) { 1; } }'";
554 local $TODO = "RT #2166: foreach spuriously autovivifies";
556 foreach (@h{a, b}) {}
557 is keys(%h), 0, 'RT #2166: foreach spuriously autovivifies';
562 is eval { \$_ }, \undef, 'foreach (@array_containing_undef)'
567 skip "No XS::APItest under miniperl", 1, if is_miniperl;
568 skip "no XS::APItest", 1 if !eval { require XS::APItest };
571 XS::APItest::alias_av(\@a, 0, undef);
574 is $@, "", 'vivify_defelem does not croak on &PL_sv_undef elements';
579 ($x, my $z) = (1, $y);
580 is $z, 3, 'list assignment after aliasing via foreach';
585 ($x, my $z) = (1, $y);
586 is $z, 3, 'list assignment after aliasing lexical var via foreach';
590 @_ = (1,2,3,scalar do{for(@_){}} + 1, 4, 5, 6);
591 is "@_", "1 2 3 1 4 5 6",
592 '[perl #124004] scalar for(@empty_array) stack bug';
594 # DAPM: while messing with the scope code, I broke some cpan/ code,
595 # but surprisingly didn't break any dedicated tests. So test it:
604 is(fscope(), 1, 'return via loop in sub');
606 # make sure a NULL GvSV is restored at the end of the loop
613 ok(!defined $foo, "NULL GvSV");
617 # make sure storing an int in a NULL GvSV is ok
624 ok(!defined $foo, "NULL GvSV int iterator");
628 # RT #123994 - handle a null GVSV within a loop
632 local $foo = "outside";
636 is($foo, $i, "RT #123994 int range $i");
640 is($foo, "outside", "RT #123994 int range outside");
643 for $foo ('0'..'1') {
644 is($foo, $i, "RT #123994 str range $i");
648 is($foo, "outside", "RT #123994 str range outside");
652 is($foo, $i, "RT #123994 list $i");
656 is($foo, "outside", "RT #123994 list outside");
661 is($foo, $i, "RT #123994 array $i");
665 is($foo, "outside", "RT #123994 array outside");