-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_operations.lang
172 lines (163 loc) · 8.34 KB
/
test_operations.lang
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
170
171
172
lang.name = Lang Tests (Operations)
lang.version = v1.0.0
lang.test = 1
# Preparation
$void = func.randChoice()
fp.ret = ($a) -> return $a
$n1 = -1
$n2 = -2
$n3 = -3
$n4 = -4
# Tests
fn.testUnit(Operations)
{
fn.testSubUnit(Empty statements)
fn.testAssertStrictEquals(parser.op(), $void)
fn.testAssertStrictEquals(parser.op(\!), $void)
fn.testAssertStrictEquals(parser.op(\!\!), $void)
}
{
fn.testSubUnit(Associtivity [POW operator])
fn.testAssertStrictEquals(parser.op(4**3**2), 262144)
fn.testAssertStrictEquals(parser.op(4**(3**2)), 262144)
fn.testAssertStrictEquals(parser.op((4**3)**2), 4096)
}
{
fn.testSubUnit(Complex operator expressions [Without grouping])
fn.testAssertStrictEquals(parser.op(1==2==3), 0)
fn.testAssertStrictEquals(parser.op(2==3==0), 1)
fn.testAssertStrictEquals(parser.op(1||1||1&&1), 1)
fn.testAssertStrictEquals(parser.op(1||0||1&&0), 1)
fn.testAssertStrictEquals(parser.op(0||0||1&&0), 0)
fn.testAssertStrictEquals(parser.op(▲▼2**▲~3), .125)
fn.testAssertStrictEquals(parser.op(▲▲2**▲~3), 2.125)
fn.testAssertStrictEquals(parser.op(▼▼2**▲~3), -1.875)
fn.testAssertStrictEquals(parser.op(+|-|2**+|~3), .125)
fn.testAssertStrictEquals(parser.op(+|+|2**+|~3), 2.125)
fn.testAssertStrictEquals(parser.op(-|-|2**+|~3), -1.875)
fn.testAssertStrictEquals(parser.op(2<<5>>3<<6>>>4), 32)
fn.testAssertStrictEquals(parser.op(61%8//3/5*6+8), 9.2)
fn.testAssertStrictEquals(parser.op(+--2---+3), -1)
fn.testAssertStrictEquals(parser.op(+--3---+2), 1)
fn.testAssertStrictEquals(parser.op(-4//-3), 1)
fn.testAssertStrictEquals(parser.op(-3.//-2), 1.)
fn.testAssertStrictEquals(parser.op(-3.//-$n2), -2.)
fn.testAssertStrictEquals(parser.op(-$n3//-2), -2)
fn.testAssertStrictEquals(parser.op(-$n3//-$n2), 1)
fn.testAssertStrictEquals(parser.op(2*3+4), 10)
fn.testAssertStrictEquals(parser.op(2*-3), -6)
fn.testAssertStrictEquals(parser.op(-2**-3), -.125)
fn.testAssertStrictEquals(parser.op(1<=>1), 0)
fn.testAssertStrictEquals(parser.op(1<=>2), -1)
fn.testAssertStrictEquals(parser.op(2<=>1), 1)
fn.testAssertStrictEquals(parser.op(2**2**2**2*5), 327680)
fn.testAssertStrictEquals(parser.op(+-~0), 1)
fn.testAssertStrictEquals(parser.op(+2**-+~3), 16)
fn.testAssertStrictEquals(parser.op(-2**--3**~-3), -512)
fn.testAssertStrictEquals(parser.op(null??null?42:abc), abc)
fn.testAssertStrictEquals(parser.op(0??null?42:abc), abc)
fn.testAssertStrictEquals(parser.op(0??1?42:abc), abc)
fn.testAssertStrictEquals(parser.op(null??1?42:abc), 42)
fn.testAssertStrictEquals(parser.op(0?0??abc:text), text)
fn.testAssertStrictEquals(parser.op(1?0??abc:text), 0)
fn.testAssertStrictEquals(parser.op(1?2??abc:text), 2)
fn.testAssertStrictEquals(parser.op(1?null??abc:text), abc)
fn.testAssertStrictEquals(parser.op(1?null??null:text), null)
fn.testAssertStrictEquals(parser.op(0?0?:abc:text), text)
fn.testAssertStrictEquals(parser.op(1?0?:abc:text), abc)
fn.testAssertStrictEquals(parser.op(1?2?:abc:text), 2)
fn.testAssertStrictEquals(parser.op(1?null?:abc:text), abc)
fn.testAssertStrictEquals(parser.op(1?null?:null:text), null)
fn.testAssertStrictEquals(parser.op(0?42:0??2), 0)
fn.testAssertStrictEquals(parser.op(0?42:0?:2), 2)
fn.testAssertStrictEquals(parser.op(0?42:1??2), 1)
fn.testAssertStrictEquals(parser.op(0?42:1?:2), 1)
fn.testAssertStrictEquals(parser.op(0?42:null??2), 2)
fn.testAssertStrictEquals(parser.op(0?42:null?:2), 2)
fn.testAssertStrictEquals(parser.op(1?42:null??2), 42)
fn.testAssertStrictEquals(parser.op(1?42:null?:2), 42)
fn.testAssertStrictEquals(parser.op(-@text**2), -16)
fn.testAssertStrictEquals(parser.op(-^3**2), -9)
fn.testAssertStrictEquals(parser.op(^-3**2), -9)
fn.testAssertStrictEquals(parser.op(!3**2), 0)
fn.testAssertStrictEquals(parser.op(!!3**2), 1)
fn.testAssertStrictEquals(parser.op(!-!3**2), 1)
fn.testAssertStrictEquals(parser.op(-!-!3**2), -1)
fn.testAssertStrictEquals(parser.op(-!!-3**2), -1)
fn.testAssertStrictEquals(parser.op(!-0&&0), 0)
fn.testAssertStrictEquals(parser.op(!-1&&0), 0)
fn.testAssertStrictEquals(parser.op(!-0&&1), 1)
fn.testAssertStrictEquals(parser.op(!-1&&1), 0)
fn.testAssertStrictEquals(parser.op(1+2<=>90>>>2>=0), 0)
fn.testAssertStrictEquals(parser.op(1-9<=>90>>>2>=0), 0)
fn.testAssertStrictEquals(parser.op(1+21<=>90>>>2>=0), 1)
fn.testAssertStrictEquals(parser.op(1+2<=>90>>>2<=0), 1)
fn.testAssertStrictEquals(parser.op(1-9<=>90>>>2<=0), 1)
fn.testAssertStrictEquals(parser.op(1+21<=>90>>>2<=0), 1)
}
{
fn.testSubUnit(Complex operator expressions [With grouping])
fn.testAssertStrictEquals(parser.op(2*3-4-(-5-6--7---8)), 14)
fn.testAssertStrictEquals(parser.op(2+(3^5-~6&5)), 9)
fn.testAssertStrictEquals(parser.op(2+(3^5-~7&5)), 8)
fn.testAssertStrictEquals(parser.op(2*(3+4)-6//5), 13)
fn.testAssertStrictEquals(parser.op(~(1|2)), -4)
fn.testAssertStrictEquals(parser.op((~(1|2))**3), -64)
fn.testAssertStrictEquals(parser.op(-1+2+(+3*-4**2)), -47)
fn.testAssertStrictEquals(parser.op(-(1|2)**4), -81)
fn.testAssertStrictEquals(parser.op((-(2==2))**2), 1)
fn.testAssertStrictEquals(parser.op((-(2==2))**3), -1)
fn.testAssertStrictEquals(parser.op(!(-0&&0)), 1)
fn.testAssertStrictEquals(parser.op(!(-1&&0)), 1)
fn.testAssertStrictEquals(parser.op(!(-0&&1)), 1)
fn.testAssertStrictEquals(parser.op(!(-1&&1)), 0)
fn.testAssertStrictEquals(parser.op(!-1&&2+(+4||-4**1)), 0)
fn.testAssertStrictEquals(parser.op(!-0&&2+(+4||-4**1)), 1)
fn.testAssertStrictEquals(parser.op(!-1&&1-(+2||-4**1)), 0)
fn.testAssertStrictEquals(parser.op(1*2==1+1&&(1||0)&&1+42), 1)
fn.testAssertStrictEquals(parser.op(1*2==1+1&&(1||0)||1+42), 1)
fn.testAssertStrictEquals(parser.op(2*2==1+1&&(1||0)&&1+42), 0)
fn.testAssertStrictEquals(parser.op(2*2==1+1&&(1||0)||1+42), 1)
fn.testAssertStrictEquals(parser.op(2*2==1+1&&(1||0)&&-42+42), 0)
fn.testAssertStrictEquals(parser.op(2*2==1+1&&(1||0)||-42+42), 0)
fn.testAssertStrictEquals(parser.op(1+2&&(7^5-~8==153&105)), 1)
fn.testAssertStrictEquals(parser.op(1-1&&(7^5-~8==153&105)), 0)
fn.testAssertStrictEquals(parser.op(1+2&&(7^5-~9==153&105)), 0)
fn.testAssertStrictEquals(parser.op(1+2&&(7^5-~8==103&105)), 0)
fn.testAssertStrictEquals(parser.op(1+2||3??4?:5+(6??7+8)), 1)
fn.testAssertStrictEquals(parser.op(1+2&&0??4?:5+(6??7+8)), 11)
fn.testAssertStrictEquals(parser.op(1+2&&0??0?:5+(6??7+8)), 11)
fn.testAssertStrictEquals(parser.op(1+2&&0??0?:5+(0??7+8)), 5)
fn.testAssertStrictEquals(parser.op(1+2&&0??0?:5+(null??7+8)), 20)
fn.testAssertStrictEquals(parser.op(null??4?:5+(null??7+8)), 4)
fn.testAssertStrictEquals(parser.op(null??0?:5+(null??7+7)), 19)
fn.testAssertStrictEquals(parser.op(1+2||3??4?:5+(6?:7+8)), 1)
fn.testAssertStrictEquals(parser.op(1+2&&0??4?:5+(6?:7+8)), 11)
fn.testAssertStrictEquals(parser.op(1+2&&0??0?:5+(0?:7+8)), 20)
fn.testAssertStrictEquals(parser.op(1+2&&0??0?:5+(null?:7+8)), 20)
fn.testAssertStrictEquals(parser.op(null??4?:5+(null?:7+8)), 4)
fn.testAssertStrictEquals(parser.op(null??0?:5+(null?:7+7)), 19)
}
{
fn.testSubUnit(Invalid operator expressions)
fn.testAssertStrictEquals(parser.op(:), :)
fn.testAssertStrictEquals(parser.op(?), ?)
fn.testAssertStrictEquals(parser.op(1:2), {{{1:2}}})
fn.testAssertStrictEquals(parser.op(1?2), {{{1?2}}})
fn.testAssertStrictEquals(parser.op(1:2?3), {{{1:2?3}}})
fn.testAssertStrictEquals(parser.op(1?2\:3), {{{1?2:3}}})
fn.testAssertStrictEquals(parser.op(1\?2:3), {{{1?2:3}}})
fn.testAssertStrictEquals(parser.op(? :), {{{? :}}})
fn.testAssertStrictEquals(parser.op(1 2 ?3), {{{1 2 ?3}}})
fn.testAssertStrictEquals(parser.op(1 2 ? 3), {{{1 2 ? 3}}})
fn.testAssertStrictEquals(parser.op(1 ? 2), {{{1 ? 2}}})
fn.testAssertStrictEquals(parser.op(?1:2), {{{?1:2}}})
fn.testAssertStrictEquals(parser.op(1?2:), {{{1?2:}}})
}
{
fn.testSubUnit(Invalid operator expressions [Complex operator expressions])
fn.testAssertStrictEquals(parser.op(1:2+3), {{{1:23}}})
fn.testAssertStrictEquals(parser.op(1?2+3), {{{1?23}}})
fn.testAssertStrictEquals(parser.op(1:2?3+4), {{{1:2?34}}})
fn.testAssertStrictEquals(parser.op(1?~2), {{{1?~2}}})
}