| # Tests of Skylark 'int' | |
| # basic arithmetic | |
| assert_eq(0 - 1, -1) | |
| assert_eq(1 + 1, 2) | |
| assert_eq(5 + 7, 12) | |
| assert_eq(5 * 7, 35) | |
| assert_eq(5 - 7, -2) | |
| # truth | |
| assert_(123) | |
| assert_(-1) | |
| assert_(not 0) | |
| # comparisons | |
| assert_(5 > 2) | |
| assert_(2 + 1 == 3) | |
| assert_(2 + 1 >= 3) | |
| assert_(not (2 + 1 > 3)) | |
| assert_(2 + 2 <= 5) | |
| assert_(not (2 + 1 < 3)) | |
| # division | |
| assert_eq(100 // 7, 14) | |
| assert_eq(100 // -7, -15) | |
| assert_eq(-100 // 7, -15) # NB: different from Go / Java | |
| assert_eq(-100 // -7, 14) # NB: different from Go / Java | |
| assert_eq(98 // 7, 14) | |
| assert_eq(98 // -7, -14) | |
| assert_eq(-98 // 7, -14) | |
| assert_eq(-98 // -7, 14) | |
| # remainder | |
| assert_eq(100 % 7, 2) | |
| assert_eq(100 % -7, -5) # NB: different from Go / Java | |
| assert_eq(-100 % 7, 5) # NB: different from Go / Java | |
| assert_eq(-100 % -7, -2) | |
| assert_eq(98 % 7, 0) | |
| assert_eq(98 % -7, 0) | |
| assert_eq(-98 % 7, 0) | |
| assert_eq(-98 % -7, 0) | |
| # precedence | |
| assert_eq(5 - 7 * 2 + 3, -6) | |
| assert_eq(4 * 5 // 2 + 5 // 2 * 4, 18) | |
| # compound assignment | |
| def compound(): | |
| x = 1 | |
| x += 1 | |
| assert_eq(x, 2) | |
| x -= 3 | |
| assert_eq(x, -1) | |
| x *= 10 | |
| assert_eq(x, -10) | |
| x //= -2 | |
| assert_eq(x, 5) | |
| x %= 3 | |
| assert_eq(x, 2) | |
| compound() | |
| # unary operators | |
| assert_eq(+4, 4) | |
| assert_eq(-4, -4) | |
| assert_eq(++4, 4) | |
| assert_eq(+-4, -4) | |
| assert_eq(-+-4, 4) | |
| --- | |
| 1 // 0 ### integer division by zero | |
| --- | |
| 1 % 0 ### integer modulo by zero | |
| --- | |
| # bitwise | |
| def f(): | |
| x = 2 | |
| x &= 1 | |
| assert_eq(x, 0) | |
| x = 0 | |
| x |= 2 | |
| assert_eq(x, 2) | |
| x ^= 3 | |
| assert_eq(x, 1) | |
| x <<= 2 | |
| assert_eq(x, 4) | |
| x >>=2 | |
| assert_eq(x, 1) | |
| f() | |
| --- | |
| assert_eq(1 | 2, 3) | |
| assert_eq(3 | 6, 7) | |
| assert_eq(7 | 0, 7) | |
| assert_eq(7 & 0, 0) | |
| assert_eq(7 & 7, 7) | |
| assert_eq(7 & 2, 2) | |
| assert_eq((1|2) & (2|4), 2) | |
| assert_eq(1 ^ 2, 3) | |
| assert_eq(2 ^ 2, 0) | |
| assert_eq(-6 ^ 0, -6) | |
| assert_eq(1 | 0 ^ 1, 1) # check | and ^ operators precedence | |
| assert_eq(~1, -2) | |
| assert_eq(~-2, 1) | |
| assert_eq(~0, -1) | |
| assert_eq(~6, -7) | |
| assert_eq(~0, -1) | |
| assert_eq(~2147483647, -2147483647 - 1); | |
| assert_eq(1 << 2, 4) | |
| assert_eq(7 << 0, 7) | |
| assert_eq(-1 << 31, -2147483647 - 1) | |
| assert_eq(2 >> 1, 1) | |
| assert_eq(7 >> 0, 7) | |
| assert_eq(0 >> 0, 0) | |
| assert_eq(1000 >> 100, 0) | |
| assert_eq(-10 >> 1000, -1) | |
| # precedence | |
| assert_eq(8 | 3 ^ 4 & -2, 15) | |
| assert_eq(~8 >> 1 | 3 ^ 4 & -2 << 2 * 3 + 4 // -2, -5) | |
| --- | |
| 1 & False ### unsupported binary operation: int & bool | |
| --- | |
| "a" ^ 5 ### unsupported binary operation: string ^ int | |
| --- | |
| ~False ### unsupported unary operation: ~bool | |
| --- | |
| 1 << 31 ### integer overflow | |
| --- | |
| 1 << -4 ### negative shift count: -4 | |
| --- | |
| 2 >> -1 ### negative shift count: -1 |