blob: 5586a2bf4cfb4e501993582637e8a98a142d269a [file] [log] [blame] [edit]
[case testNewSet]
from typing import Set
def f() -> Set[int]:
return {1, 2, 3}
[out]
def f():
r0 :: set
r1 :: object
r2 :: i32
r3 :: bit
r4 :: object
r5 :: i32
r6 :: bit
r7 :: object
r8 :: i32
r9 :: bit
L0:
r0 = PySet_New(0)
r1 = object 1
r2 = PySet_Add(r0, r1)
r3 = r2 >= 0 :: signed
r4 = object 2
r5 = PySet_Add(r0, r4)
r6 = r5 >= 0 :: signed
r7 = object 3
r8 = PySet_Add(r0, r7)
r9 = r8 >= 0 :: signed
return r0
[case testNewEmptySet]
from typing import Set
def f() -> Set[int]:
return set()
[out]
def f():
r0 :: set
L0:
r0 = PySet_New(0)
return r0
[case testNewSetFromIterable]
from typing import Set, List, TypeVar
T = TypeVar("T")
def f(l: List[T]) -> Set[T]:
return set(l)
[out]
def f(l):
l :: list
r0 :: set
L0:
r0 = PySet_New(l)
return r0
[case testNewSetFromIterable2]
def f(x: int) -> int:
return x
def test1() -> None:
tmp_list = [1, 3, 5]
a = set(f(x) for x in tmp_list)
def test2() -> None:
tmp_tuple = (1, 3, 5)
b = set(f(x) for x in tmp_tuple)
def test3() -> None:
tmp_dict = {1: '1', 3: '3', 5: '5'}
c = set(f(x) for x in tmp_dict)
def test4() -> None:
d = set(f(x) for x in range(1, 6, 2))
def test5() -> None:
e = set((f(x) for x in range(1, 6, 2)))
[out]
def f(x):
x :: int
L0:
return x
def test1():
r0 :: list
r1, r2, r3 :: object
r4 :: ptr
tmp_list :: list
r5 :: set
r6, r7 :: native_int
r8 :: bit
r9 :: object
r10, x, r11 :: int
r12 :: object
r13 :: i32
r14 :: bit
r15 :: native_int
a :: set
L0:
r0 = PyList_New(3)
r1 = object 1
r2 = object 3
r3 = object 5
r4 = list_items r0
buf_init_item r4, 0, r1
buf_init_item r4, 1, r2
buf_init_item r4, 2, r3
keep_alive r0
tmp_list = r0
r5 = PySet_New(0)
r6 = 0
L1:
r7 = var_object_size tmp_list
r8 = r6 < r7 :: signed
if r8 goto L2 else goto L4 :: bool
L2:
r9 = list_get_item_unsafe tmp_list, r6
r10 = unbox(int, r9)
x = r10
r11 = f(x)
r12 = box(int, r11)
r13 = PySet_Add(r5, r12)
r14 = r13 >= 0 :: signed
L3:
r15 = r6 + 1
r6 = r15
goto L1
L4:
a = r5
return 1
def test2():
r0, tmp_tuple :: tuple[int, int, int]
r1 :: set
r2, r3, r4 :: object
r5, x, r6 :: int
r7 :: object
r8 :: i32
r9, r10 :: bit
b :: set
L0:
r0 = (2, 6, 10)
tmp_tuple = r0
r1 = PySet_New(0)
r2 = box(tuple[int, int, int], tmp_tuple)
r3 = PyObject_GetIter(r2)
L1:
r4 = PyIter_Next(r3)
if is_error(r4) goto L4 else goto L2
L2:
r5 = unbox(int, r4)
x = r5
r6 = f(x)
r7 = box(int, r6)
r8 = PySet_Add(r1, r7)
r9 = r8 >= 0 :: signed
L3:
goto L1
L4:
r10 = CPy_NoErrOccurred()
L5:
b = r1
return 1
def test3():
r0, r1, r2 :: str
r3, r4, r5 :: object
r6, tmp_dict :: dict
r7 :: set
r8 :: short_int
r9 :: native_int
r10 :: object
r11 :: tuple[bool, short_int, object]
r12 :: short_int
r13 :: bool
r14 :: object
r15, x, r16 :: int
r17 :: object
r18 :: i32
r19, r20, r21 :: bit
c :: set
L0:
r0 = '1'
r1 = '3'
r2 = '5'
r3 = object 1
r4 = object 3
r5 = object 5
r6 = CPyDict_Build(3, r3, r0, r4, r1, r5, r2)
tmp_dict = r6
r7 = PySet_New(0)
r8 = 0
r9 = PyDict_Size(tmp_dict)
r10 = CPyDict_GetKeysIter(tmp_dict)
L1:
r11 = CPyDict_NextKey(r10, r8)
r12 = r11[1]
r8 = r12
r13 = r11[0]
if r13 goto L2 else goto L4 :: bool
L2:
r14 = r11[2]
r15 = unbox(int, r14)
x = r15
r16 = f(x)
r17 = box(int, r16)
r18 = PySet_Add(r7, r17)
r19 = r18 >= 0 :: signed
L3:
r20 = CPyDict_CheckSize(tmp_dict, r9)
goto L1
L4:
r21 = CPy_NoErrOccurred()
L5:
c = r7
return 1
def test4():
r0 :: set
r1 :: short_int
x :: int
r2 :: bit
r3 :: int
r4 :: object
r5 :: i32
r6 :: bit
r7 :: short_int
d :: set
L0:
r0 = PySet_New(0)
r1 = 2
x = r1
L1:
r2 = int_lt r1, 12
if r2 goto L2 else goto L4 :: bool
L2:
r3 = f(x)
r4 = box(int, r3)
r5 = PySet_Add(r0, r4)
r6 = r5 >= 0 :: signed
L3:
r7 = r1 + 4
r1 = r7
x = r7
goto L1
L4:
d = r0
return 1
def test5():
r0 :: set
r1 :: short_int
x :: int
r2 :: bit
r3 :: int
r4 :: object
r5 :: i32
r6 :: bit
r7 :: short_int
e :: set
L0:
r0 = PySet_New(0)
r1 = 2
x = r1
L1:
r2 = int_lt r1, 12
if r2 goto L2 else goto L4 :: bool
L2:
r3 = f(x)
r4 = box(int, r3)
r5 = PySet_Add(r0, r4)
r6 = r5 >= 0 :: signed
L3:
r7 = r1 + 4
r1 = r7
x = r7
goto L1
L4:
e = r0
return 1
[case testNewSetFromIterable3]
def f1(x: int) -> int:
return x
def f2(x: int) -> int:
return x * 10
def f3(x: int) -> int:
return x + 1
def test() -> None:
tmp_list = [1, 2, 3, 4, 5]
a = set(f3(x) for x in (f2(y) for y in (f1(z) for z in tmp_list if z < 4)))
[out]
def f1(x):
x :: int
L0:
return x
def f2(x):
x, r0 :: int
L0:
r0 = CPyTagged_Multiply(x, 20)
return r0
def f3(x):
x, r0 :: int
L0:
r0 = CPyTagged_Add(x, 2)
return r0
def test():
r0 :: list
r1, r2, r3, r4, r5 :: object
r6 :: ptr
tmp_list :: list
r7 :: set
r8, r9 :: list
r10, r11 :: native_int
r12 :: bit
r13 :: object
r14, z :: int
r15 :: bit
r16 :: int
r17 :: object
r18 :: i32
r19 :: bit
r20 :: native_int
r21, r22, r23 :: object
r24, y, r25 :: int
r26 :: object
r27 :: i32
r28, r29 :: bit
r30, r31, r32 :: object
r33, x, r34 :: int
r35 :: object
r36 :: i32
r37, r38 :: bit
a :: set
L0:
r0 = PyList_New(5)
r1 = object 1
r2 = object 2
r3 = object 3
r4 = object 4
r5 = object 5
r6 = list_items r0
buf_init_item r6, 0, r1
buf_init_item r6, 1, r2
buf_init_item r6, 2, r3
buf_init_item r6, 3, r4
buf_init_item r6, 4, r5
keep_alive r0
tmp_list = r0
r7 = PySet_New(0)
r8 = PyList_New(0)
r9 = PyList_New(0)
r10 = 0
L1:
r11 = var_object_size tmp_list
r12 = r10 < r11 :: signed
if r12 goto L2 else goto L6 :: bool
L2:
r13 = list_get_item_unsafe tmp_list, r10
r14 = unbox(int, r13)
z = r14
r15 = int_lt z, 8
if r15 goto L4 else goto L3 :: bool
L3:
goto L5
L4:
r16 = f1(z)
r17 = box(int, r16)
r18 = PyList_Append(r9, r17)
r19 = r18 >= 0 :: signed
L5:
r20 = r10 + 1
r10 = r20
goto L1
L6:
r21 = PyObject_GetIter(r9)
r22 = PyObject_GetIter(r21)
L7:
r23 = PyIter_Next(r22)
if is_error(r23) goto L10 else goto L8
L8:
r24 = unbox(int, r23)
y = r24
r25 = f2(y)
r26 = box(int, r25)
r27 = PyList_Append(r8, r26)
r28 = r27 >= 0 :: signed
L9:
goto L7
L10:
r29 = CPy_NoErrOccurred()
L11:
r30 = PyObject_GetIter(r8)
r31 = PyObject_GetIter(r30)
L12:
r32 = PyIter_Next(r31)
if is_error(r32) goto L15 else goto L13
L13:
r33 = unbox(int, r32)
x = r33
r34 = f3(x)
r35 = box(int, r34)
r36 = PySet_Add(r7, r35)
r37 = r36 >= 0 :: signed
L14:
goto L12
L15:
r38 = CPy_NoErrOccurred()
L16:
a = r7
return 1
[case testSetSize]
from typing import Set
def f() -> int:
return len({1, 2, 3})
[out]
def f():
r0 :: set
r1 :: object
r2 :: i32
r3 :: bit
r4 :: object
r5 :: i32
r6 :: bit
r7 :: object
r8 :: i32
r9 :: bit
r10 :: ptr
r11 :: native_int
r12 :: short_int
L0:
r0 = PySet_New(0)
r1 = object 1
r2 = PySet_Add(r0, r1)
r3 = r2 >= 0 :: signed
r4 = object 2
r5 = PySet_Add(r0, r4)
r6 = r5 >= 0 :: signed
r7 = object 3
r8 = PySet_Add(r0, r7)
r9 = r8 >= 0 :: signed
r10 = get_element_ptr r0 used :: PySetObject
r11 = load_mem r10 :: native_int*
keep_alive r0
r12 = r11 << 1
return r12
[case testSetContains]
from typing import Set
def f() -> bool:
x = {3, 4}
return (5 in x)
[out]
def f():
r0 :: set
r1 :: object
r2 :: i32
r3 :: bit
r4 :: object
r5 :: i32
r6 :: bit
x :: set
r7 :: object
r8 :: i32
r9 :: bit
r10 :: bool
L0:
r0 = PySet_New(0)
r1 = object 3
r2 = PySet_Add(r0, r1)
r3 = r2 >= 0 :: signed
r4 = object 4
r5 = PySet_Add(r0, r4)
r6 = r5 >= 0 :: signed
x = r0
r7 = object 5
r8 = PySet_Contains(x, r7)
r9 = r8 >= 0 :: signed
r10 = truncate r8: i32 to builtins.bool
return r10
[case testSetRemove]
from typing import Set
def f() -> Set[int]:
x = set() # type: Set[int]
x.remove(1)
return x
[out]
def f():
r0, x :: set
r1 :: object
r2 :: bit
L0:
r0 = PySet_New(0)
x = r0
r1 = object 1
r2 = CPySet_Remove(x, r1)
return x
[case testSetDiscard]
from typing import Set
def f() -> Set[int]:
x = set() # type: Set[int]
x.discard(1)
return x
[out]
def f():
r0, x :: set
r1 :: object
r2 :: i32
r3 :: bit
L0:
r0 = PySet_New(0)
x = r0
r1 = object 1
r2 = PySet_Discard(x, r1)
r3 = r2 >= 0 :: signed
return x
[case testSetAdd]
from typing import Set
def f() -> Set[int]:
x = set() # type: Set[int]
x.add(1)
return x
[out]
def f():
r0, x :: set
r1 :: object
r2 :: i32
r3 :: bit
L0:
r0 = PySet_New(0)
x = r0
r1 = object 1
r2 = PySet_Add(x, r1)
r3 = r2 >= 0 :: signed
return x
[case testSetClear]
from typing import Set
def f() -> Set[int]:
x = set() # type: Set[int]
x.clear()
return x
[out]
def f():
r0, x :: set
r1 :: i32
r2 :: bit
L0:
r0 = PySet_New(0)
x = r0
r1 = PySet_Clear(x)
r2 = r1 >= 0 :: signed
return x
[case testSetPop]
from typing import Set
def f(s : Set[int]) -> int:
return s.pop()
[out]
def f(s):
s :: set
r0 :: object
r1 :: int
L0:
r0 = PySet_Pop(s)
r1 = unbox(int, r0)
return r1
[case testSetUpdate]
from typing import Set, List
def update(s: Set[int], x: List[int]) -> None:
s.update(x)
[out]
def update(s, x):
s :: set
x :: list
r0 :: i32
r1 :: bit
L0:
r0 = _PySet_Update(s, x)
r1 = r0 >= 0 :: signed
return 1
[case testSetDisplay]
from typing import Set
def f(x: Set[int], y: Set[int]) -> Set[int]:
return {1, 2, *x, *y, 3}
[out]
def f(x, y):
x, y, r0 :: set
r1 :: object
r2 :: i32
r3 :: bit
r4 :: object
r5 :: i32
r6 :: bit
r7 :: i32
r8 :: bit
r9 :: i32
r10 :: bit
r11 :: object
r12 :: i32
r13 :: bit
L0:
r0 = PySet_New(0)
r1 = object 1
r2 = PySet_Add(r0, r1)
r3 = r2 >= 0 :: signed
r4 = object 2
r5 = PySet_Add(r0, r4)
r6 = r5 >= 0 :: signed
r7 = _PySet_Update(r0, x)
r8 = r7 >= 0 :: signed
r9 = _PySet_Update(r0, y)
r10 = r9 >= 0 :: signed
r11 = object 3
r12 = PySet_Add(r0, r11)
r13 = r12 >= 0 :: signed
return r0
[case testOperatorInSetLiteral]
from typing import Final
CONST: Final = "daylily"
non_const = 10
def precomputed(i: object) -> bool:
return i in {1, 2.0, 1 +2, 4j, "foo", b"bar", CONST, (None, (27,)), (), False}
def not_precomputed_non_final_name(i: int) -> bool:
return i in {non_const}
def not_precomputed_nested_set(i: int) -> bool:
return i in {frozenset({1}), 2}
[out]
def precomputed(i):
i :: object
r0 :: set
r1 :: i32
r2 :: bit
r3 :: bool
L0:
r0 = frozenset({(), (None, (27,)), 1, 2.0, 3, 4j, False, b'bar', 'daylily', 'foo'})
r1 = PySet_Contains(r0, i)
r2 = r1 >= 0 :: signed
r3 = truncate r1: i32 to builtins.bool
return r3
def not_precomputed_non_final_name(i):
i :: int
r0 :: dict
r1 :: str
r2 :: object
r3 :: int
r4 :: set
r5 :: object
r6 :: i32
r7 :: bit
r8 :: object
r9 :: i32
r10 :: bit
r11 :: bool
L0:
r0 = __main__.globals :: static
r1 = 'non_const'
r2 = CPyDict_GetItem(r0, r1)
r3 = unbox(int, r2)
r4 = PySet_New(0)
r5 = box(int, r3)
r6 = PySet_Add(r4, r5)
r7 = r6 >= 0 :: signed
r8 = box(int, i)
r9 = PySet_Contains(r4, r8)
r10 = r9 >= 0 :: signed
r11 = truncate r9: i32 to builtins.bool
return r11
def not_precomputed_nested_set(i):
i :: int
r0 :: set
r1 :: object
r2 :: i32
r3 :: bit
r4 :: frozenset
r5 :: set
r6 :: i32
r7 :: bit
r8 :: object
r9 :: i32
r10 :: bit
r11 :: object
r12 :: i32
r13 :: bit
r14 :: bool
L0:
r0 = PySet_New(0)
r1 = object 1
r2 = PySet_Add(r0, r1)
r3 = r2 >= 0 :: signed
r4 = PyFrozenSet_New(r0)
r5 = PySet_New(0)
r6 = PySet_Add(r5, r4)
r7 = r6 >= 0 :: signed
r8 = object 2
r9 = PySet_Add(r5, r8)
r10 = r9 >= 0 :: signed
r11 = box(int, i)
r12 = PySet_Contains(r5, r11)
r13 = r12 >= 0 :: signed
r14 = truncate r12: i32 to builtins.bool
return r14
[case testForSetLiteral]
from typing import Final
CONST: Final = 10
non_const = 20
def precomputed() -> None:
for _ in {"None", "True", "False"}:
pass
def precomputed2() -> None:
for _ in {None, False, 1, 2.0, "4", b"5", (6,), 7j, CONST, CONST + 1}:
pass
def not_precomputed() -> None:
for not_optimized in {non_const}:
pass
[out]
def precomputed():
r0 :: set
r1, r2 :: object
r3 :: str
_ :: object
r4 :: bit
L0:
r0 = frozenset({'False', 'None', 'True'})
r1 = PyObject_GetIter(r0)
L1:
r2 = PyIter_Next(r1)
if is_error(r2) goto L4 else goto L2
L2:
r3 = cast(str, r2)
_ = r3
L3:
goto L1
L4:
r4 = CPy_NoErrOccurred()
L5:
return 1
def precomputed2():
r0 :: set
r1, r2, _ :: object
r3 :: bit
L0:
r0 = frozenset({(6,), 1, 10, 11, 2.0, '4', 7j, False, None, b'5'})
r1 = PyObject_GetIter(r0)
L1:
r2 = PyIter_Next(r1)
if is_error(r2) goto L4 else goto L2
L2:
_ = r2
L3:
goto L1
L4:
r3 = CPy_NoErrOccurred()
L5:
return 1
def not_precomputed():
r0 :: dict
r1 :: str
r2 :: object
r3 :: int
r4 :: set
r5 :: object
r6 :: i32
r7 :: bit
r8, r9 :: object
r10, not_optimized :: int
r11 :: bit
L0:
r0 = __main__.globals :: static
r1 = 'non_const'
r2 = CPyDict_GetItem(r0, r1)
r3 = unbox(int, r2)
r4 = PySet_New(0)
r5 = box(int, r3)
r6 = PySet_Add(r4, r5)
r7 = r6 >= 0 :: signed
r8 = PyObject_GetIter(r4)
L1:
r9 = PyIter_Next(r8)
if is_error(r9) goto L4 else goto L2
L2:
r10 = unbox(int, r9)
not_optimized = r10
L3:
goto L1
L4:
r11 = CPy_NoErrOccurred()
L5:
return 1