/
nil.t
49 lines (38 loc) 路 1.26 KB
/
nil.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
use v6;
use Test;
# note that Nil is not actually a type, but just an empty parcel
plan 15;
sub empty_sub {}
sub empty_do { do {} }
sub empty_branch_true { if 1 {} else { 1; } }
sub empty_branch_false { if 0 { 1; } else {} }
sub bare_return { return; }
sub rt74448 { eval '' }
ok empty_sub() ~~ Nil, 'empty sub returns Nil';
ok empty_do() ~~ Nil, 'do {} is Nil';
ok empty_branch_true() ~~ Nil, 'if 1 {} is Nil';
ok empty_branch_false() ~~ Nil, 'else {} is Nil';
ok bare_return() ~~ Nil, 'bare return returns Nil';
ok rt74448() ~~ Nil, 'eval of empty string is Nil';
nok Nil.defined, 'Nil is not defined';
ok ().defined, '() is defined';
nok (my $x = Nil).defined, 'assigning Nil to scalar leaves it undefined';
ok (my $y = ()).defined, 'assigning () to scalar results in a defined parcel';
# RT #63894
{
my $calls;
sub return_nil { $calls++; return; }
$calls = 0;
ok return_nil() ~~ Nil, 'return_nil() ~~ Nil';
is return_nil().WHAT, 'Nil()', 'return_nil().WHAT says Nil';
is $calls, 2, 'return_nil() called twice';
my $n = return_nil();
nok $n.defined, 'variable holding nil is not defined';
}
{
my $x = 0;
$x++ for Nil;
is $x, 0, '$Statement for Nil; does zero iterations';
}
done;
# vim: ft=perl6