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