Changeset 21173
- Timestamp:
- 07/03/08 13:36:59 (2 months ago)
- Files:
-
- t/statements/for.t (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
t/statements/for.t
r21161 r21173 21 21 =cut 22 22 23 plan 4 4;23 plan 40; 24 24 25 25 ## No foreach … … 27 27 { 28 28 my $times_run = 0; 29 ok (! eval 'foreach 1..10 { $times_run++ }; 1'), "foreach is gone";30 ok (! eval 'foreach (1..10) { $times_run++}; 1'),29 eval_dies_ok 'foreach 1..10 { $times_run++ }; 1', "foreach is gone"; 30 eval_dies_ok 'foreach (1..10) { $times_run++}; 1', 31 31 "foreach is gone, even with parens"; 32 32 is $times_run, 0, "foreach doesn't work"; … … 36 36 # L<S04/The C<for> statement/always takes a list as an argument> 37 37 38 my $a; 39 for 0 .. 5 { $a = $a ~ $_; }; 40 is($a, '012345', 'for 0..5 {} works'); 41 42 # ... with 'pointer' 38 { 39 my $a; 40 for 0 .. 5 { $a = $a ~ $_; }; 41 is($a, '012345', 'for 0..5 {} works'); 42 } 43 44 # ... with pointy blocks 43 45 # L<S04/The C<for> statement/to the closure:> 44 46 45 my $b; 46 for 0 .. 5 -> $_ { $b = $b ~ $_; }; 47 is($b, '012345', 'for 0 .. 5 -> {} works'); 48 49 { 50 my $str; 51 my @a = 1..3; 52 my @b = 4..6; 53 for each(@a; @b) -> $x, $y { 54 $str ~= "($x $y)"; 55 } 56 is $str, "(1 4)(2 5)(3 6)", 'for each(@a; @b) -> $x, $y works'; 57 } 58 47 { 48 my $b; 49 for 0 .. 5 -> $_ { $b = $b ~ $_; }; 50 is($b, '012345', 'for 0 .. 5 -> {} works'); 51 } 52 53 #?pugs eval 'todo: slice context' 59 54 { 60 55 my $str; 61 56 my @a = 1..3; 62 57 my @b = 5..6; 63 eval q{ 64 for zip(@a; @b) -> [$x, $y] { 65 $str ~= "($x $y)"; 66 } 58 for zip(@a; @b) -> $x, $y { 59 $str ~= "($x $y)"; 60 } 67 61 }; 68 is $str, "(1 5)(2 4)(3 6)", 'for zip(@a; @b) -> [$x, $y] works', :todo<bug>; 69 } 70 71 # ... with sub 72 73 my $c; 74 for (0 .. 5) sub { $c = $c ~ $_; }; 75 is($c, '012345', 'for 0 .. 5 sub {} works'); 62 is $str, "(1 5)(2 4)(3 6)", 'for zip(@a; @b) -> $x, $y works'; 63 } 76 64 77 65 # ... with referential sub 78 79 my $d; 80 sub some_sub_1 ($arg) { $d = $d ~ $arg; } 81 for (0 .. 5) { .some_sub_1 }; 82 is($d, '012345', 'for 0 .. 5 { .some_sub } works'); 66 #?rakudo skip 'implicit invocant' 67 { 68 my $d; 69 sub some_sub_1 ($arg) { $d = $d ~ $arg; } 70 for 0 .. 5 { .some_sub_1 }; 71 is($d, '012345', 'for 0 .. 5 { .some_sub } works'); 72 } 83 73 84 74 ## and now with parens around the range operator 85 86 my $e; 87 for (0 .. 5) { $e = $e ~ $_; }; 88 is($e, '012345', 'for () {} works'); 89 90 # ... with 'pointer' 91 92 my $f; 93 for (0 .. 5) -> $_ { $f = $f ~ $_; }; 94 is($f, '012345', 'for () -> {} works'); 95 96 # ... with sub 97 98 my $g; 99 for (0 .. 5) sub { $g = $g ~ $_; }; 100 is($g, '012345', 'for (0 .. 5) sub {} works'); 75 { 76 my $e; 77 for (0 .. 5) { $e = $e ~ $_; }; 78 is($e, '012345', 'for () {} works'); 79 } 80 81 # ... with pointy blocks 82 { 83 my $f; 84 for (0 .. 5) -> $_ { $f = $f ~ $_; }; 85 is($f, '012345', 'for () -> {} works'); 86 } 101 87 102 88 # ... with referential sub 103 104 my $h; 105 sub some_sub_2 ($arg) { $h = $h ~ $arg; } 106 for (0 .. 5) { .some_sub_2 }; 107 is($h, '012345', 'for (0 .. 5) { .some_sub } works'); 89 #?rakudo skip 'implicit invocant' 90 { 91 my $h; 92 sub some_sub_2 ($arg) { $h = $h ~ $arg; } 93 for (0 .. 5) { .some_sub_2 }; 94 is($h, '012345', 'for (0 .. 5) { .some_sub } works'); 95 } 108 96 109 97 # ... with implicit topic 110 98 111 $_ = "GLOBAL VALUE"; 112 for "INNER VALUE" { 113 is( .lc, "inner value", "Implicit default topic is seen by lc()"); 114 }; 115 is($_,"GLOBAL VALUE","After the loop the implicit topic gets restored"); 116 117 $_ = "GLOBAL VALUE"; 118 is( .lc, "inner value", "Implicit default topic is seen by lc()" ) 119 for "INNER VALUE"; 120 is($_,"GLOBAL VALUE","After the loop the implicit topic gets restored"); 99 #?rakudo skip 'implicit invocant' 100 { 101 $_ = "GLOBAL VALUE"; 102 for "INNER VALUE" { 103 is( .lc, "inner value", "Implicit default topic is seen by lc()"); 104 }; 105 is($_,"GLOBAL VALUE","After the loop the implicit topic gets restored"); 106 107 # as statement modifier 108 $_ = "GLOBAL VALUE"; 109 is( .lc, "inner value", "Implicit default topic is seen by lc()" ) 110 for "INNER VALUE"; 111 is($_,"GLOBAL VALUE","After the loop the implicit topic gets restored"); 112 } 121 113 122 114 ## and now for with 'topical' variables … … 142 134 is($k, '012345', 'for @array {} works'); 143 135 144 # ... with 'pointer'136 # ... with pointy blocks 145 137 146 138 my @array_l = (0 .. 5); … … 148 140 for @array_l -> $_ { $l = $l ~ $_; }; 149 141 is($l, '012345', 'for @array -> {} works'); 150 151 # ... with sub152 153 my @array_m = (0 .. 5);154 my $m;155 for (@array_m) sub { $m = $m ~ $_; };156 is($m, '012345', 'for @array sub {} works');157 142 158 143 # ... with referential sub … … 171 156 is($o, '012345', 'for (@array) {} works'); 172 157 173 # ... with 'pointer' 174 175 my @array_p = (0 .. 5); 176 my $p; 177 for (@array_p) -> $_ { $p = $p ~ $_; }; 178 is($p, '012345', 'for (@array) -> {} works'); 179 180 # ... with sub 181 182 my @array_q = (0 .. 5); 183 my $q; 184 for (@array_q) sub { $q ~= $_; }; 185 is($q, '012345', 'for (@array) sub {} works'); 158 # ... with pointy blocks 159 { 160 my @array_p = (0 .. 5); 161 my $p; 162 for (@array_p) -> $_ { $p = $p ~ $_; }; 163 is($p, '012345', 'for (@array) -> {} works'); 164 } 165 186 166 187 167 # ... with referential sub 188 189 my @array_r = (0 .. 5); 190 my $r; 191 sub some_sub_4 ($arg) { $r ~= $arg; } 192 for (@array_r) { .some_sub_4 }; 193 is($r, '012345', 'for (@array) { .some_sub } works'); 168 { 169 my @array_r = (0 .. 5); 170 my $r; 171 sub some_sub_4 ($arg) { $r ~= $arg; } 172 for (@array_r) { .some_sub_4 }; 173 is($r, '012345', 'for (@array) { .some_sub } works'); 174 } 194 175 195 176 my @elems = <a b c d e>; … … 220 201 221 202 # for with "is rw" 222 223 my @array_s = (0..2); 224 my @s = (1..3); 225 for @array_s { $_++ }; 226 is(@array_s, @s, 'for @array { $_++ }'); 227 228 my @array_t = (0..2); 229 my @t = (1..3); 230 for @array_t -> $val is rw { $val++ }; 231 is(@array_t, @t, 'for @array -> $val is rw { $val++ }'); 232 233 my @array_v = (0..2); 234 my @v = (1..3); 235 try { for @array_v.values -> $val is rw { $val++ }; }; 236 is(@array_v, @v, 'for @array.values -> $val is rw { $val++ }', :todo<feature>); 237 238 my @array_kv = (0..2); 239 my @kv = (1..3); 240 try { for @array_kv.kv -> $key, $val is rw { $val++ }; }; 241 is(@array_kv, @kv, 'for @array.kv -> $key, $val is rw { $val++ }', :todo<feature>); 242 243 my %hash_v = ( a => 1, b => 2, c => 3 ); 244 my %v = ( a => 2, b => 3, c => 4 ); 245 try { for %hash_v.values -> $val is rw { $val++ }; }; 246 is(%hash_v, %v, 'for %hash.values -> $val is rw { $val++ }', :todo<feature>); 247 248 my %hash_kv = ( a => 1, b => 2, c => 3 ); 249 my %kv = ( a => 2, b => 3, c => 4 ); 250 try { for %hash_kv.kv -> $key, $val is rw { $val++ }; }; 251 is( %hash_kv.sort, %kv.sort, 'for %hash.kv -> $key, $val is rw { $val++ }', :todo<feature>); 203 { 204 my @array_s = (0..2); 205 my @s = (1..3); 206 for @array_s { $_++ }; 207 is(@array_s, @s, 'for @array { $_++ }'); 208 } 209 210 { 211 my @array_t = (0..2); 212 my @t = (1..3); 213 for @array_t -> $val is rw { $val++ }; 214 is(@array_t, @t, 'for @array -> $val is rw { $val++ }'); 215 } 216 217 #?pugs eval 'todo' 218 { 219 my @array_v = (0..2); 220 my @v = (1..3); 221 for @array_v.values -> $val is rw { $val++ }; 222 is(@array_v, @v, 'for @array.values -> $val is rw { $val++ }'; 223 } 224 225 #?pugs eval 'todo' 226 { 227 my @array_kv = (0..2); 228 my @kv = (1..3); 229 for @array_kv.kv -> $key, $val is rw { $val++ }; 230 is(@array_kv, @kv, 'for @array.kv -> $key, $val is rw { $val++ }'); 231 } 232 233 #?pugs eval 'todo' 234 { 235 my %hash_v = ( a => 1, b => 2, c => 3 ); 236 my %v = ( a => 2, b => 3, c => 4 ); 237 for %hash_v.values -> $val is rw { $val++ }; 238 is(%hash_v, %v, 'for %hash.values -> $val is rw { $val++ }'); 239 } 240 241 #?pugs eval 'todo' 242 { 243 my %hash_kv = ( a => 1, b => 2, c => 3 ); 244 my %kv = ( a => 2, b => 3, c => 4 ); 245 try { for %hash_kv.kv -> $key, $val is rw { $val++ }; }; 246 is( %hash_kv.sort, %kv.sort, 'for %hash.kv -> $key, $val is rw { $val++ }'); 247 } 252 248 253 249 … … 305 301 # list context 306 302 307 $a = ''; 308 for 1..3, 4..6 { $a =~ $_.WHAT }; 309 is($a, 'IntIntIntIntIntInt', 'List context'); 310 311 $a = ''; 312 for [1..3, 4..6] { $a =~ $_.WHAT }; 313 is($a, 'Array', 'List context'); 314 315 $a = ''; 316 for [1..3], [4..6] { $a =~ $_.WHAT }; 317 is($a, 'ArrayArray', 'List context'); 303 { 304 $a = ''; 305 for 1..3, 4..6 { $a =~ $_.WHAT }; 306 is($a, 'IntIntIntIntIntInt', 'List context'); 307 308 $a = ''; 309 for [1..3, 4..6] { $a =~ $_.WHAT }; 310 is($a, 'Array', 'List context'); 311 312 $a = ''; 313 for [1..3], [4..6] { $a =~ $_.WHAT }; 314 is($a, 'ArrayArray', 'List context'); 315 }
