-
Notifications
You must be signed in to change notification settings - Fork 135
/
autovivification.t
67 lines (54 loc) · 1.39 KB
/
autovivification.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
use v6;
use Test;
plan 10;
# L<S09/Autovivification/In Perl 6 these read-only operations are indeed non-destructive:>
{
my %a;
my $b = %a<b><c>;
is %a.keys.elems, 0, "fetching doesn't autovivify.";
ok !defined($b), 'and the return value is not defined';
}
#?rakudo skip 'Undef to integer'
{
my %a;
my $b = so %a<b><c>:exists;
is %a.keys.elems, 0, "exists doesn't autovivify.";
nok $b, '... and it returns the right value';
}
# L<S09/Autovivification/But these bindings do autovivify:>
{
my %a;
bar(%a<b><c>);
is %a.keys.elems, 0, "in ro arguments doesn't autovivify.";
}
#?rakudo skip 'get_pmc_keyed() not implemented in class Undef'
{
my %a;
my $b := %a<b><c>;
is %a.keys.elems, 1, 'binding autovivifies.';
nok defined($b), '... to an undefined value';
}
#?rakudo skip 'prefix:<\\>'
#?niecza skip 'disagree; captures should be context neutral'
{
my %a;
my $b = \%a<b><c>;
is %a.keys.elems, 1, 'capturing autovivifies.';
}
#?rakudo skip 'get_pmc_keyed() not implemented in class Undef'
{
my %a;
foo(%a<b><c>);
is %a.keys.elems, 1, 'in rw arguments autovivifies.';
}
{
my %a;
%a<b><c> = 1;
is %a.keys.elems, 1, 'store autovivify.';
}
sub foo ($baz is rw) { #OK not used
# just some random subroutine.
}
# readonly signature, should it autovivify?
sub bar ($baz is readonly) { } #OK not used
# vim: ft=perl6