• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations 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