Skip to content

Commit b06133d

Browse files
committed
feat(test): add mypyc tests for container creation from range
1 parent 9ae3e9a commit b06133d

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
@@ -968,3 +968,181 @@ L3:
968968
L4:
969969
a = r19
970970
return 1
971+
972+
[case testListFromRange1]
973+
def fn() -> list[int]:
974+
return list(range(3))
975+
[out]
976+
def fn():
977+
r0, r1 :: object
978+
r2 :: object[1]
979+
r3 :: object_ptr
980+
r4 :: object
981+
r5 :: range
982+
r6 :: list
983+
L0:
984+
r0 = load_address PyRange_Type
985+
r1 = object 3
986+
r2 = [r1]
987+
r3 = load_address r2
988+
r4 = PyObject_Vectorcall(r0, r3, 1, 0)
989+
keep_alive r1
990+
r5 = cast(range, r4)
991+
r6 = PySequence_List(r5)
992+
return r6
993+
994+
[case testListFromRange2]
995+
def fn() -> list[int]:
996+
return list(range(1, 3))
997+
[out]
998+
def fn():
999+
r0, r1, r2 :: object
1000+
r3 :: object[2]
1001+
r4 :: object_ptr
1002+
r5 :: object
1003+
r6 :: range
1004+
r7 :: list
1005+
L0:
1006+
r0 = load_address PyRange_Type
1007+
r1 = object 1
1008+
r2 = object 3
1009+
r3 = [r1, r2]
1010+
r4 = load_address r3
1011+
r5 = PyObject_Vectorcall(r0, r4, 2, 0)
1012+
keep_alive r1, r2
1013+
r6 = cast(range, r5)
1014+
r7 = PySequence_List(r6)
1015+
return r7
1016+
1017+
[case testListFromRange3]
1018+
def fn() -> list[int]:
1019+
return list(range(1, 3, 2))
1020+
[out]
1021+
def fn():
1022+
r0, r1, r2, r3 :: object
1023+
r4 :: object[3]
1024+
r5 :: object_ptr
1025+
r6 :: object
1026+
r7 :: range
1027+
r8 :: list
1028+
L0:
1029+
r0 = load_address PyRange_Type
1030+
r1 = object 1
1031+
r2 = object 3
1032+
r3 = object 2
1033+
r4 = [r1, r2, r3]
1034+
r5 = load_address r4
1035+
r6 = PyObject_Vectorcall(r0, r5, 3, 0)
1036+
keep_alive r1, r2, r3
1037+
r7 = cast(range, r6)
1038+
r8 = PySequence_List(r7)
1039+
return r8
1040+
1041+
[case testListFromRange4]
1042+
def fn() -> list[str]:
1043+
return list(str(i) for i in range(3))
1044+
[out]
1045+
def fn():
1046+
r0 :: list
1047+
r1 :: short_int
1048+
i :: int
1049+
r2 :: bit
1050+
r3 :: str
1051+
r4 :: i32
1052+
r5 :: bit
1053+
r6 :: short_int
1054+
r7 :: object
1055+
r8 :: list
1056+
L0:
1057+
r0 = PyList_New(0)
1058+
r1 = 0
1059+
i = r1
1060+
L1:
1061+
r2 = int_lt r1, 6
1062+
if r2 goto L2 else goto L4 :: bool
1063+
L2:
1064+
r3 = CPyTagged_Str(i)
1065+
r4 = PyList_Append(r0, r3)
1066+
r5 = r4 >= 0 :: signed
1067+
L3:
1068+
r6 = r1 + 2
1069+
r1 = r6
1070+
i = r6
1071+
goto L1
1072+
L4:
1073+
r7 = PyObject_GetIter(r0)
1074+
r8 = PySequence_List(r7)
1075+
return r8
1076+
1077+
[case testListFromRange5]
1078+
def fn() -> list[str]:
1079+
return list(str(i) for i in range(1, 3))
1080+
[out]
1081+
def fn():
1082+
r0 :: list
1083+
r1 :: short_int
1084+
i :: int
1085+
r2 :: bit
1086+
r3 :: str
1087+
r4 :: i32
1088+
r5 :: bit
1089+
r6 :: short_int
1090+
r7 :: object
1091+
r8 :: list
1092+
L0:
1093+
r0 = PyList_New(0)
1094+
r1 = 2
1095+
i = r1
1096+
L1:
1097+
r2 = int_lt r1, 6
1098+
if r2 goto L2 else goto L4 :: bool
1099+
L2:
1100+
r3 = CPyTagged_Str(i)
1101+
r4 = PyList_Append(r0, r3)
1102+
r5 = r4 >= 0 :: signed
1103+
L3:
1104+
r6 = r1 + 2
1105+
r1 = r6
1106+
i = r6
1107+
goto L1
1108+
L4:
1109+
r7 = PyObject_GetIter(r0)
1110+
r8 = PySequence_List(r7)
1111+
return r8
1112+
1113+
[case testListFromRange6]
1114+
def fn() -> list[str]:
1115+
return list(str(i) for i in range(1, 3, 2))
1116+
[out]
1117+
def fn():
1118+
r0 :: list
1119+
r1 :: short_int
1120+
i :: int
1121+
r2 :: bit
1122+
r3 :: str
1123+
r4 :: i32
1124+
r5 :: bit
1125+
r6 :: short_int
1126+
r7 :: object
1127+
r8 :: list
1128+
L0:
1129+
r0 = PyList_New(0)
1130+
r1 = 2
1131+
i = r1
1132+
L1:
1133+
r2 = int_lt r1, 6
1134+
if r2 goto L2 else goto L4 :: bool
1135+
L2:
1136+
r3 = CPyTagged_Str(i)
1137+
r4 = PyList_Append(r0, r3)
1138+
r5 = r4 >= 0 :: signed
1139+
L3:
1140+
r6 = r1 + 4
1141+
r1 = r6
1142+
i = r6
1143+
goto L1
1144+
L4:
1145+
r7 = PyObject_GetIter(r0)
1146+
r8 = PySequence_List(r7)
1147+
return r8
1148+

0 commit comments

Comments
 (0)