Changeset 21173

Show
Ignore:
Timestamp:
07/03/08 13:36:59 (2 months ago)
Author:
moritz
Message:

[t] statements/for.t: major cleanup

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • t/statements/for.t

    r21161 r21173  
    2121=cut 
    2222 
    23 plan 44
     23plan 40
    2424 
    2525## No foreach 
     
    2727{ 
    2828    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'
    3131        "foreach is gone, even with parens"; 
    3232    is $times_run, 0, "foreach doesn't work"; 
     
    3636# L<S04/The C<for> statement/always takes a list as an argument> 
    3737 
    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 
    4345# L<S04/The C<for> statement/to the closure:> 
    4446 
    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' 
    5954{ 
    6055    my $str; 
    6156    my @a = 1..3; 
    6257    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    } 
    6761    }; 
    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
    7664 
    7765# ... 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
    8373 
    8474## 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
    10187 
    10288# ... 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
    10896 
    10997# ... with implicit topic 
    11098 
    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
    121113 
    122114## and now for with 'topical' variables 
     
    142134is($k, '012345', 'for @array {} works'); 
    143135 
    144 # ... with 'pointer' 
     136# ... with pointy blocks 
    145137 
    146138my @array_l = (0 .. 5); 
     
    148140for @array_l -> $_ { $l = $l ~ $_; }; 
    149141is($l, '012345', 'for @array -> {} works'); 
    150  
    151 # ... with sub 
    152  
    153 my @array_m = (0 .. 5); 
    154 my $m; 
    155 for (@array_m) sub { $m = $m ~ $_; }; 
    156 is($m, '012345', 'for @array sub {} works'); 
    157142 
    158143# ... with referential sub 
     
    171156is($o, '012345', 'for (@array) {} works'); 
    172157 
    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 
    186166 
    187167# ... 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
    194175 
    195176my @elems = <a b c d e>; 
     
    220201 
    221202# 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
    252248 
    253249 
     
    305301# list context 
    306302 
    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