| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598 |
- # Test cases for i32 native ints. Focus on things that are different from i64; no need to
- # duplicate all i64 test cases here.
- [case testI32BinaryOp]
- from mypy_extensions import i32
- def add_op(x: i32, y: i32) -> i32:
- x = y + x
- y = x + 5
- y += x
- y += 7
- x = 5 + y
- return x
- def compare(x: i32, y: i32) -> None:
- a = x == y
- b = x == -5
- c = x < y
- d = x < -5
- e = -5 == x
- f = -5 < x
- [out]
- def add_op(x, y):
- x, y, r0, r1, r2, r3, r4 :: i32
- L0:
- r0 = y + x
- x = r0
- r1 = x + 5
- y = r1
- r2 = y + x
- y = r2
- r3 = y + 7
- y = r3
- r4 = 5 + y
- x = r4
- return x
- def compare(x, y):
- x, y :: i32
- r0 :: bit
- a :: bool
- r1 :: bit
- b :: bool
- r2 :: bit
- c :: bool
- r3 :: bit
- d :: bool
- r4 :: bit
- e :: bool
- r5 :: bit
- f :: bool
- L0:
- r0 = x == y
- a = r0
- r1 = x == -5
- b = r1
- r2 = x < y :: signed
- c = r2
- r3 = x < -5 :: signed
- d = r3
- r4 = -5 == x
- e = r4
- r5 = -5 < x :: signed
- f = r5
- return 1
- [case testI32UnaryOp]
- from mypy_extensions import i32
- def unary(x: i32) -> i32:
- y = -x
- x = ~y
- y = +x
- return y
- [out]
- def unary(x):
- x, r0, y, r1 :: i32
- L0:
- r0 = 0 - x
- y = r0
- r1 = y ^ -1
- x = r1
- y = x
- return y
- [case testI32DivisionByConstant]
- from mypy_extensions import i32
- def div_by_constant(x: i32) -> i32:
- x = x // 5
- x //= 17
- return x
- [out]
- def div_by_constant(x):
- x, r0, r1 :: i32
- r2, r3, r4 :: bit
- r5 :: i32
- r6 :: bit
- r7, r8, r9 :: i32
- r10, r11, r12 :: bit
- r13 :: i32
- r14 :: bit
- r15 :: i32
- L0:
- r0 = x / 5
- r1 = r0
- r2 = x < 0 :: signed
- r3 = 5 < 0 :: signed
- r4 = r2 == r3
- if r4 goto L3 else goto L1 :: bool
- L1:
- r5 = r1 * 5
- r6 = r5 == x
- if r6 goto L3 else goto L2 :: bool
- L2:
- r7 = r1 - 1
- r1 = r7
- L3:
- x = r1
- r8 = x / 17
- r9 = r8
- r10 = x < 0 :: signed
- r11 = 17 < 0 :: signed
- r12 = r10 == r11
- if r12 goto L6 else goto L4 :: bool
- L4:
- r13 = r9 * 17
- r14 = r13 == x
- if r14 goto L6 else goto L5 :: bool
- L5:
- r15 = r9 - 1
- r9 = r15
- L6:
- x = r9
- return x
- [case testI32ModByConstant]
- from mypy_extensions import i32
- def mod_by_constant(x: i32) -> i32:
- x = x % 5
- x %= 17
- return x
- [out]
- def mod_by_constant(x):
- x, r0, r1 :: i32
- r2, r3, r4, r5 :: bit
- r6, r7, r8 :: i32
- r9, r10, r11, r12 :: bit
- r13 :: i32
- L0:
- r0 = x % 5
- r1 = r0
- r2 = x < 0 :: signed
- r3 = 5 < 0 :: signed
- r4 = r2 == r3
- if r4 goto L3 else goto L1 :: bool
- L1:
- r5 = r1 == 0
- if r5 goto L3 else goto L2 :: bool
- L2:
- r6 = r1 + 5
- r1 = r6
- L3:
- x = r1
- r7 = x % 17
- r8 = r7
- r9 = x < 0 :: signed
- r10 = 17 < 0 :: signed
- r11 = r9 == r10
- if r11 goto L6 else goto L4 :: bool
- L4:
- r12 = r8 == 0
- if r12 goto L6 else goto L5 :: bool
- L5:
- r13 = r8 + 17
- r8 = r13
- L6:
- x = r8
- return x
- [case testI32DivModByVariable]
- from mypy_extensions import i32
- def divmod(x: i32, y: i32) -> i32:
- a = x // y
- return a % y
- [out]
- def divmod(x, y):
- x, y, r0, a, r1 :: i32
- L0:
- r0 = CPyInt32_Divide(x, y)
- a = r0
- r1 = CPyInt32_Remainder(a, y)
- return r1
- [case testI32BoxAndUnbox]
- from typing import Any
- from mypy_extensions import i32
- def f(x: Any) -> Any:
- y: i32 = x
- return y
- [out]
- def f(x):
- x :: object
- r0, y :: i32
- r1 :: object
- L0:
- r0 = unbox(i32, x)
- y = r0
- r1 = box(i32, y)
- return r1
- [case testI32MixedCompare1_64bit]
- from mypy_extensions import i32
- def f(x: int, y: i32) -> bool:
- return x == y
- [out]
- def f(x, y):
- x :: int
- y :: i32
- r0 :: native_int
- r1, r2, r3 :: bit
- r4 :: native_int
- r5, r6 :: i32
- r7 :: bit
- L0:
- r0 = x & 1
- r1 = r0 == 0
- if r1 goto L1 else goto L4 :: bool
- L1:
- r2 = x < 4294967296 :: signed
- if r2 goto L2 else goto L4 :: bool
- L2:
- r3 = x >= -4294967296 :: signed
- if r3 goto L3 else goto L4 :: bool
- L3:
- r4 = x >> 1
- r5 = truncate r4: native_int to i32
- r6 = r5
- goto L5
- L4:
- CPyInt32_Overflow()
- unreachable
- L5:
- r7 = r6 == y
- return r7
- [case testI32MixedCompare2_64bit]
- from mypy_extensions import i32
- def f(x: i32, y: int) -> bool:
- return x == y
- [out]
- def f(x, y):
- x :: i32
- y :: int
- r0 :: native_int
- r1, r2, r3 :: bit
- r4 :: native_int
- r5, r6 :: i32
- r7 :: bit
- L0:
- r0 = y & 1
- r1 = r0 == 0
- if r1 goto L1 else goto L4 :: bool
- L1:
- r2 = y < 4294967296 :: signed
- if r2 goto L2 else goto L4 :: bool
- L2:
- r3 = y >= -4294967296 :: signed
- if r3 goto L3 else goto L4 :: bool
- L3:
- r4 = y >> 1
- r5 = truncate r4: native_int to i32
- r6 = r5
- goto L5
- L4:
- CPyInt32_Overflow()
- unreachable
- L5:
- r7 = x == r6
- return r7
- [case testI32MixedCompare_32bit]
- from mypy_extensions import i32
- def f(x: int, y: i32) -> bool:
- return x == y
- [out]
- def f(x, y):
- x :: int
- y :: i32
- r0 :: native_int
- r1 :: bit
- r2, r3 :: i32
- r4 :: ptr
- r5 :: c_ptr
- r6 :: i32
- r7 :: bit
- L0:
- r0 = x & 1
- r1 = r0 == 0
- if r1 goto L1 else goto L2 :: bool
- L1:
- r2 = x >> 1
- r3 = r2
- goto L3
- L2:
- r4 = x ^ 1
- r5 = r4
- r6 = CPyLong_AsInt32(r5)
- r3 = r6
- keep_alive x
- L3:
- r7 = r3 == y
- return r7
- [case testI32ConvertToInt_64bit]
- from mypy_extensions import i32
- def i32_to_int(a: i32) -> int:
- return a
- [out]
- def i32_to_int(a):
- a :: i32
- r0 :: native_int
- r1 :: int
- L0:
- r0 = extend signed a: i32 to native_int
- r1 = r0 << 1
- return r1
- [case testI32ConvertToInt_32bit]
- from mypy_extensions import i32
- def i32_to_int(a: i32) -> int:
- return a
- [out]
- def i32_to_int(a):
- a :: i32
- r0, r1 :: bit
- r2, r3, r4 :: int
- L0:
- r0 = a <= 1073741823 :: signed
- if r0 goto L1 else goto L2 :: bool
- L1:
- r1 = a >= -1073741824 :: signed
- if r1 goto L3 else goto L2 :: bool
- L2:
- r2 = CPyTagged_FromSsize_t(a)
- r3 = r2
- goto L4
- L3:
- r4 = a << 1
- r3 = r4
- L4:
- return r3
- [case testI32OperatorAssignmentMixed_64bit]
- from mypy_extensions import i32
- def f(a: i32) -> None:
- x = 0
- x += a
- [out]
- def f(a):
- a :: i32
- x :: int
- r0 :: native_int
- r1, r2, r3 :: bit
- r4 :: native_int
- r5, r6, r7 :: i32
- r8 :: native_int
- r9 :: int
- L0:
- x = 0
- r0 = x & 1
- r1 = r0 == 0
- if r1 goto L1 else goto L4 :: bool
- L1:
- r2 = x < 4294967296 :: signed
- if r2 goto L2 else goto L4 :: bool
- L2:
- r3 = x >= -4294967296 :: signed
- if r3 goto L3 else goto L4 :: bool
- L3:
- r4 = x >> 1
- r5 = truncate r4: native_int to i32
- r6 = r5
- goto L5
- L4:
- CPyInt32_Overflow()
- unreachable
- L5:
- r7 = r6 + a
- r8 = extend signed r7: i32 to native_int
- r9 = r8 << 1
- x = r9
- return 1
- [case testI32InitializeFromLiteral]
- from mypy_extensions import i32, i64
- def f() -> None:
- x: i32 = 0
- y: i32 = -127
- z: i32 = 5 + 7
- [out]
- def f():
- x, y, z :: i32
- L0:
- x = 0
- y = -127
- z = 12
- return 1
- [case testI32ExplicitConversionFromNativeInt]
- from mypy_extensions import i64, i32, i16
- def from_i16(x: i16) -> i32:
- return i32(x)
- def from_i32(x: i32) -> i32:
- return i32(x)
- def from_i64(x: i64) -> i32:
- return i32(x)
- [out]
- def from_i16(x):
- x :: i16
- r0 :: i32
- L0:
- r0 = extend signed x: i16 to i32
- return r0
- def from_i32(x):
- x :: i32
- L0:
- return x
- def from_i64(x):
- x :: i64
- r0 :: i32
- L0:
- r0 = truncate x: i64 to i32
- return r0
- [case testI32ExplicitConversionFromInt_64bit]
- from mypy_extensions import i32
- def f(x: int) -> i32:
- return i32(x)
- [out]
- def f(x):
- x :: int
- r0 :: native_int
- r1, r2, r3 :: bit
- r4 :: native_int
- r5, r6 :: i32
- L0:
- r0 = x & 1
- r1 = r0 == 0
- if r1 goto L1 else goto L4 :: bool
- L1:
- r2 = x < 4294967296 :: signed
- if r2 goto L2 else goto L4 :: bool
- L2:
- r3 = x >= -4294967296 :: signed
- if r3 goto L3 else goto L4 :: bool
- L3:
- r4 = x >> 1
- r5 = truncate r4: native_int to i32
- r6 = r5
- goto L5
- L4:
- CPyInt32_Overflow()
- unreachable
- L5:
- return r6
- [case testI32ExplicitConversionFromLiteral_64bit]
- from mypy_extensions import i32
- def f() -> None:
- x = i32(0)
- y = i32(11)
- z = i32(-3)
- a = i32(2**31)
- [out]
- def f():
- x, y, z, a :: i32
- L0:
- x = 0
- y = 11
- z = -3
- a = -2147483648
- return 1
- [case testI32ExplicitConversionFromVariousTypes_64bit]
- from mypy_extensions import i32
- def bool_to_i32(b: bool) -> i32:
- return i32(b)
- def str_to_i32(s: str) -> i32:
- return i32(s)
- class C:
- def __int__(self) -> i32:
- return 5
- def instance_to_i32(c: C) -> i32:
- return i32(c)
- def float_to_i32(x: float) -> i32:
- return i32(x)
- [out]
- def bool_to_i32(b):
- b :: bool
- r0 :: i32
- L0:
- r0 = extend b: builtins.bool to i32
- return r0
- def str_to_i32(s):
- s :: str
- r0 :: object
- r1 :: i32
- L0:
- r0 = CPyLong_FromStr(s)
- r1 = unbox(i32, r0)
- return r1
- def C.__int__(self):
- self :: __main__.C
- L0:
- return 5
- def instance_to_i32(c):
- c :: __main__.C
- r0 :: i32
- L0:
- r0 = c.__int__()
- return r0
- def float_to_i32(x):
- x :: float
- r0 :: int
- r1 :: native_int
- r2, r3, r4 :: bit
- r5 :: native_int
- r6, r7 :: i32
- L0:
- r0 = CPyTagged_FromFloat(x)
- r1 = r0 & 1
- r2 = r1 == 0
- if r2 goto L1 else goto L4 :: bool
- L1:
- r3 = r0 < 4294967296 :: signed
- if r3 goto L2 else goto L4 :: bool
- L2:
- r4 = r0 >= -4294967296 :: signed
- if r4 goto L3 else goto L4 :: bool
- L3:
- r5 = r0 >> 1
- r6 = truncate r5: native_int to i32
- r7 = r6
- goto L5
- L4:
- CPyInt32_Overflow()
- unreachable
- L5:
- return r7
- [case testI32ExplicitConversionFromFloat_32bit]
- from mypy_extensions import i32
- def float_to_i32(x: float) -> i32:
- return i32(x)
- [out]
- def float_to_i32(x):
- x :: float
- r0 :: int
- r1 :: native_int
- r2 :: bit
- r3, r4 :: i32
- r5 :: ptr
- r6 :: c_ptr
- r7 :: i32
- L0:
- r0 = CPyTagged_FromFloat(x)
- r1 = r0 & 1
- r2 = r1 == 0
- if r2 goto L1 else goto L2 :: bool
- L1:
- r3 = r0 >> 1
- r4 = r3
- goto L3
- L2:
- r5 = r0 ^ 1
- r6 = r5
- r7 = CPyLong_AsInt32(r6)
- r4 = r7
- keep_alive r0
- L3:
- return r4
|