Skip to content

Commit 97ec41a

Browse files
committed
feat(test): add mypyc tests for container creation from range
1 parent d1dffe2 commit 97ec41a

File tree

4 files changed

+695
-0
lines changed

4 files changed

+695
-0
lines changed

mypyc/test-data/irbuild-frozenset.test

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,181 @@ L0:
113113
r5 = r4 >= 0 :: signed
114114
r6 = truncate r4: i32 to builtins.bool
115115
return r6
116+
117+
[case testFrozenSetFromRange1]
118+
from typing import FrozenSet
119+
def fn() -> FrozenSet[int]:
120+
return frozenset(range(3))
121+
[out]
122+
def fn():
123+
r0, r1 :: object
124+
r2 :: object[1]
125+
r3 :: object_ptr
126+
r4 :: object
127+
r5 :: range
128+
r6 :: frozenset
129+
L0:
130+
r0 = load_address PyRange_Type
131+
r1 = object 3
132+
r2 = [r1]
133+
r3 = load_address r2
134+
r4 = PyObject_Vectorcall(r0, r3, 1, 0)
135+
keep_alive r1
136+
r5 = cast(range, r4)
137+
r6 = PyFrozenSet_New(r5)
138+
return r6
139+
140+
[case testFrozenSetFromRange2]
141+
from typing import FrozenSet
142+
def fn() -> FrozenSet[int]:
143+
return frozenset(range(1, 3))
144+
[out]
145+
def fn():
146+
r0, r1, r2 :: object
147+
r3 :: object[2]
148+
r4 :: object_ptr
149+
r5 :: object
150+
r6 :: range
151+
r7 :: frozenset
152+
L0:
153+
r0 = load_address PyRange_Type
154+
r1 = object 1
155+
r2 = object 3
156+
r3 = [r1, r2]
157+
r4 = load_address r3
158+
r5 = PyObject_Vectorcall(r0, r4, 2, 0)
159+
keep_alive r1, r2
160+
r6 = cast(range, r5)
161+
r7 = PyFrozenSet_New(r6)
162+
return r7
163+
164+
[case testFrozenSetFromRange3]
165+
from typing import FrozenSet
166+
def fn() -> FrozenSet[int]:
167+
return frozenset(range(1, 3, 2))
168+
[out]
169+
def fn():
170+
r0, r1, r2, r3 :: object
171+
r4 :: object[3]
172+
r5 :: object_ptr
173+
r6 :: object
174+
r7 :: range
175+
r8 :: frozenset
176+
L0:
177+
r0 = load_address PyRange_Type
178+
r1 = object 1
179+
r2 = object 3
180+
r3 = object 2
181+
r4 = [r1, r2, r3]
182+
r5 = load_address r4
183+
r6 = PyObject_Vectorcall(r0, r5, 3, 0)
184+
keep_alive r1, r2, r3
185+
r7 = cast(range, r6)
186+
r8 = PyFrozenSet_New(r7)
187+
return r8
188+
189+
[case testFrozenSetFromRange4]
190+
from typing import FrozenSet
191+
def fn() -> FrozenSet[str]:
192+
return frozenset(str(i) for i in range(3))
193+
[out]
194+
def fn():
195+
r0 :: list
196+
r1 :: short_int
197+
i :: int
198+
r2 :: bit
199+
r3 :: str
200+
r4 :: i32
201+
r5 :: bit
202+
r6 :: short_int
203+
r7 :: frozenset
204+
L0:
205+
r0 = PyList_New(0)
206+
r1 = 0
207+
i = r1
208+
L1:
209+
r2 = int_lt r1, 6
210+
if r2 goto L2 else goto L4 :: bool
211+
L2:
212+
r3 = CPyTagged_Str(i)
213+
r4 = PyList_Append(r0, r3)
214+
r5 = r4 >= 0 :: signed
215+
L3:
216+
r6 = r1 + 2
217+
r1 = r6
218+
i = r6
219+
goto L1
220+
L4:
221+
r7 = PyFrozenSet_New(r0)
222+
return r7
223+
224+
[case testFrozenSetFromRange5]
225+
from typing import FrozenSet
226+
def fn() -> FrozenSet[str]:
227+
return frozenset(str(i) for i in range(1, 3))
228+
[out]
229+
def fn():
230+
r0 :: list
231+
r1 :: short_int
232+
i :: int
233+
r2 :: bit
234+
r3 :: str
235+
r4 :: i32
236+
r5 :: bit
237+
r6 :: short_int
238+
r7 :: frozenset
239+
L0:
240+
r0 = PyList_New(0)
241+
r1 = 2
242+
i = r1
243+
L1:
244+
r2 = int_lt r1, 6
245+
if r2 goto L2 else goto L4 :: bool
246+
L2:
247+
r3 = CPyTagged_Str(i)
248+
r4 = PyList_Append(r0, r3)
249+
r5 = r4 >= 0 :: signed
250+
L3:
251+
r6 = r1 + 2
252+
r1 = r6
253+
i = r6
254+
goto L1
255+
L4:
256+
r7 = PyFrozenSet_New(r0)
257+
return r7
258+
259+
[case testFrozenSetFromRange6]
260+
from typing import FrozenSet
261+
def fn() -> FrozenSet[str]:
262+
return frozenset(str(i) for i in range(1, 3, 2))
263+
[out]
264+
def fn():
265+
r0 :: list
266+
r1 :: short_int
267+
i :: int
268+
r2 :: bit
269+
r3 :: str
270+
r4 :: i32
271+
r5 :: bit
272+
r6 :: short_int
273+
r7 :: frozenset
274+
L0:
275+
r0 = PyList_New(0)
276+
r1 = 2
277+
i = r1
278+
L1:
279+
r2 = int_lt r1, 6
280+
if r2 goto L2 else goto L4 :: bool
281+
L2:
282+
r3 = CPyTagged_Str(i)
283+
r4 = PyList_Append(r0, r3)
284+
r5 = r4 >= 0 :: signed
285+
L3:
286+
r6 = r1 + 4
287+
r1 = r6
288+
i = r6
289+
goto L1
290+
L4:
291+
r7 = PyFrozenSet_New(r0)
292+
return r7
293+

