-
Notifications
You must be signed in to change notification settings - Fork 135
/
inplace.t
105 lines (86 loc) · 2.36 KB
/
inplace.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
use v6;
use Test;
# L<S03/Assignment operators/A op= B>
plan 31;
{
my @a = (1, 2, 3);
lives-ok({@a .= map: { $_ + 1 }}, '.= runs with block');
is(@a[0], 2, 'inplace map [0]');
is(@a[1], 3, 'inplace map [1]');
is(@a[2], 4, 'inplace map [2]');
}
{
my @b = <foo 123 bar 456 baz>;
lives-ok { @b.=grep(/<[a..z]>/)},
'.= works without surrounding whitespace';
is @b[0], 'foo', 'inplace grep [0]';
is @b[1], 'bar', 'inplace grep [1]';
is @b[2], 'baz', 'inplace grep [2]';
}
{
my $a=3.14;
$a .= Int;
is($a, 3, "inplace int");
}
#?rakudo skip "Method '' not found for invocant of class 'Str' RT #124528"
{
my $b = "a_string"; $b .= WHAT;
my $c = 42; $c .= WHAT;
my $d = 42.23; $d .= WHAT;
my @e = <a b c d>; @e .= WHAT;
isa-ok($b, Str, "inplace WHAT of a Str");
isa-ok($c, Int, "inplace WHAT of a Num");
isa-ok($d, Rat, "inplace WHAT of a Rat");
isa-ok(@e[0], Array, "inplace WHAT of an Array");
}
my $f = "lowercase"; $f .= uc;
my $g = "UPPERCASE"; $g .= lc;
my $h = "lowercase"; $h .= tc;
is($f, "LOWERCASE", "inplace uc");
is($g, "uppercase", "inplace lc");
is($h, "Lowercase", "inplace tc");
# L<S12/"Mutating methods">
my @b = <z a b d e>;
@b .= sort;
is ~@b, "a b d e z", "inplace sort";
{
$_ = -42;
.=abs;
is($_, 42, '.=foo form works on $_');
}
# RT #64268
{
my @a = 1,3,2;
my @a_orig = @a;
my @b = @a.sort: {1};
is @b, @a_orig, 'worked: @a.sort: {1}';
@a.=sort: {1};
is @a, @a_orig, 'worked: @a.=sort: {1}';
@a.=sort;
is @a, [1,2,3], 'worked: @a.=sort';
}
# RT #70676
{
my $x = 5.5;
$x .= Int;
isa-ok $x, Int, '.= Int (type)';
is $x, 5, '.= Int (value)';
$x = 3;
$x .= Str;
isa-ok $x, Str, '.= Str (type)';
is $x, '3', '.= Str (value)';
$x = 15;
$x .= Bool;
isa-ok $x, Bool, '.= Bool (type)';
is $x, True, '.= Bool (value)';
}
# RT #69204
{
my $a = 'oh hai';
my $b = 'uc';
is $a.="uc"(), 'OH HAI', 'quoted method call with .= works with parens';
is $a.="$b"(), 'OH HAI', 'quoted method call (variable) with .= works with parens';
is $a .= "uc"(), 'OH HAI', 'quoted method call with .= works with parens and whitespace';
is $a .= "$b"(), 'OH HAI', 'quoted method call (variable) with .= works with parens and whitespace';
}
# vim: ft=perl6