• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*---
2Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3Licensed under the Apache License, Version 2.0 (the "License");
4you may not use this file except in compliance with the License.
5You may obtain a copy of the License at
6
7http://www.apache.org/licenses/LICENSE-2.0
8
9Unless required by applicable law or agreed to in writing, software
10distributed under the License is distributed on an "AS IS" BASIS,
11WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12See the License for the specific language governing permissions and
13limitations under the License.
14---*/
15
16/*---
17desc: prefix operators with other lower precedence operators
18---*/
19
20function main(): int {
21    let res: int, t2 = 2, t3 = 3, t4 = 4, t8 = 8, t255  = 255
22
23    // unary plus
24    res = + ++t2
25    if (res != 3 || t2 != 3) return 1;
26    t2 = 2
27
28    res = + --t2
29    if (res != 1 || t2 != 1) return 1;
30    t2 = 2
31
32    // unary minus
33    res = - ++t2
34    if (res != -3 || t2 != 3) return 1;
35    t2 = 2
36
37    res = - --t2
38    if (res != -1 || t2 != 1) return 1;
39    t2 = 2
40
41    // bitwise complement
42    res = ~ ++t2
43    if (res != -4 || t2 != 3) return 1;
44    t2 = 2
45
46    res = ~ --t2
47    if (res != -2 || t2 != 1) return 1;
48    t2 = 2
49
50    // multiplicative
51    res = --t4 * ++t2
52    if (res != 9 || t2 != 3 || t4 != 3) return 1;
53    t2 = 2
54    t4 = 4
55
56    res = ++t4 * --t2
57    if (res != 5 || t2 != 1 || t4 != 5) return 1;
58    t2 = 2
59    t4 = 4
60
61    // division
62    res = --t4 / ++t2
63    if (res != 1 || t2 != 3 || t4 != 3) return 1;
64    t2 = 2
65    t4 = 4
66
67    res = ++t4 / --t2
68    if (res != 5 || t2 != 1 || t4 != 5) return 1;
69    t2 = 2
70    t4 = 4
71
72    // modulo
73    res = --t255 % ++t4
74    if (res != 4 || t255 != 254 || t4 != 5) return 1;
75    t255 = 255
76    t4 = 4
77
78    res = ++t255 % --t4
79    if (res != 1 || t255 != 256 || t4 != 3) return 1;
80    t255 = 255
81    t4 = 4
82
83    // addition
84    res = --t255 + ++t4
85    if (res != 259 || t255 != 254 || t4 != 5) return 1;
86    t255 = 255
87    t4 = 4
88
89    res = ++t255 + --t4
90    if (res != 259 || t255 != 256 || t4 != 3) return 1;
91    t255 = 255
92    t4 = 4
93
94    // subtraction
95    res = --t255 - ++t4
96    if (res != 249 || t255 != 254 || t4 != 5) return 1;
97    t255 = 255
98    t4 = 4
99
100    res = ++t255 - --t4
101    if (res != 253 || t255 != 256 || t4 != 3) return 1;
102    t255 = 255
103    t4 = 4
104
105    // casting
106    res = --t255 as byte - ++t4 as byte
107    if (res != -7 || t255 != 254 || t4 != 5) return 1;
108    t255 = 255
109    t4 = 4
110
111    res = ++t255 as byte - --t4 as byte
112    if (res != -3 || t255 != 256 || t4 != 3) return 1;
113    t255 = 255
114    t4 = 4
115
116    // left shift
117    res = --t255 << ++t4
118    if (res != 8128 || t255 != 254 || t4 != 5) return 1;
119    t255 = 255
120    t4 = 4
121
122    res = ++t255 << --t4
123    if (res != 2048 || t255 != 256 || t4 != 3) return 1;
124    t255 = 255
125    t4 = 4
126
127    // right shift
128    res = --t255 >> ++t4
129    if (res != 7 || t255 != 254 || t4 != 5) return 1;
130    t255 = 255
131    t4 = 4
132
133    res = ++t255 >> --t4
134    if (res != 32 || t255 != 256 || t4 != 3) return 1;
135    t255 = 255
136    t4 = 4
137
138    // right no-sign shift
139    res = - --t255 >>> ++t4
140    if (res != 134217720 || t255 != 254 || t4 != 5) return 1;
141    t255 = 255
142    t4 = 4
143
144    res = - ++t255 >>> --t4
145    if (res != 536870880 || t255 != 256 || t4 != 3) return 1;
146    t255 = 255
147    t4 = 4
148
149    // relational
150    if (--t4 < ++t2) return 1;
151    t4 = 4
152    t2 = 2
153
154    if (--t8 <= ++t4) return 1;
155    t8 = 8
156    t4 = 4
157
158    if (++t2 > --t4) return 1;
159    t4 = 4
160    t2 = 2
161
162    if (++t4 >= --t8) return 1;
163    t8 = 8
164    t4 = 4
165
166    // equality
167    if (--t3 == 3) return 1;
168    t3 = 3
169
170    if (++t3 == 3) return 1;
171    t3 = 3
172
173    if (--t3 != 2) return 1;
174    t3 = 3
175
176    if (++t3 != 4) return 1;
177    t3 = 3
178
179    // bitwise AND
180    res = --t255 & ++t4
181    if (res != 4 || t255 != 254 || t4 != 5) return 1;
182    t255 = 255
183    t4 = 4
184
185    res = ++t255 & --t8
186    if (res != 0 || t255 != 256 || t8 != 7) return 1;
187    t255 = 255
188    t8 = 8
189
190    // bitwise OR
191    res = --t255 | ++t4
192    if (res != 255 || t255 != 254 || t4 != 5) return 1;
193    t255 = 255
194    t4 = 4
195
196    res = ++t255 | --t4
197    if (res != 259 || t255 != 256 || t4 != 3) return 1;
198    t255 = 255
199    t4 = 4
200
201    // bitwise XOR
202    res = --t255 ^ ++t4
203    if (res != 251 || t255 != 254 || t4 != 5) return 1;
204    t255 = 255
205    t4 = 4
206
207    res = ++t255 ^ --t4
208    if (res != 259 || t255 != 256 || t4 != 3) return 1;
209    t255 = 255
210    t4 = 4
211
212    // ternary
213    res = t8 > t4 ? --t255 : ++t4
214    if (res != 254 || t255 != 254 || t4 != 4) return 1;
215    t255 = 255
216
217    res = t8 > t4 ? --t4 : ++t255
218    if (res != 3 || t255 != 255 || t4 != 3) return 1;
219    t4 = 4
220
221    // assignment
222    res = t255 = --t3
223    if (res != 2 || t255 != 2 || t3 != 2) return 1;
224    t255 = 255
225    t3 = 3
226
227    res = t255 = ++t3
228    if (res != 4 || t255 != 4 || t3 != 4) return 1;
229    t255 = 255
230    t3 = 3
231
232    res = t255 += --t3
233    if (res != 257 || t255 != 257 || t3 != 2) return 1;
234    t255 = 255
235    t3 = 3
236
237    res = t255 += ++t3
238    if (res != 259 || t255 != 259 || t3 != 4) return 1;
239    t255 = 255
240    t3 = 3
241
242    res = t255 -= --t3
243    if (res != 253 || t255 != 253 || t3 != 2) return 1;
244    t255 = 255
245    t3 = 3
246
247    res = t255 -= ++t3
248    if (res != 251 || t255 != 251 || t3 != 4) return 1;
249    t255 = 255
250    t3 = 3
251
252    res = t255 *= --t3
253    if (res != 510 || t255 != 510 || t3 != 2) return 1;
254    t255 = 255
255    t3 = 3
256
257    res = t255 *= ++t3
258    if (res != 1020 || t255 != 1020 || t3 != 4) return 1;
259    t255 = 255
260    t3 = 3
261
262    res = t255 /= --t3
263    if (res != 127 || t255 != 127 || t3 != 2) return 1;
264    t255 = 255
265    t3 = 3
266
267    res = t255 /= ++t3
268    if (res != 63 || t255 != 63 || t3 != 4) return 1;
269    t255 = 255
270    t3 = 3
271
272    res = t255 %= --t4
273    if (res != 0 || t255 != 0 || t4 != 3) return 1;
274    t255 = 255
275    t4 = 4
276
277    res = t255 %= ++t8
278    if (res != 3 || t255 != 3 || t8 != 9) return 1;
279    t255 = 255
280    t8 = 8
281
282    res = t255 <<= --t4
283    if (res != 2040 || t255 != 2040 || t4 != 3) return 1;
284    t255 = 255
285    t4 = 4
286
287    res = t255 <<= ++t4
288    if (res != 8160 || t255 != 8160 || t4 != 5) return 1;
289    t255 = 255
290    t4 = 4
291
292    res = t255 >>= --t4
293    if (res != 31 || t255 != 31 || t4 != 3) return 1;
294    t255 = 255
295    t4 = 4
296
297    res = t255 >>= ++t4
298    if (res != 7 || t255 != 7 || t4 != 5) return 1;
299    t255 = 255
300    t4 = 4
301
302    res = t255 >>>= --t4
303    if (res != 31 || t255 != 31 || t4 != 3) return 1;
304    t255 = 255
305    t4 = 4
306
307    res = t255 >>>= ++t4
308    if (res != 7 || t255 != 7 || t4 != 5) return 1;
309    t255 = 255
310    t4 = 4
311
312    res = t255 &= --t4
313    if (res != 3 || t255 != 3 || t4 != 3) return 1;
314    t255 = 255
315    t4 = 4
316
317    res = t255 &= ++t4
318    if (res != 5 || t255 != 5 || t4 != 5) return 1;
319    t255 = 255
320    t4 = 4
321
322    res = t255 |= --t4
323    if (res != 255 || t255 != 255 || t4 != 3) return 1;
324    t255 = 255
325    t4 = 4
326
327    res = t255 |= ++t4
328    if (res != 255 || t255 != 255 || t4 != 5) return 1;
329    t255 = 255
330    t4 = 4
331
332    res = t255 ^= --t4
333    if (res != 252 || t255 != 252 || t4 != 3) return 1;
334    t255 = 255
335    t4 = 4
336
337    res = t255 ^= ++t4
338    if (res != 250 || t255 != 250 || t4 != 5) return 1;
339    t255 = 255
340    t4 = 4
341
342    return 0;
343}
344