-
Notifications
You must be signed in to change notification settings - Fork 135
/
disorganized.t
152 lines (120 loc) · 3.69 KB
/
disorganized.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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
use v6;
use Test;
plan 41;
=begin pod
This tests the smartmatch operator, defined in L<S03/"Smart matching">
=end pod
sub eval_elsewhere($code){ eval($code) }
#L<S03/Smart matching/Any undef undefined not .defined>
{
ok("foo" ~~ .defined, "foo is ~~ .defined");
#?pugs todo
nok "foo" !~~ .defined, 'not foo !~~ .defined';
nok((Mu ~~ .defined), "Mu is not .defined");
}
# TODO:
# Set Set
# Hash Set
# Any Set
# Set Array
# Set Hash
# Any Hash
# Regex tests are in spec/S05-*
#L<S03/"Smart matching"/in range>
{
# more range tests in t/spec/S03-operators/range.t
#?pugs todo
ok((5 ~~ 1 .. 10), "5 is in 1 .. 10");
ok(!(10 ~~ 1 .. 5), "10 is not in 1 .. 5");
ok(!(1 ~~ 5 .. 10), "1 is not i n 5 .. 10");
ok(!(5 ~~ 5 ^..^ 10), "5 is not in 5 .. 10, exclusive");
};
# TODO:
# Signature Signature
# Callable Signature
# Capture Signature
# Any Signature
# Signature Capture
# reviewed by moritz on 2009-07-07 up to here.
=begin Explanation
You may be wondering what the heck is with all these try blocks.
Prior to r12503, this test caused a horrible death of Pugs which
magically went away when used inside an eval. So the try blocks
caught that case.
=end Explanation
{
my $result = 0;
my $parsed = 0;
my @x = 1..20;
try {
$result = all(@x) ~~ { $_ < 21 };
$parsed = 1;
};
ok $parsed, 'C<all(@x) ~~ { ... }> parses';
ok ?$result, 'C<all(@x) ~~ { ... } when true for all';
$result = 0;
try {
$result = !(all(@x) ~~ { $_ < 20 });
};
#?pugs todo
ok $result,
'C<all(@x) ~~ {...} when true for one';
$result = 0;
try {
$result = !(all(@x) ~~ { $_ < 12 });
};
#?pugs todo
ok $result, 'C<all(@x) ~~ {...} when true for most';
$result = 0;
try {
$result = !(all(@x) ~~ { $_ < 1 });
};
ok $result, 'C<all(@x) ~~ {...} when true for one';
};
# need to test in eval() since class definitions happen at compile time,
# ie before the plan is set up.
eval_lives_ok 'class A { method foo { return "" ~~ * } }; A.new.foo',
'smartmatch in a class lives (RT 62196)';
# RT #69762
#?pugs skip 'Callable'
{
ok sub {} ~~ Callable, '~~ Callable (true)';
nok 68762 ~~ Callable, '~~ Callable (false)';
ok 69762 !~~ Callable, '!~~ Callable (true)';
nok sub {} !~~ Callable, '!~~ Callable (false)';
ok sub {} ~~ Routine, '~~ Routine (true)';
nok 68762 ~~ Routine, '~~ Routine (false)';
ok 69762 !~~ Routine, '!~~ Routine (true)';
nok sub {} !~~ Routine, '!~~ Routine (false)';
ok sub {} ~~ Sub, '~~ Sub (true)';
nok 68762 ~~ Sub, '~~ Sub (false)';
ok 69762 !~~ Sub, '!~~ Sub (true)';
nok sub {} !~~ Sub, '!~~ Sub (false)';
ok sub {} ~~ Block, '~~ Block (true)';
nok 68762 ~~ Block, '~~ Block (false)';
ok 69762 !~~ Block, '!~~ Block (true)';
nok sub {} !~~ Block, '!~~ Block (false)';
ok sub {} ~~ Code, '~~ Code (true)';
nok 68762 ~~ Code, '~~ Code (false)';
ok 69762 !~~ Code, '!~~ Code (true)';
nok sub {} !~~ Code, '!~~ Code (false)';
}
{
class RT68762 { our method rt68762 {} };
ok &RT68762::rt68762 ~~ Method, '~~ Method (true)';
nok 68762 ~~ Method, '~~ Method (false)';
ok 69762 !~~ Method, '!~~ Method (true)';
nok &RT68762::rt68762 !~~ Method, '!~~ Method (false)';
}
# RT 72048
{
role RT72048_role {}
class RT72048_class does RT72048_role {}
ok RT72048_class.new ~~ RT72048_role, 'class instance matches role';
nok RT72048_class.new !~~ RT72048_role, 'class instance !!matches role';
}
#?pugs todo
ok "foo" ~~ *, 'thing ~~ * is true';
ok ("foo" ~~ *) ~~ Bool, 'thing ~~ * is a boolean';
done();
# vim: ft=perl6