This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Get t/uni/cache.t working under minitest
[perl5.git] / t / op / for.t
CommitLineData
e150f77d
JK
1#!./perl
2
3BEGIN {
4 require "test.pl";
5}
6
031c6d82 7plan(106);
e150f77d
JK
8
9# A lot of tests to check that reversed for works.
e150f77d
JK
10
11@array = ('A', 'B', 'C');
12for (@array) {
13 $r .= $_;
14}
15is ($r, 'ABC', 'Forwards for array');
16$r = '';
17for (1,2,3) {
18 $r .= $_;
19}
20is ($r, '123', 'Forwards for list');
21$r = '';
22for (map {$_} @array) {
23 $r .= $_;
24}
25is ($r, 'ABC', 'Forwards for array via map');
26$r = '';
27for (map {$_} 1,2,3) {
28 $r .= $_;
29}
30is ($r, '123', 'Forwards for list via map');
31$r = '';
32for (1 .. 3) {
33 $r .= $_;
34}
35is ($r, '123', 'Forwards for list via ..');
36$r = '';
37for ('A' .. 'C') {
38 $r .= $_;
39}
40is ($r, 'ABC', 'Forwards for list via ..');
41
42$r = '';
43for (reverse @array) {
44 $r .= $_;
45}
46is ($r, 'CBA', 'Reverse for array');
47$r = '';
48for (reverse 1,2,3) {
49 $r .= $_;
50}
51is ($r, '321', 'Reverse for list');
52$r = '';
53for (reverse map {$_} @array) {
54 $r .= $_;
55}
56is ($r, 'CBA', 'Reverse for array via map');
57$r = '';
58for (reverse map {$_} 1,2,3) {
59 $r .= $_;
60}
61is ($r, '321', 'Reverse for list via map');
62$r = '';
63for (reverse 1 .. 3) {
64 $r .= $_;
65}
66is ($r, '321', 'Reverse for list via ..');
67$r = '';
68for (reverse 'A' .. 'C') {
69 $r .= $_;
70}
71is ($r, 'CBA', 'Reverse for list via ..');
72
73$r = '';
74for my $i (@array) {
75 $r .= $i;
76}
77is ($r, 'ABC', 'Forwards for array with var');
78$r = '';
79for my $i (1,2,3) {
80 $r .= $i;
81}
82is ($r, '123', 'Forwards for list with var');
83$r = '';
84for my $i (map {$_} @array) {
85 $r .= $i;
86}
87is ($r, 'ABC', 'Forwards for array via map with var');
88$r = '';
89for my $i (map {$_} 1,2,3) {
90 $r .= $i;
91}
92is ($r, '123', 'Forwards for list via map with var');
93$r = '';
94for my $i (1 .. 3) {
95 $r .= $i;
96}
97is ($r, '123', 'Forwards for list via .. with var');
98$r = '';
99for my $i ('A' .. 'C') {
100 $r .= $i;
101}
102is ($r, 'ABC', 'Forwards for list via .. with var');
103
104$r = '';
105for my $i (reverse @array) {
106 $r .= $i;
107}
108is ($r, 'CBA', 'Reverse for array with var');
109$r = '';
110for my $i (reverse 1,2,3) {
111 $r .= $i;
112}
113is ($r, '321', 'Reverse for list with var');
114$r = '';
115for my $i (reverse map {$_} @array) {
116 $r .= $i;
117}
118is ($r, 'CBA', 'Reverse for array via map with var');
119$r = '';
120for my $i (reverse map {$_} 1,2,3) {
121 $r .= $i;
122}
123is ($r, '321', 'Reverse for list via map with var');
124$r = '';
125for my $i (reverse 1 .. 3) {
126 $r .= $i;
127}
128is ($r, '321', 'Reverse for list via .. with var');
129$r = '';
130for my $i (reverse 'A' .. 'C') {
131 $r .= $i;
132}
133is ($r, 'CBA', 'Reverse for list via .. with var');
134
135# For some reason the generate optree is different when $_ is implicit.
136$r = '';
137for $_ (@array) {
138 $r .= $_;
139}
140is ($r, 'ABC', 'Forwards for array with explicit $_');
141$r = '';
142for $_ (1,2,3) {
143 $r .= $_;
144}
145is ($r, '123', 'Forwards for list with explicit $_');
146$r = '';
147for $_ (map {$_} @array) {
148 $r .= $_;
149}
150is ($r, 'ABC', 'Forwards for array via map with explicit $_');
151$r = '';
152for $_ (map {$_} 1,2,3) {
153 $r .= $_;
154}
155is ($r, '123', 'Forwards for list via map with explicit $_');
156$r = '';
157for $_ (1 .. 3) {
158 $r .= $_;
159}
160is ($r, '123', 'Forwards for list via .. with var with explicit $_');
161$r = '';
162for $_ ('A' .. 'C') {
163 $r .= $_;
164}
165is ($r, 'ABC', 'Forwards for list via .. with var with explicit $_');
166
167$r = '';
168for $_ (reverse @array) {
169 $r .= $_;
170}
171is ($r, 'CBA', 'Reverse for array with explicit $_');
172$r = '';
173for $_ (reverse 1,2,3) {
174 $r .= $_;
175}
176is ($r, '321', 'Reverse for list with explicit $_');
177$r = '';
178for $_ (reverse map {$_} @array) {
179 $r .= $_;
180}
181is ($r, 'CBA', 'Reverse for array via map with explicit $_');
182$r = '';
183for $_ (reverse map {$_} 1,2,3) {
184 $r .= $_;
185}
186is ($r, '321', 'Reverse for list via map with explicit $_');
187$r = '';
188for $_ (reverse 1 .. 3) {
189 $r .= $_;
190}
191is ($r, '321', 'Reverse for list via .. with var with explicit $_');
192$r = '';
193for $_ (reverse 'A' .. 'C') {
194 $r .= $_;
195}
196is ($r, 'CBA', 'Reverse for list via .. with var with explicit $_');
197
198# I don't think that my is that different from our in the optree. But test a
199# few:
200$r = '';
201for our $i (reverse @array) {
202 $r .= $i;
203}
204is ($r, 'CBA', 'Reverse for array with our var');
205$r = '';
206for our $i (reverse 1,2,3) {
207 $r .= $i;
208}
209is ($r, '321', 'Reverse for list with our var');
210$r = '';
211for our $i (reverse map {$_} @array) {
212 $r .= $i;
213}
214is ($r, 'CBA', 'Reverse for array via map with our var');
215$r = '';
216for our $i (reverse map {$_} 1,2,3) {
217 $r .= $i;
218}
219is ($r, '321', 'Reverse for list via map with our var');
220$r = '';
221for our $i (reverse 1 .. 3) {
222 $r .= $i;
223}
224is ($r, '321', 'Reverse for list via .. with our var');
225$r = '';
226for our $i (reverse 'A' .. 'C') {
227 $r .= $i;
228}
229is ($r, 'CBA', 'Reverse for list via .. with our var');
230
231
232$r = '';
233for (1, reverse @array) {
234 $r .= $_;
235}
236is ($r, '1CBA', 'Reverse for array with leading value');
237$r = '';
238for ('A', reverse 1,2,3) {
239 $r .= $_;
240}
241is ($r, 'A321', 'Reverse for list with leading value');
242$r = '';
243for (1, reverse map {$_} @array) {
244 $r .= $_;
245}
246is ($r, '1CBA', 'Reverse for array via map with leading value');
247$r = '';
248for ('A', reverse map {$_} 1,2,3) {
249 $r .= $_;
250}
251is ($r, 'A321', 'Reverse for list via map with leading value');
252$r = '';
253for ('A', reverse 1 .. 3) {
254 $r .= $_;
255}
256is ($r, 'A321', 'Reverse for list via .. with leading value');
257$r = '';
258for (1, reverse 'A' .. 'C') {
259 $r .= $_;
260}
261is ($r, '1CBA', 'Reverse for list via .. with leading value');
262
263$r = '';
264for (reverse (@array), 1) {
265 $r .= $_;
266}
267is ($r, 'CBA1', 'Reverse for array with trailing value');
268$r = '';
269for (reverse (1,2,3), 'A') {
270 $r .= $_;
271}
272is ($r, '321A', 'Reverse for list with trailing value');
273$r = '';
274for (reverse (map {$_} @array), 1) {
275 $r .= $_;
276}
277is ($r, 'CBA1', 'Reverse for array via map with trailing value');
278$r = '';
279for (reverse (map {$_} 1,2,3), 'A') {
280 $r .= $_;
281}
282is ($r, '321A', 'Reverse for list via map with trailing value');
283$r = '';
284for (reverse (1 .. 3), 'A') {
285 $r .= $_;
286}
287is ($r, '321A', 'Reverse for list via .. with trailing value');
288$r = '';
289for (reverse ('A' .. 'C'), 1) {
290 $r .= $_;
291}
292is ($r, 'CBA1', 'Reverse for list via .. with trailing value');
293
294
295$r = '';
296for $_ (1, reverse @array) {
297 $r .= $_;
298}
299is ($r, '1CBA', 'Reverse for array with leading value with explicit $_');
300$r = '';
301for $_ ('A', reverse 1,2,3) {
302 $r .= $_;
303}
304is ($r, 'A321', 'Reverse for list with leading value with explicit $_');
305$r = '';
306for $_ (1, reverse map {$_} @array) {
307 $r .= $_;
308}
309is ($r, '1CBA',
310 'Reverse for array via map with leading value with explicit $_');
311$r = '';
312for $_ ('A', reverse map {$_} 1,2,3) {
313 $r .= $_;
314}
315is ($r, 'A321', 'Reverse for list via map with leading value with explicit $_');
316$r = '';
317for $_ ('A', reverse 1 .. 3) {
318 $r .= $_;
319}
320is ($r, 'A321', 'Reverse for list via .. with leading value with explicit $_');
321$r = '';
322for $_ (1, reverse 'A' .. 'C') {
323 $r .= $_;
324}
325is ($r, '1CBA', 'Reverse for list via .. with leading value with explicit $_');
326
327$r = '';
328for $_ (reverse (@array), 1) {
329 $r .= $_;
330}
331is ($r, 'CBA1', 'Reverse for array with trailing value with explicit $_');
332$r = '';
333for $_ (reverse (1,2,3), 'A') {
334 $r .= $_;
335}
336is ($r, '321A', 'Reverse for list with trailing value with explicit $_');
337$r = '';
338for $_ (reverse (map {$_} @array), 1) {
339 $r .= $_;
340}
341is ($r, 'CBA1',
342 'Reverse for array via map with trailing value with explicit $_');
343$r = '';
344for $_ (reverse (map {$_} 1,2,3), 'A') {
345 $r .= $_;
346}
347is ($r, '321A',
348 'Reverse for list via map with trailing value with explicit $_');
349$r = '';
350for $_ (reverse (1 .. 3), 'A') {
351 $r .= $_;
352}
353is ($r, '321A', 'Reverse for list via .. with trailing value with explicit $_');
354$r = '';
355for $_ (reverse ('A' .. 'C'), 1) {
356 $r .= $_;
357}
358is ($r, 'CBA1', 'Reverse for list via .. with trailing value with explicit $_');
359
360$r = '';
361for my $i (1, reverse @array) {
362 $r .= $i;
363}
364is ($r, '1CBA', 'Reverse for array with leading value and var');
365$r = '';
366for my $i ('A', reverse 1,2,3) {
367 $r .= $i;
368}
369is ($r, 'A321', 'Reverse for list with leading value and var');
370$r = '';
371for my $i (1, reverse map {$_} @array) {
372 $r .= $i;
373}
374is ($r, '1CBA', 'Reverse for array via map with leading value and var');
375$r = '';
376for my $i ('A', reverse map {$_} 1,2,3) {
377 $r .= $i;
378}
379is ($r, 'A321', 'Reverse for list via map with leading value and var');
380$r = '';
381for my $i ('A', reverse 1 .. 3) {
382 $r .= $i;
383}
384is ($r, 'A321', 'Reverse for list via .. with leading value and var');
385$r = '';
386for my $i (1, reverse 'A' .. 'C') {
387 $r .= $i;
388}
389is ($r, '1CBA', 'Reverse for list via .. with leading value and var');
390
391$r = '';
392for my $i (reverse (@array), 1) {
393 $r .= $i;
394}
395is ($r, 'CBA1', 'Reverse for array with trailing value and var');
396$r = '';
397for my $i (reverse (1,2,3), 'A') {
398 $r .= $i;
399}
400is ($r, '321A', 'Reverse for list with trailing value and var');
401$r = '';
402for my $i (reverse (map {$_} @array), 1) {
403 $r .= $i;
404}
405is ($r, 'CBA1', 'Reverse for array via map with trailing value and var');
406$r = '';
407for my $i (reverse (map {$_} 1,2,3), 'A') {
408 $r .= $i;
409}
410is ($r, '321A', 'Reverse for list via map with trailing value and var');
411$r = '';
412for my $i (reverse (1 .. 3), 'A') {
413 $r .= $i;
414}
415is ($r, '321A', 'Reverse for list via .. with trailing value and var');
416$r = '';
417for my $i (reverse ('A' .. 'C'), 1) {
418 $r .= $i;
419}
420is ($r, 'CBA1', 'Reverse for list via .. with trailing value and var');
421
422
423$r = '';
424for (reverse 1, @array) {
425 $r .= $_;
426}
427is ($r, 'CBA1', 'Reverse for value and array');
428$r = '';
429for (reverse map {$_} 1, @array) {
430 $r .= $_;
431}
432is ($r, 'CBA1', 'Reverse for value and array via map');
433$r = '';
434for (reverse 1 .. 3, @array) {
435 $r .= $_;
436}
437is ($r, 'CBA321', 'Reverse for .. and array');
438$r = '';
439for (reverse 'X' .. 'Z', @array) {
440 $r .= $_;
441}
442is ($r, 'CBAZYX', 'Reverse for .. and array');
443$r = '';
444for (reverse map {$_} 1 .. 3, @array) {
445 $r .= $_;
446}
447is ($r, 'CBA321', 'Reverse for .. and array via map');
448$r = '';
449for (reverse map {$_} 'X' .. 'Z', @array) {
450 $r .= $_;
451}
452is ($r, 'CBAZYX', 'Reverse for .. and array via map');
453
454$r = '';
455for (reverse (@array, 1)) {
456 $r .= $_;
457}
458is ($r, '1CBA', 'Reverse for array and value');
459$r = '';
460for (reverse (map {$_} @array, 1)) {
461 $r .= $_;
462}
463is ($r, '1CBA', 'Reverse for array and value via map');
464
465$r = '';
466for $_ (reverse 1, @array) {
467 $r .= $_;
468}
469is ($r, 'CBA1', 'Reverse for value and array with explicit $_');
470$r = '';
471for $_ (reverse map {$_} 1, @array) {
472 $r .= $_;
473}
474is ($r, 'CBA1', 'Reverse for value and array via map with explicit $_');
475$r = '';
476for $_ (reverse 1 .. 3, @array) {
477 $r .= $_;
478}
479is ($r, 'CBA321', 'Reverse for .. and array with explicit $_');
480$r = '';
481for $_ (reverse 'X' .. 'Z', @array) {
482 $r .= $_;
483}
484is ($r, 'CBAZYX', 'Reverse for .. and array with explicit $_');
485$r = '';
486for $_ (reverse map {$_} 1 .. 3, @array) {
487 $r .= $_;
488}
489is ($r, 'CBA321', 'Reverse for .. and array via map with explicit $_');
490$r = '';
491for $_ (reverse map {$_} 'X' .. 'Z', @array) {
492 $r .= $_;
493}
494is ($r, 'CBAZYX', 'Reverse for .. and array via map with explicit $_');
495
496$r = '';
497for $_ (reverse (@array, 1)) {
498 $r .= $_;
499}
500is ($r, '1CBA', 'Reverse for array and value with explicit $_');
501$r = '';
502for $_ (reverse (map {$_} @array, 1)) {
503 $r .= $_;
504}
505is ($r, '1CBA', 'Reverse for array and value via map with explicit $_');
506
507
508$r = '';
509for my $i (reverse 1, @array) {
510 $r .= $i;
511}
512is ($r, 'CBA1', 'Reverse for value and array with var');
513$r = '';
514for my $i (reverse map {$_} 1, @array) {
515 $r .= $i;
516}
517is ($r, 'CBA1', 'Reverse for value and array via map with var');
518$r = '';
519for my $i (reverse 1 .. 3, @array) {
520 $r .= $i;
521}
522is ($r, 'CBA321', 'Reverse for .. and array with var');
523$r = '';
524for my $i (reverse 'X' .. 'Z', @array) {
525 $r .= $i;
526}
527is ($r, 'CBAZYX', 'Reverse for .. and array with var');
528$r = '';
529for my $i (reverse map {$_} 1 .. 3, @array) {
530 $r .= $i;
531}
532is ($r, 'CBA321', 'Reverse for .. and array via map with var');
533$r = '';
534for my $i (reverse map {$_} 'X' .. 'Z', @array) {
535 $r .= $i;
536}
537is ($r, 'CBAZYX', 'Reverse for .. and array via map with var');
538
539$r = '';
540for my $i (reverse (@array, 1)) {
541 $r .= $i;
542}
543is ($r, '1CBA', 'Reverse for array and value with var');
544$r = '';
545for my $i (reverse (map {$_} @array, 1)) {
546 $r .= $i;
547}
548is ($r, '1CBA', 'Reverse for array and value via map with var');
549
550TODO: {
551 if (do {17; foreach (1, 2) { 1; } } != 17) {
552 #print "not ";
553 todo_skip("RT #1085: what should be output of perl -we 'print do { foreach (1, 2) { 1; } }'");
554 }
555}
556
557TODO: {
558 local $TODO = "RT #2166: foreach spuriously autovivifies";
559 my %h;
560 foreach (@h{a, b}) {}
561 if(keys(%h)) {
562 todo_skip("RT #2166: foreach spuriously autovivifies");
563 }
564}
a600f7e6
FC
565
566sub {
567 foreach (@_) {
568 is eval { \$_ }, \undef, 'foreach (@array_containing_undef)'
569 }
570}->(undef);
031c6d82
FC
571
572SKIP: {
573 skip "No XS::APItest under miniperl", 1, if is_miniperl;
7a258a81 574 skip "no XS::APItest", 1 if !eval { require XS::APItest };
031c6d82
FC
575 my @a;
576 sub {
031c6d82
FC
577 XS::APItest::alias_av(\@a, 0, undef);
578 eval { \$_[0] }
579 }->($a[0]);
580 is $@, "", 'vivify_defelem does not croak on &PL_sv_undef elements';
581}