-
Notifications
You must be signed in to change notification settings - Fork 135
/
for.t
117 lines (97 loc) · 2.21 KB
/
for.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
use v6;
use Test;
plan 20;
# L<S04/"Conditional statements"/Conditional statement modifiers work as in Perl 5>
# test the for statement modifier
{
my $a = '';
$a ~= $_ for ('a', 'b', 'a', 'b', 'a');
is($a, "ababa", "post for with parens");
}
# without parens
{
my $a = '';
$a ~= $_ for 'a', 'b', 'a', 'b', 'a';
is($a, "ababa", "post for without parens");
}
{
my $a = 0;
$a += $_ for (1 .. 10);
is($a, 55, "post for 1 .. 10 with parens");
}
{
my $a = 0;
$a += $_ for 1 .. 10;
is($a, 55, "post for 1 .. 10 without parens");
}
{
my @a = (5, 7, 9);
my $a = 3;
$a *= $_ for @a;
is($a, 3 * 5 * 7 * 9, "post for array");
}
{
my @a = (5, 7, 9);
my $i = 5;
my sub check(Int $n){
is($n, $i, "sub Int with post for");
$i += 2;
}
check $_ for @a;
}
{
my $a = "";
$a ~= "<$_>" for "hello";
is $a, "<hello>", 'iterating one constant element works';
}
{
my $a = ""; my $v = "hello";
$a ~= "<$_>" for $v;
is $a, "<hello>", 'iterating one variable element works';
}
#?niecza todo "closure for"
#?pugs todo
{
my $a = 0;
{ $a++ } for 1..3;
is $a, 3, 'the closure was called';
}
#?niecza todo "closure for"
#?pugs todo
{
my $a = 0;
-> $i { $a += $i } for 1..3;
is $a, 6, 'the closure was called';
}
# L<S04/The C<for> statement/for and given privately temporize>
{
my $i = 0;
$_ = 10;
$i += $_ for 1..3;
#?pugs todo
is $_, 10, 'outer $_ did not get updated in lhs of for';
is $i, 1+2+3, 'postfix for worked';
}
# L<S04/The C<for> statement/When used as statement modifiers on implicit blocks>
#?pugs skip "Can't modify constant item: VInt 3"
{
$_ = 42;
my @trace;
@trace.push: $_ for 2, 3;
is @trace.join(':'), '2:3', 'statement modifier "for" sets $_ correctl';
is $_, 42, '"for" statement modifier restored $_ of outer block';
}
# RT 66622
{
my $rt66622 = 66622 for 1, 2, 3;
is $rt66622, 66622, 'statement modifier "for" makes no implicit block';
}
eval_dies_ok '1 for <a b> for <c d>;', 'double statement-modifying for is not allowed';
# RT #66606
{
my $x = 1 for ^3;
is $x, 1;
(my @a).push: $_ for ^3;
is @a.join(','), '0,1,2';
}
# vim: ft=perl6