| [case testIntNeq] | |
| def f(x: int, y: int) -> bool: | |
| return x != y | |
| [out] | |
| def f(x, y): | |
| x, y :: int | |
| r0 :: bit | |
| L0: | |
| r0 = int_ne x, y | |
| return r0 | |
| [case testShortIntComparisons] | |
| def f(x: int) -> int: | |
| if x == 3: | |
| return 1 | |
| elif x != 4: | |
| return 2 | |
| elif 5 == x: | |
| return 3 | |
| elif 6 != x: | |
| return 4 | |
| elif x < 4: | |
| return 5 | |
| return 6 | |
| [out] | |
| def f(x): | |
| x :: int | |
| r0, r1, r2, r3, r4 :: bit | |
| L0: | |
| r0 = int_eq x, 6 | |
| if r0 goto L1 else goto L2 :: bool | |
| L1: | |
| return 2 | |
| L2: | |
| r1 = int_ne x, 8 | |
| if r1 goto L3 else goto L4 :: bool | |
| L3: | |
| return 4 | |
| L4: | |
| r2 = int_eq 10, x | |
| if r2 goto L5 else goto L6 :: bool | |
| L5: | |
| return 6 | |
| L6: | |
| r3 = int_ne 12, x | |
| if r3 goto L7 else goto L8 :: bool | |
| L7: | |
| return 8 | |
| L8: | |
| r4 = int_lt x, 8 | |
| if r4 goto L9 else goto L10 :: bool | |
| L9: | |
| return 10 | |
| L10: | |
| L11: | |
| L12: | |
| L13: | |
| L14: | |
| return 12 | |
| [case testIntMin] | |
| def f(x: int, y: int) -> int: | |
| return min(x, y) | |
| [out] | |
| def f(x, y): | |
| x, y :: int | |
| r0 :: bit | |
| r1 :: int | |
| L0: | |
| r0 = int_lt y, x | |
| if r0 goto L1 else goto L2 :: bool | |
| L1: | |
| r1 = y | |
| goto L3 | |
| L2: | |
| r1 = x | |
| L3: | |
| return r1 | |
| [case testIntFloorDivideByPowerOfTwo] | |
| def divby1(x: int) -> int: | |
| return x // 1 | |
| def divby2(x: int) -> int: | |
| return x // 2 | |
| def divby3(x: int) -> int: | |
| return x // 3 | |
| def divby4(x: int) -> int: | |
| return x // 4 | |
| def divby8(x: int) -> int: | |
| return x // 8 | |
| [out] | |
| def divby1(x): | |
| x, r0 :: int | |
| L0: | |
| r0 = CPyTagged_FloorDivide(x, 2) | |
| return r0 | |
| def divby2(x): | |
| x, r0 :: int | |
| L0: | |
| r0 = CPyTagged_Rshift(x, 2) | |
| return r0 | |
| def divby3(x): | |
| x, r0 :: int | |
| L0: | |
| r0 = CPyTagged_FloorDivide(x, 6) | |
| return r0 | |
| def divby4(x): | |
| x, r0 :: int | |
| L0: | |
| r0 = CPyTagged_Rshift(x, 4) | |
| return r0 | |
| def divby8(x): | |
| x, r0 :: int | |
| L0: | |
| r0 = CPyTagged_Rshift(x, 6) | |
| return r0 | |
| [case testFinalConstantFolding] | |
| from typing import Final | |
| X: Final = -1 | |
| Y: Final = -(1 + 3*2) | |
| Z: Final = Y + 1 | |
| class C: | |
| A: Final = 1 | |
| B: Final = -1 | |
| def f1() -> int: | |
| return X | |
| def f2() -> int: | |
| return X + Y | |
| def f3() -> int: | |
| return Z | |
| def f4() -> int: | |
| return C.A | |
| def f5() -> int: | |
| return C.B | |
| [out] | |
| def f1(): | |
| L0: | |
| return -2 | |
| def f2(): | |
| L0: | |
| return -16 | |
| def f3(): | |
| L0: | |
| return -12 | |
| def f4(): | |
| L0: | |
| return 2 | |
| def f5(): | |
| L0: | |
| return -2 | |
| [case testConvertIntegralToInt] | |
| def bool_to_int(b: bool) -> int: | |
| return int(b) | |
| def int_to_int(n: int) -> int: | |
| return int(n) | |
| [out] | |
| def bool_to_int(b): | |
| b, r0 :: bool | |
| r1 :: int | |
| L0: | |
| r0 = b << 1 | |
| r1 = extend r0: builtins.bool to builtins.int | |
| return r1 | |
| def int_to_int(n): | |
| n :: int | |
| L0: | |
| return n | |
| [case testIntUnaryOps] | |
| def unary_minus(n: int) -> int: | |
| x = -n | |
| return x | |
| def unary_plus(n: int) -> int: | |
| x = +n | |
| return x | |
| def unary_invert(n: int) -> int: | |
| x = ~n | |
| return x | |
| [out] | |
| def unary_minus(n): | |
| n, r0, x :: int | |
| L0: | |
| r0 = CPyTagged_Negate(n) | |
| x = r0 | |
| return x | |
| def unary_plus(n): | |
| n, x :: int | |
| L0: | |
| x = n | |
| return x | |
| def unary_invert(n): | |
| n, r0, x :: int | |
| L0: | |
| r0 = CPyTagged_Invert(n) | |
| x = r0 | |
| return x | |
| [case testIntToBytes] | |
| def f(x: int) -> bytes: | |
| return x.to_bytes(2, "big") | |
| def g(x: int) -> bytes: | |
| return x.to_bytes(4, "little", signed=True) | |
| def h(x: int, byteorder: str) -> bytes: | |
| return x.to_bytes(8, byteorder) | |
| [out] | |
| def f(x): | |
| x :: int | |
| r0 :: bytes | |
| L0: | |
| r0 = CPyTagged_ToBigEndianBytes(x, 2, 0) | |
| return r0 | |
| def g(x): | |
| x :: int | |
| r0 :: bytes | |
| L0: | |
| r0 = CPyTagged_ToLittleEndianBytes(x, 4, 1) | |
| return r0 | |
| def h(x, byteorder): | |
| x :: int | |
| byteorder :: str | |
| r0 :: bytes | |
| L0: | |
| r0 = CPyTagged_ToBytes(x, 8, byteorder, 0) | |
| return r0 | |
| [case testIntBitLength] | |
| def f(x: int) -> int: | |
| return x.bit_length() | |
| [out] | |
| def f(x): | |
| x, r0 :: int | |
| L0: | |
| r0 = CPyTagged_BitLength(x) | |
| return r0 |