| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838 |
- [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
- 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, r5, r6, r7 :: ptr
- tmp_list :: list
- r8 :: set
- r9 :: short_int
- r10 :: ptr
- r11 :: native_int
- r12 :: short_int
- r13 :: bit
- r14 :: object
- r15, x, r16 :: int
- r17 :: object
- r18 :: i32
- r19 :: bit
- r20 :: short_int
- a :: set
- L0:
- r0 = PyList_New(3)
- r1 = object 1
- r2 = object 3
- r3 = object 5
- r4 = get_element_ptr r0 ob_item :: PyListObject
- r5 = load_mem r4 :: ptr*
- set_mem r5, r1 :: builtins.object*
- r6 = r5 + WORD_SIZE*1
- set_mem r6, r2 :: builtins.object*
- r7 = r5 + WORD_SIZE*2
- set_mem r7, r3 :: builtins.object*
- keep_alive r0
- tmp_list = r0
- r8 = PySet_New(0)
- r9 = 0
- L1:
- r10 = get_element_ptr tmp_list ob_size :: PyVarObject
- r11 = load_mem r10 :: native_int*
- keep_alive tmp_list
- r12 = r11 << 1
- r13 = r9 < r12 :: signed
- if r13 goto L2 else goto L4 :: bool
- L2:
- r14 = CPyList_GetItemUnsafe(tmp_list, r9)
- r15 = unbox(int, r14)
- x = r15
- r16 = f(x)
- r17 = box(int, r16)
- r18 = PySet_Add(r8, r17)
- r19 = r18 >= 0 :: signed
- L3:
- r20 = r9 + 2
- r9 = r20
- goto L1
- L4:
- a = r8
- 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_NoErrOccured()
- 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 :: short_int
- r11 :: object
- r12 :: tuple[bool, short_int, object]
- r13 :: short_int
- r14 :: bool
- r15 :: object
- r16, x, r17 :: int
- r18 :: object
- r19 :: i32
- r20, r21, r22 :: 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 = r9 << 1
- r11 = CPyDict_GetKeysIter(tmp_dict)
- L1:
- r12 = CPyDict_NextKey(r11, r8)
- r13 = r12[1]
- r8 = r13
- r14 = r12[0]
- if r14 goto L2 else goto L4 :: bool
- L2:
- r15 = r12[2]
- r16 = unbox(int, r15)
- x = r16
- r17 = f(x)
- r18 = box(int, r17)
- r19 = PySet_Add(r7, r18)
- r20 = r19 >= 0 :: signed
- L3:
- r21 = CPyDict_CheckSize(tmp_dict, r10)
- goto L1
- L4:
- r22 = CPy_NoErrOccured()
- 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 = r1 < 12 :: signed
- 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 = r1 < 12 :: signed
- 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, r7, r8, r9, r10, r11 :: ptr
- tmp_list :: list
- r12 :: set
- r13, r14 :: list
- r15 :: short_int
- r16 :: ptr
- r17 :: native_int
- r18 :: short_int
- r19 :: bit
- r20 :: object
- r21, z :: int
- r22 :: native_int
- r23 :: bit
- r24 :: native_int
- r25, r26, r27 :: bit
- r28 :: bool
- r29 :: bit
- r30 :: int
- r31 :: object
- r32 :: i32
- r33 :: bit
- r34 :: short_int
- r35, r36, r37 :: object
- r38, y, r39 :: int
- r40 :: object
- r41 :: i32
- r42, r43 :: bit
- r44, r45, r46 :: object
- r47, x, r48 :: int
- r49 :: object
- r50 :: i32
- r51, r52 :: bit
- a :: set
- L0:
- r0 = PyList_New(5)
- r1 = object 1
- r2 = object 2
- r3 = object 3
- r4 = object 4
- r5 = object 5
- r6 = get_element_ptr r0 ob_item :: PyListObject
- r7 = load_mem r6 :: ptr*
- set_mem r7, r1 :: builtins.object*
- r8 = r7 + WORD_SIZE*1
- set_mem r8, r2 :: builtins.object*
- r9 = r7 + WORD_SIZE*2
- set_mem r9, r3 :: builtins.object*
- r10 = r7 + WORD_SIZE*3
- set_mem r10, r4 :: builtins.object*
- r11 = r7 + WORD_SIZE*4
- set_mem r11, r5 :: builtins.object*
- keep_alive r0
- tmp_list = r0
- r12 = PySet_New(0)
- r13 = PyList_New(0)
- r14 = PyList_New(0)
- r15 = 0
- L1:
- r16 = get_element_ptr tmp_list ob_size :: PyVarObject
- r17 = load_mem r16 :: native_int*
- keep_alive tmp_list
- r18 = r17 << 1
- r19 = r15 < r18 :: signed
- if r19 goto L2 else goto L9 :: bool
- L2:
- r20 = CPyList_GetItemUnsafe(tmp_list, r15)
- r21 = unbox(int, r20)
- z = r21
- r22 = z & 1
- r23 = r22 == 0
- r24 = 8 & 1
- r25 = r24 == 0
- r26 = r23 & r25
- if r26 goto L3 else goto L4 :: bool
- L3:
- r27 = z < 8 :: signed
- r28 = r27
- goto L5
- L4:
- r29 = CPyTagged_IsLt_(z, 8)
- r28 = r29
- L5:
- if r28 goto L7 else goto L6 :: bool
- L6:
- goto L8
- L7:
- r30 = f1(z)
- r31 = box(int, r30)
- r32 = PyList_Append(r14, r31)
- r33 = r32 >= 0 :: signed
- L8:
- r34 = r15 + 2
- r15 = r34
- goto L1
- L9:
- r35 = PyObject_GetIter(r14)
- r36 = PyObject_GetIter(r35)
- L10:
- r37 = PyIter_Next(r36)
- if is_error(r37) goto L13 else goto L11
- L11:
- r38 = unbox(int, r37)
- y = r38
- r39 = f2(y)
- r40 = box(int, r39)
- r41 = PyList_Append(r13, r40)
- r42 = r41 >= 0 :: signed
- L12:
- goto L10
- L13:
- r43 = CPy_NoErrOccured()
- L14:
- r44 = PyObject_GetIter(r13)
- r45 = PyObject_GetIter(r44)
- L15:
- r46 = PyIter_Next(r45)
- if is_error(r46) goto L18 else goto L16
- L16:
- r47 = unbox(int, r46)
- x = r47
- r48 = f3(x)
- r49 = box(int, r48)
- r50 = PySet_Add(r12, r49)
- r51 = r50 >= 0 :: signed
- L17:
- goto L15
- L18:
- r52 = CPy_NoErrOccured()
- L19:
- a = r12
- 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_extensions 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 :: object
- 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_extensions 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_NoErrOccured()
- 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_NoErrOccured()
- 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_NoErrOccured()
- L5:
- return 1
|