9 # A lot of tests to check that reversed for works.
11 @array = ('A', 'B', 'C');
15 is ($r, 'ABC', 'Forwards for array');
20 is ($r, '123', 'Forwards for list');
22 for (map {$_} @array) {
25 is ($r, 'ABC', 'Forwards for array via map');
27 for (map {$_} 1,2,3) {
30 is ($r, '123', 'Forwards for list via map');
35 is ($r, '123', 'Forwards for list via ..');
40 is ($r, 'ABC', 'Forwards for list via ..');
43 for (reverse @array) {
46 is ($r, 'CBA', 'Reverse for array');
51 is ($r, '321', 'Reverse for list');
53 for (reverse map {$_} @array) {
56 is ($r, 'CBA', 'Reverse for array via map');
58 for (reverse map {$_} 1,2,3) {
61 is ($r, '321', 'Reverse for list via map');
63 for (reverse 1 .. 3) {
66 is ($r, '321', 'Reverse for list via ..');
68 for (reverse 'A' .. 'C') {
71 is ($r, 'CBA', 'Reverse for list via ..');
77 is ($r, 'ABC', 'Forwards for array with var');
82 is ($r, '123', 'Forwards for list with var');
84 for my $i (map {$_} @array) {
87 is ($r, 'ABC', 'Forwards for array via map with var');
89 for my $i (map {$_} 1,2,3) {
92 is ($r, '123', 'Forwards for list via map with var');
97 is ($r, '123', 'Forwards for list via .. with var');
99 for my $i ('A' .. 'C') {
102 is ($r, 'ABC', 'Forwards for list via .. with var');
105 for my $i (reverse @array) {
108 is ($r, 'CBA', 'Reverse for array with var');
110 for my $i (reverse 1,2,3) {
113 is ($r, '321', 'Reverse for list with var');
115 for my $i (reverse map {$_} @array) {
118 is ($r, 'CBA', 'Reverse for array via map with var');
120 for my $i (reverse map {$_} 1,2,3) {
123 is ($r, '321', 'Reverse for list via map with var');
125 for my $i (reverse 1 .. 3) {
128 is ($r, '321', 'Reverse for list via .. with var');
130 for my $i (reverse 'A' .. 'C') {
133 is ($r, 'CBA', 'Reverse for list via .. with var');
135 # For some reason the generate optree is different when $_ is implicit.
140 is ($r, 'ABC', 'Forwards for array with explicit $_');
145 is ($r, '123', 'Forwards for list with explicit $_');
147 for $_ (map {$_} @array) {
150 is ($r, 'ABC', 'Forwards for array via map with explicit $_');
152 for $_ (map {$_} 1,2,3) {
155 is ($r, '123', 'Forwards for list via map with explicit $_');
160 is ($r, '123', 'Forwards for list via .. with var with explicit $_');
162 for $_ ('A' .. 'C') {
165 is ($r, 'ABC', 'Forwards for list via .. with var with explicit $_');
168 for $_ (reverse @array) {
171 is ($r, 'CBA', 'Reverse for array with explicit $_');
173 for $_ (reverse 1,2,3) {
176 is ($r, '321', 'Reverse for list with explicit $_');
178 for $_ (reverse map {$_} @array) {
181 is ($r, 'CBA', 'Reverse for array via map with explicit $_');
183 for $_ (reverse map {$_} 1,2,3) {
186 is ($r, '321', 'Reverse for list via map with explicit $_');
188 for $_ (reverse 1 .. 3) {
191 is ($r, '321', 'Reverse for list via .. with var with explicit $_');
193 for $_ (reverse 'A' .. 'C') {
196 is ($r, 'CBA', 'Reverse for list via .. with var with explicit $_');
198 # I don't think that my is that different from our in the optree. But test a
201 for our $i (reverse @array) {
204 is ($r, 'CBA', 'Reverse for array with our var');
206 for our $i (reverse 1,2,3) {
209 is ($r, '321', 'Reverse for list with our var');
211 for our $i (reverse map {$_} @array) {
214 is ($r, 'CBA', 'Reverse for array via map with our var');
216 for our $i (reverse map {$_} 1,2,3) {
219 is ($r, '321', 'Reverse for list via map with our var');
221 for our $i (reverse 1 .. 3) {
224 is ($r, '321', 'Reverse for list via .. with our var');
226 for our $i (reverse 'A' .. 'C') {
229 is ($r, 'CBA', 'Reverse for list via .. with our var');
233 for (1, reverse @array) {
236 is ($r, '1CBA', 'Reverse for array with leading value');
238 for ('A', reverse 1,2,3) {
241 is ($r, 'A321', 'Reverse for list with leading value');
243 for (1, reverse map {$_} @array) {
246 is ($r, '1CBA', 'Reverse for array via map with leading value');
248 for ('A', reverse map {$_} 1,2,3) {
251 is ($r, 'A321', 'Reverse for list via map with leading value');
253 for ('A', reverse 1 .. 3) {
256 is ($r, 'A321', 'Reverse for list via .. with leading value');
258 for (1, reverse 'A' .. 'C') {
261 is ($r, '1CBA', 'Reverse for list via .. with leading value');
264 for (reverse (@array), 1) {
267 is ($r, 'CBA1', 'Reverse for array with trailing value');
269 for (reverse (1,2,3), 'A') {
272 is ($r, '321A', 'Reverse for list with trailing value');
274 for (reverse (map {$_} @array), 1) {
277 is ($r, 'CBA1', 'Reverse for array via map with trailing value');
279 for (reverse (map {$_} 1,2,3), 'A') {
282 is ($r, '321A', 'Reverse for list via map with trailing value');
284 for (reverse (1 .. 3), 'A') {
287 is ($r, '321A', 'Reverse for list via .. with trailing value');
289 for (reverse ('A' .. 'C'), 1) {
292 is ($r, 'CBA1', 'Reverse for list via .. with trailing value');
296 for $_ (1, reverse @array) {
299 is ($r, '1CBA', 'Reverse for array with leading value with explicit $_');
301 for $_ ('A', reverse 1,2,3) {
304 is ($r, 'A321', 'Reverse for list with leading value with explicit $_');
306 for $_ (1, reverse map {$_} @array) {
310 'Reverse for array via map with leading value with explicit $_');
312 for $_ ('A', reverse map {$_} 1,2,3) {
315 is ($r, 'A321', 'Reverse for list via map with leading value with explicit $_');
317 for $_ ('A', reverse 1 .. 3) {
320 is ($r, 'A321', 'Reverse for list via .. with leading value with explicit $_');
322 for $_ (1, reverse 'A' .. 'C') {
325 is ($r, '1CBA', 'Reverse for list via .. with leading value with explicit $_');
328 for $_ (reverse (@array), 1) {
331 is ($r, 'CBA1', 'Reverse for array with trailing value with explicit $_');
333 for $_ (reverse (1,2,3), 'A') {
336 is ($r, '321A', 'Reverse for list with trailing value with explicit $_');
338 for $_ (reverse (map {$_} @array), 1) {
342 'Reverse for array via map with trailing value with explicit $_');
344 for $_ (reverse (map {$_} 1,2,3), 'A') {
348 'Reverse for list via map with trailing value with explicit $_');
350 for $_ (reverse (1 .. 3), 'A') {
353 is ($r, '321A', 'Reverse for list via .. with trailing value with explicit $_');
355 for $_ (reverse ('A' .. 'C'), 1) {
358 is ($r, 'CBA1', 'Reverse for list via .. with trailing value with explicit $_');
361 for my $i (1, reverse @array) {
364 is ($r, '1CBA', 'Reverse for array with leading value and var');
366 for my $i ('A', reverse 1,2,3) {
369 is ($r, 'A321', 'Reverse for list with leading value and var');
371 for my $i (1, reverse map {$_} @array) {
374 is ($r, '1CBA', 'Reverse for array via map with leading value and var');
376 for my $i ('A', reverse map {$_} 1,2,3) {
379 is ($r, 'A321', 'Reverse for list via map with leading value and var');
381 for my $i ('A', reverse 1 .. 3) {
384 is ($r, 'A321', 'Reverse for list via .. with leading value and var');
386 for my $i (1, reverse 'A' .. 'C') {
389 is ($r, '1CBA', 'Reverse for list via .. with leading value and var');
392 for my $i (reverse (@array), 1) {
395 is ($r, 'CBA1', 'Reverse for array with trailing value and var');
397 for my $i (reverse (1,2,3), 'A') {
400 is ($r, '321A', 'Reverse for list with trailing value and var');
402 for my $i (reverse (map {$_} @array), 1) {
405 is ($r, 'CBA1', 'Reverse for array via map with trailing value and var');
407 for my $i (reverse (map {$_} 1,2,3), 'A') {
410 is ($r, '321A', 'Reverse for list via map with trailing value and var');
412 for my $i (reverse (1 .. 3), 'A') {
415 is ($r, '321A', 'Reverse for list via .. with trailing value and var');
417 for my $i (reverse ('A' .. 'C'), 1) {
420 is ($r, 'CBA1', 'Reverse for list via .. with trailing value and var');
424 for (reverse 1, @array) {
427 is ($r, 'CBA1', 'Reverse for value and array');
429 for (reverse map {$_} 1, @array) {
432 is ($r, 'CBA1', 'Reverse for value and array via map');
434 for (reverse 1 .. 3, @array) {
437 is ($r, 'CBA321', 'Reverse for .. and array');
439 for (reverse 'X' .. 'Z', @array) {
442 is ($r, 'CBAZYX', 'Reverse for .. and array');
444 for (reverse map {$_} 1 .. 3, @array) {
447 is ($r, 'CBA321', 'Reverse for .. and array via map');
449 for (reverse map {$_} 'X' .. 'Z', @array) {
452 is ($r, 'CBAZYX', 'Reverse for .. and array via map');
455 for (reverse (@array, 1)) {
458 is ($r, '1CBA', 'Reverse for array and value');
460 for (reverse (map {$_} @array, 1)) {
463 is ($r, '1CBA', 'Reverse for array and value via map');
466 for $_ (reverse 1, @array) {
469 is ($r, 'CBA1', 'Reverse for value and array with explicit $_');
471 for $_ (reverse map {$_} 1, @array) {
474 is ($r, 'CBA1', 'Reverse for value and array via map with explicit $_');
476 for $_ (reverse 1 .. 3, @array) {
479 is ($r, 'CBA321', 'Reverse for .. and array with explicit $_');
481 for $_ (reverse 'X' .. 'Z', @array) {
484 is ($r, 'CBAZYX', 'Reverse for .. and array with explicit $_');
486 for $_ (reverse map {$_} 1 .. 3, @array) {
489 is ($r, 'CBA321', 'Reverse for .. and array via map with explicit $_');
491 for $_ (reverse map {$_} 'X' .. 'Z', @array) {
494 is ($r, 'CBAZYX', 'Reverse for .. and array via map with explicit $_');
497 for $_ (reverse (@array, 1)) {
500 is ($r, '1CBA', 'Reverse for array and value with explicit $_');
502 for $_ (reverse (map {$_} @array, 1)) {
505 is ($r, '1CBA', 'Reverse for array and value via map with explicit $_');
509 for my $i (reverse 1, @array) {
512 is ($r, 'CBA1', 'Reverse for value and array with var');
514 for my $i (reverse map {$_} 1, @array) {
517 is ($r, 'CBA1', 'Reverse for value and array via map with var');
519 for my $i (reverse 1 .. 3, @array) {
522 is ($r, 'CBA321', 'Reverse for .. and array with var');
524 for my $i (reverse 'X' .. 'Z', @array) {
527 is ($r, 'CBAZYX', 'Reverse for .. and array with var');
529 for my $i (reverse map {$_} 1 .. 3, @array) {
532 is ($r, 'CBA321', 'Reverse for .. and array via map with var');
534 for my $i (reverse map {$_} 'X' .. 'Z', @array) {
537 is ($r, 'CBAZYX', 'Reverse for .. and array via map with var');
540 for my $i (reverse (@array, 1)) {
543 is ($r, '1CBA', 'Reverse for array and value with var');
545 for my $i (reverse (map {$_} @array, 1)) {
548 is ($r, '1CBA', 'Reverse for array and value via map with var');
551 if (do {17; foreach (1, 2) { 1; } } != 17) {
553 todo_skip("RT #1085: what should be output of perl -we 'print do { foreach (1, 2) { 1; } }'");
558 local $TODO = "RT #2166: foreach spuriously autovivifies";
560 foreach (@h{a, b}) {}
562 todo_skip("RT #2166: foreach spuriously autovivifies");
568 is eval { \$_ }, \undef, 'foreach (@array_containing_undef)'
573 skip "No XS::APItest under miniperl", 1, if is_miniperl;
574 skip "no XS::APItest", 1 if !eval { require XS::APItest };
577 XS::APItest::alias_av(\@a, 0, undef);
580 is $@, "", 'vivify_defelem does not croak on &PL_sv_undef elements';
585 ($x, my $z) = (1, $y);
586 is $z, 3, 'list assignment after aliasing via foreach';