4 # grep() and map() tests
12 my ($got,$expect) = @_;
13 print "# expected [$expect], got [$got]\nnot " if $got ne $expect;
18 my @lol = ([qw(a b c)], [], [qw(1 2 3)]);
19 my @mapped = map {scalar @$_} @lol;
20 ok "@mapped", "3 0 3";
23 my @grepped = grep {scalar @$_} @lol;
24 ok "@grepped", "$lol[0] $lol[2]";
27 @grepped = grep { $_ } @mapped;
33 print map({$_} ("ok $test\n"));
36 ({$_} ("ok $test\n"));
38 print((map({a => $_}, ("ok $test\n")))[0]->{a});
42 ("ok $test\n")))[0]->{a});
44 print map { $_ } ("ok $test\n");
47 { $_ } ("ok $test\n");
49 print((map {a => $_}, ("ok $test\n"))[0]->{a});
53 ("ok $test\n"))[0]->{a});
55 my $x = "ok \xFF\xFF\n";
56 print map($_&$x,("ok $test\n"));
59 ($_ & $x, ("ok $test\n"));
61 print map { $_ & $x } ("ok $test\n");
64 { $_&$x } ("ok $test\n");
67 print grep({$_} ("ok $test\n"));
70 ({$_} ("ok $test\n"));
72 print grep({a => $_}->{a}, ("ok $test\n"));
78 print grep { $_ } ("ok $test\n");
81 { $_ } ("ok $test\n");
83 print grep {a => $_}->{a}, ("ok $test\n");
89 print grep($_&"X",("ok $test\n"));
92 ($_&"X", ("ok $test\n"));
94 print grep { $_ & "X" } ("ok $test\n");
97 { $_ & "X" } ("ok $test\n");
101 # Tests for "for" in "map" and "grep"
102 # Used to dump core, bug [perl #17771]
107 @x = map { $y .= $_ for 1..2; 1 } 3..4;
109 print "@x,$y" eq "1 1,1212" ? "ok $test\n" : "not ok $test\n";
112 @x = map { $y .= $_ for 1..2; $y .= $_ } 3..4;
114 print "@x,$y" eq "123 123124,123124" ? "ok $test\n" : "not ok $test\n";
117 @x = map { for (1..2) { $y .= $_ } $y .= $_ } 3..4;
119 print "@x,$y" eq "123 123124,123124" ? "ok $test\n" : "not ok $test\n";
122 @x = grep { $y .= $_ for 1..2; 1 } 3..4;
124 print "@x,$y" eq "3 4,1212" ? "ok $test\n" : "not ok $test\n";
127 @x = grep { for (1..2) { $y .= $_ } 1 } 3..4;
129 print "@x,$y" eq "3 4,1212" ? "ok $test\n" : "not ok $test\n";
132 # Add also a sample test from [perl #18153]. (The same bug).
133 $a = 1; map {if ($a){}} (2);
134 print "ok $test\n"; # no core dump is all we need
142 ok join("-",add_an_x(1,2,3,4)), "1x-2x-3x-4x";
150 my $want = wantarray();
152 $gimme = $want ? 'list' : 'scalar';
160 undef $gimme; gimme for @list; ok($gimme, 'void'); $test++;
161 undef $gimme; grep { gimme } @list; ok($gimme, 'scalar'); $test++;
162 undef $gimme; map { gimme } @list; ok($gimme, 'list'); $test++;