mypyc/test-data/irbuild-lists.test

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -926,3 +926,181 @@ L9:
926926
L10:
927927
a = r3
928928
return 1
929+
930+
[case testListFromRange1]
931+
def fn() -> list[int]:
932+
return list(range(3))
933+
[out]
934+
def fn():
935+
r0, r1 :: object
936+
r2 :: object[1]
937+
r3 :: object_ptr
938+
r4 :: object
939+
r5 :: range
940+
r6 :: list
941+
L0:
942+
r0 = load_address PyRange_Type
943+
r1 = object 3
944+
r2 = [r1]
945+
r3 = load_address r2
946+
r4 = PyObject_Vectorcall(r0, r3, 1, 0)
947+
keep_alive r1
948+
r5 = cast(range, r4)
949+
r6 = PySequence_List(r5)
950+
return r6
951+
952+
[case testListFromRange2]
953+
def fn() -> list[int]:
954+
return list(range(1, 3))
955+
[out]
956+
def fn():
957+
r0, r1, r2 :: object
958+
r3 :: object[2]
959+
r4 :: object_ptr
960+
r5 :: object
961+
r6 :: range
962+
r7 :: list
963+
L0:
964+
r0 = load_address PyRange_Type
965+
r1 = object 1
966+
r2 = object 3
967+
r3 = [r1, r2]
968+
r4 = load_address r3
969+
r5 = PyObject_Vectorcall(r0, r4, 2, 0)
970+
keep_alive r1, r2
971+
r6 = cast(range, r5)
972+
r7 = PySequence_List(r6)
973+
return r7
974+
975+
[case testListFromRange3]
976+
def fn() -> list[int]:
977+
return list(range(1, 3, 2))
978+
[out]
979+
def fn():
980+
r0, r1, r2, r3 :: object
981+
r4 :: object[3]
982+
r5 :: object_ptr
983+
r6 :: object
984+
r7 :: range
985+
r8 :: list
986+
L0:
987+
r0 = load_address PyRange_Type
988+
r1 = object 1
989+
r2 = object 3
990+
r3 = object 2
991+
r4 = [r1, r2, r3]
992+
r5 = load_address r4
993+
r6 = PyObject_Vectorcall(r0, r5, 3, 0)
994+
keep_alive r1, r2, r3
995+
r7 = cast(range, r6)
996+
r8 = PySequence_List(r7)
997+
return r8
998+
999+
[case testListFromRange4]
1000+
def fn() -> list[str]:
1001+
return list(str(i) for i in range(3))
1002+
[out]
1003+
def fn():
1004+
r0 :: list
1005+
r1 :: short_int
1006+
i :: int
1007+
r2 :: bit
1008+
r3 :: str
1009+
r4 :: i32
1010+
r5 :: bit
1011+
r6 :: short_int
1012+
r7 :: object
1013+
r8 :: list
1014+
L0:
1015+
r0 = PyList_New(0)
1016+
r1 = 0
1017+
i = r1
1018+
L1:
1019+
r2 = int_lt r1, 6
1020+
if r2 goto L2 else goto L4 :: bool
1021+
L2:
1022+
r3 = CPyTagged_Str(i)
1023+
r4 = PyList_Append(r0, r3)
1024+
r5 = r4 >= 0 :: signed
1025+
L3:
1026+
r6 = r1 + 2
1027+
r1 = r6
1028+
i = r6
1029+
goto L1
1030+
L4:
1031+
r7 = PyObject_GetIter(r0)
1032+
r8 = PySequence_List(r7)
1033+
return r8
1034+
1035+
[case testListFromRange5]
1036+
def fn() -> list[str]:
1037+
return list(str(i) for i in range(1, 3))
1038+
[out]
1039+
def fn():
1040+
r0 :: list
1041+
r1 :: short_int
1042+
i :: int
1043+
r2 :: bit
1044+
r3 :: str
1045+
r4 :: i32
1046+
r5 :: bit
1047+
r6 :: short_int
1048+
r7 :: object
1049+
r8 :: list
1050+
L0:
1051+
r0 = PyList_New(0)
1052+
r1 = 2
1053+
i = r1
1054+
L1:
1055+
r2 = int_lt r1, 6
1056+
if r2 goto L2 else goto L4 :: bool
1057+
L2:
1058+
r3 = CPyTagged_Str(i)
1059+
r4 = PyList_Append(r0, r3)
1060+
r5 = r4 >= 0 :: signed
1061+
L3:
1062+
r6 = r1 + 2
1063+
r1 = r6
1064+
i = r6
1065+
goto L1
1066+
L4:
1067+
r7 = PyObject_GetIter(r0)
1068+
r8 = PySequence_List(r7)
1069+
return r8
1070+
1071+
[case testListFromRange6]
1072+
def fn() -> list[str]:
1073+
return list(str(i) for i in range(1, 3, 2))
1074+
[out]
1075+
def fn():
1076+
r0 :: list
1077+
r1 :: short_int
1078+
i :: int
1079+
r2 :: bit
1080+
r3 :: str
1081+
r4 :: i32
1082+
r5 :: bit
1083+
r6 :: short_int
1084+
r7 :: object
1085+
r8 :: list
1086+
L0:
1087+
r0 = PyList_New(0)
1088+
r1 = 2
1089+
i = r1
1090+
L1:
1091+
r2 = int_lt r1, 6
1092+
if r2 goto L2 else goto L4 :: bool
1093+
L2:
1094+
r3 = CPyTagged_Str(i)
1095+
r4 = PyList_Append(r0, r3)
1096+
r5 = r4 >= 0 :: signed
1097+
L3:
1098+
r6 = r1 + 4
1099+
r1 = r6
1100+
i = r6
1101+
goto L1
1102+
L4:
1103+
r7 = PyObject_GetIter(r0)
1104+
r8 = PySequence_List(r7)
1105+
return r8
1106+

0 commit comments

Comments
 (0)