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