Skip to content

Commit 76874f7

Browse files
committed
feat(test): add mypyc tests for container creation from range
1 parent 555edf3 commit 76874f7

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
@@ -572,3 +572,181 @@ def sort_iterable(a):
572572
L0:
573573
r0 = CPySequence_Sort(a)
574574
return 1
575+
576+
[case testListFromRange1]
577+
def fn() -> list[int]:
578+
return list(range(3))
579+
[out]
580+
def fn():
581+
r0, r1 :: object
582+
r2 :: object[1]
583+
r3 :: object_ptr
584+
r4 :: object
585+
r5 :: range
586+
r6 :: list
587+
L0:
588+
r0 = load_address PyRange_Type
589+
r1 = object 3
590+
r2 = [r1]
591+
r3 = load_address r2
592+
r4 = PyObject_Vectorcall(r0, r3, 1, 0)
593+
keep_alive r1
594+
r5 = cast(range, r4)
595+
r6 = PySequence_List(r5)
596+
return r6
597+
598+
[case testListFromRange2]
599+
def fn() -> list[int]:
600+
return list(range(1, 3))
601+
[out]
602+
def fn():
603+
r0, r1, r2 :: object
604+
r3 :: object[2]
605+
r4 :: object_ptr
606+
r5 :: object
607+
r6 :: range
608+
r7 :: list
609+
L0:
610+
r0 = load_address PyRange_Type
611+
r1 = object 1
612+
r2 = object 3
613+
r3 = [r1, r2]
614+
r4 = load_address r3
615+
r5 = PyObject_Vectorcall(r0, r4, 2, 0)
616+
keep_alive r1, r2
617+
r6 = cast(range, r5)
618+
r7 = PySequence_List(r6)
619+
return r7
620+
621+
[case testListFromRange3]
622+
def fn() -> list[int]:
623+
return list(range(1, 3, 2))
624+
[out]
625+
def fn():
626+
r0, r1, r2, r3 :: object
627+
r4 :: object[3]
628+
r5 :: object_ptr
629+
r6 :: object
630+
r7 :: range
631+
r8 :: list
632+
L0:
633+
r0 = load_address PyRange_Type
634+
r1 = object 1
635+
r2 = object 3
636+
r3 = object 2
637+
r4 = [r1, r2, r3]
638+
r5 = load_address r4
639+
r6 = PyObject_Vectorcall(r0, r5, 3, 0)
640+
keep_alive r1, r2, r3
641+
r7 = cast(range, r6)
642+
r8 = PySequence_List(r7)
643+
return r8
644+
645+
[case testListFromRange4]
646+
def fn() -> list[str]:
647+
return list(str(i) for i in range(3))
648+
[out]
649+
def fn():
650+
r0 :: list
651+
r1 :: short_int
652+
i :: int
653+
r2 :: bit
654+
r3 :: str
655+
r4 :: i32
656+
r5 :: bit
657+
r6 :: short_int
658+
r7 :: object
659+
r8 :: list
660+
L0:
661+
r0 = PyList_New(0)
662+
r1 = 0
663+
i = r1
664+
L1:
665+
r2 = int_lt r1, 6
666+
if r2 goto L2 else goto L4 :: bool
667+
L2:
668+
r3 = CPyTagged_Str(i)
669+
r4 = PyList_Append(r0, r3)
670+
r5 = r4 >= 0 :: signed
671+
L3:
672+
r6 = r1 + 2
673+
r1 = r6
674+
i = r6
675+
goto L1
676+
L4:
677+
r7 = PyObject_GetIter(r0)
678+
r8 = PySequence_List(r7)
679+
return r8
680+
681+
[case testListFromRange5]
682+
def fn() -> list[str]:
683+
return list(str(i) for i in range(1, 3))
684+
[out]
685+
def fn():
686+
r0 :: list
687+
r1 :: short_int
688+
i :: int
689+
r2 :: bit
690+
r3 :: str
691+
r4 :: i32
692+
r5 :: bit
693+
r6 :: short_int
694+
r7 :: object
695+
r8 :: list
696+
L0:
697+
r0 = PyList_New(0)
698+
r1 = 2
699+
i = r1
700+
L1:
701+
r2 = int_lt r1, 6
702+
if r2 goto L2 else goto L4 :: bool
703+
L2:
704+
r3 = CPyTagged_Str(i)
705+
r4 = PyList_Append(r0, r3)
706+
r5 = r4 >= 0 :: signed
707+
L3:
708+
r6 = r1 + 2
709+
r1 = r6
710+
i = r6
711+
goto L1
712+
L4:
713+
r7 = PyObject_GetIter(r0)
714+
r8 = PySequence_List(r7)
715+
return r8
716+
717+
[case testListFromRange6]
718+
def fn() -> list[str]:
719+
return list(str(i) for i in range(1, 3, 2))
720+
[out]
721+
def fn():
722+
r0 :: list
723+
r1 :: short_int
724+
i :: int
725+
r2 :: bit
726+
r3 :: str
727+
r4 :: i32
728+
r5 :: bit
729+
r6 :: short_int
730+
r7 :: object
731+
r8 :: list
732+
L0:
733+
r0 = PyList_New(0)
734+
r1 = 2
735+
i = r1
736+
L1:
737+
r2 = int_lt r1, 6
738+
if r2 goto L2 else goto L4 :: bool
739+
L2:
740+
r3 = CPyTagged_Str(i)
741+
r4 = PyList_Append(r0, r3)
742+
r5 = r4 >= 0 :: signed
743+
L3:
744+
r6 = r1 + 4
745+
r1 = r6
746+
i = r6
747+
goto L1
748+
L4:
749+
r7 = PyObject_GetIter(r0)
750+
r8 = PySequence_List(r7)
751+
return r8
752+

0 commit comments

Comments
 (0)