1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-03-09 15:40:10 +00:00
ton/crypto/func/auto-tests/tests/op_priority.fc
Aleksandr Kirsanov 79721d230e
[FunC] Require parenthesis in tricky bitwise precedence cases
Example: "flags & 0xFF != 0" is equivalent to "flags & 1",
most likely it's unexpected.
Example: "a << 2 + 1" (equal to "a << 3", probably unexpected).

The only way to suppress this error for the programmer
is to use parenthesis.
2024-06-22 01:49:27 +03:00

57 lines
1.2 KiB
Text

int justTrue() { return true; }
int test1(int x, int y, int z) method_id(101) {
return (x > 0) & (y > 0) & (z > 0);
}
int test2(int x, int y, int z) method_id(102) {
return x > (0 & (y > 0) & (z > 0));
}
int test3(int x, int y, int z) method_id(103) {
if ((x < 0) | (y < 0)) {
return z < 0;
}
return (x > 0) & (y > 0);
}
int test4(int x, int y, int mode) method_id(104) {
if (mode == 1) {
return (x == 10) | (y == 20);
} if (mode == 2) {
return (x == 10) | (y == 20);
} else {
return x == (10 | (y == 20));
}
}
int test5(int status) method_id(105) {
return justTrue() & (status == 1) & ((justTrue() & status) == 1);
}
int _<p(_ a, _ b) { return true; }
() main() {
;; ok to parse
var c = [
(3 & 3) > 0, 3 & (3 > 0), 3 & (_<_(3, 0)),
3 & _<p(3, 0), (1 & 2) ^ (3 | 4),
1 & ((1) == 1)
];
}
{-
TESTCASE | 101 | 1 2 3 | -1
TESTCASE | 101 | 1 0 3 | 0
TESTCASE | 101 | 1 2 -1 | 0
TESTCASE | 102 | 1 0 0 | -1
TESTCASE | 103 | -1 -2 -3 | -1
TESTCASE | 103 | -1 -2 0 | 0
TESTCASE | 103 | 1 2 0 | -1
TESTCASE | 103 | 1 0 2 | 0
TESTCASE | 104 | 10 20 1 | -1
TESTCASE | 104 | 10 20 2 | -1
TESTCASE | 104 | 10 20 3 | 0
TESTCASE | 105 | 1 | -1
TESTCASE | 105 | 0 | 0
-}