-
Notifications
You must be signed in to change notification settings - Fork 135
/
eqv.t
169 lines (139 loc) · 4.4 KB
/
eqv.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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
use v6;
use Test;
plan 54;
# L<S03/Comparison semantics/Binary eqv tests equality much like === does>
# L<S32::Basics/Any/"=item eqv">
# eqv on values
{
ok (1 eqv 1), "eqv on values (1)";
ok (0 eqv 0), "eqv on values (2)";
ok !(0 eqv 1), "eqv on values (3)";
}
# Value types
{
my $a = 1;
my $b = 1;
ok $a eqv $a, "eqv on value types (1-1)";
ok $b eqv $b, "eqv on value types (1-2)";
ok $a eqv $b, "eqv on value types (1-3)";
}
{
my $a = 1;
my $b = 2;
ok ($a eqv $a), "eqv on value types (2-1)";
ok ($b eqv $b), "eqv on value types (2-2)";
ok !($a eqv $b), "eqv on value types (2-3)";
}
#?rakudo skip 'binding NYI'
#?niecza skip 'Cannot use value like Capture as a number'
{
my @a = (1,2,3);
my @b = (1,2,3);
ok (\@a eqv \@a), "eqv on array references (1)";
ok (\@b eqv \@b), "eqv on array references (2)";
#?pugs todo
ok !(\@a eqv \@b), "eqv on array references (3)";
@a := @b;
ok \@a eqv \@b, '\@array of two bound arrays are eqv';
}
#?niecza skip 'Cannot use value like Capture as a number'
{
my $a = \3;
my $b = \3;
ok ($a eqv $a), "eqv on scalar references (1-1)";
ok ($b eqv $b), "eqv on scalar references (1-2)";
ok ($a eqv $b), "eqv on scalar references (1-3)";
#?rakudo skip 'infix:<!eqv>'
#?pugs todo
ok (\$a !eqv \$b), "eqv on scalar references (1-4)";
}
#?niecza skip 'Cannot use value like Block as a number'
{
my $a = { 3 };
my $b = { 3 };
ok ($a eqv $a), "eqv on sub references (1-1)";
ok ($b eqv $b), "eqv on sub references (1-2)";
# it's impossible to compare blocks for equivalence in general,
# and they have associations to different source locations
# (line number, column)
nok ($a eqv $b), "eqv on sub references (1-3)";
nok ($a eqv { 5 }), 'eqv on sub references (1-4)';
}
#?niecza skip 'Cannot use value like Sub as a number'
{
ok (&say eqv &say), "eqv on sub references (2-1)";
ok (&map eqv &map), "eqv on sub references (2-2)";
ok !(&say eqv &map), "eqv on sub references (2-3)";
}
#?niecza skip 'Cannot use value like Capture as a number'
{
my $num = 3; my $a = \$num;
my $b = \$num;
ok ($a eqv $a), "eqv on scalar references (2-1)";
ok ($b eqv $b), "eqv on scalar references (2-2)";
ok ($a eqv $b), "eqv on scalar references (2-3)";
}
{
nok ([1,2,3] eqv [4,5,6]), "eqv on anonymous array references (1)";
ok ([1,2,3] eqv [1,2,3]), "eqv on anonymous array references (2)";
ok ([] eqv []), "eqv on anonymous array references (3)";
}
{
ok !({a => 1} eqv {a => 2}), "eqv on anonymous hash references (-)";
#?pugs todo
ok ({a => 1} eqv {a => 1}), "eqv on anonymous hash references (+)";
#?pugs todo
ok ({a => 2, b => 1} eqv { b => 1, a => 2}), 'order really does not matter';
ok !({a => 1} eqv {a => 1, b => 2}), 'hashes: different number of pairs';
}
#?rakudo skip 'captures'
#?niecza skip 'Cannot use value like Capture as a number'
{
ok !(\3 eqv \4), "eqv on anonymous scalar references (1)";
# XXX the following seems bogus nowadays
#?pugs 2 todo
ok !(\3 eqv \3), "eqv on anonymous scalar references (2)";
ok !(\Mu eqv \Mu), "eqv on anonymous scalar references (3)";
}
# Chained eqv (not specced, but obvious)
{
ok (3 eqv 3 eqv 3), "chained eqv (1)";
ok !(3 eqv 3 eqv 4), "chained eqv (2)";
}
# Subparam binding doesn't affect eqv test
{
my $foo;
my $test = -> $arg { $foo eqv $arg };
$foo = 3;
ok $test($foo), "subparam binding doesn't affect eqv (1)";
ok $test(3), "subparam binding doesn't affect eqv (2)";
ok !$test(4), "subparam binding doesn't affect eqv (3)";
my $bar = 4;
ok !$test($bar), "subparam binding doesn't affect eqv (4)";
}
{
is(1 eqv 1, Bool::True, 'eqv returns Bool::True when true');
is(0 eqv 1, Bool::False, 'eqv returns Bool::False when false');
}
{
is Any eqv Any, Bool::True, 'Any eqv Any';
}
#?pugs skip "autothreaded?"
{
ok 'a' eqv any <a b c>, "eqv autothreads correctly";
}
# RT #75322 - Rakudo used to be confused when lists began with ()
{
#?niecza todo
nok ((), "x") eqv ((), 9), 'list starting with () - 1';
nok ((), (), 1) eqv ((), 9), 'list starting with () - 1';
nok ((), (), (), 1) eqv ((), (), ""), 'list starting with () - 1';
nok ((), (), (), 1) eqv ((), 4), 'list starting with () - 1';
ok ((), ()) eqv ((), ()), '((), ())';
}
# Nieczabug #142
{
nok 4 eqv 4.0, "Values should be eqv only if they are the same type";
nok 4 eqv '4', 'Str vs. Int';
}
# vim: ft=perl6