Skip to content

Commit d2c9826

Browse files
committed
feat(test): test containers from literal exprs
1 parent 4335273 commit d2c9826

File tree

2 files changed

+203
-0
lines changed

2 files changed

+203
-0
lines changed

mypyc/test-data/irbuild-lists.test

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,47 @@ L4:
620620
a = r3
621621
return 1
622622

623+
[case testListBuiltFromStrExpr]
624+
def f2(val: str) -> str:
625+
return val + "f2"
626+
627+
def test() -> None:
628+
a = [f2(x) for x in "abc"]
629+
[out]
630+
def f2(val):
631+
val, r0, r1 :: str
632+
L0:
633+
r0 = 'f2'
634+
r1 = PyUnicode_Concat(val, r0)
635+
return r1
636+
def test():
637+
r0 :: str
638+
r1 :: list
639+
r2 :: native_int
640+
r3 :: bit
641+
r4, x, r5 :: str
642+
r6 :: native_int
643+
a :: list
644+
L0:
645+
r0 = 'abc'
646+
r1 = PyList_New(3)
647+
r2 = 0
648+
L1:
649+
r3 = r2 < 3 :: signed
650+
if r3 goto L2 else goto L4 :: bool
651+
L2:
652+
r4 = CPyStr_GetItemUnsafe(r0, r2)
653+
x = r4
654+
r5 = f2(x)
655+
CPyList_SetItemUnsafe(r1, r2, r5)
656+
L3:
657+
r6 = r2 + 1
658+
r2 = r6
659+
goto L1
660+
L4:
661+
a = r1
662+
return 1
663+
623664
[case testListBuiltFromFinalStr]
624665
from typing import Final
625666

@@ -729,6 +770,66 @@ L8:
729770
a = r2
730771
return 1
731772

773+
[case testListBuiltFromBytesExpr_64bit]
774+
def f2(val: int) -> int:
775+
return val + 2
776+
777+
def test() -> None:
778+
a = [f2(x) for x in b"abc"]
779+
780+
[out]
781+
def f2(val):
782+
val, r0 :: int
783+
L0:
784+
r0 = CPyTagged_Add(val, 4)
785+
return r0
786+
def test():
787+
r0 :: bytes
788+
r1 :: list
789+
r2 :: native_int
790+
r3, r4, r5 :: bit
791+
r6, r7, r8, r9 :: int
792+
r10 :: object
793+
r11, x, r12 :: int
794+
r13 :: object
795+
r14 :: native_int
796+
a :: list
797+
L0:
798+
r0 = b'abc'
799+
r1 = PyList_New(3)
800+
r2 = 0
801+
L1:
802+
r3 = r2 < 3 :: signed
803+
if r3 goto L2 else goto L8 :: bool
804+
L2:
805+
r4 = r2 <= 4611686018427387903 :: signed
806+
if r4 goto L3 else goto L4 :: bool
807+
L3:
808+
r5 = r2 >= -4611686018427387904 :: signed
809+
if r5 goto L5 else goto L4 :: bool
810+
L4:
811+
r6 = CPyTagged_FromInt64(r2)
812+
r7 = r6
813+
goto L6
814+
L5:
815+
r8 = r2 << 1
816+
r7 = r8
817+
L6:
818+
r9 = CPyBytes_GetItem(r0, r7)
819+
r10 = box(int, r9)
820+
r11 = unbox(int, r10)
821+
x = r11
822+
r12 = f2(x)
823+
r13 = box(int, r12)
824+
CPyList_SetItemUnsafe(r1, r2, r13)
825+
L7:
826+
r14 = r2 + 1
827+
r2 = r14
828+
goto L1
829+
L8:
830+
a = r1
831+
return 1
832+
732833
[case testListBuiltFromFinalBytes_64bit]
733834
from typing import Final
734835

mypyc/test-data/irbuild-tuple.test

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,48 @@ L4:
319319
a = r3
320320
return 1
321321

322+
[case testTupleBuiltFromStrExpr]
323+
def f2(val: str) -> str:
324+
return val + "f2"
325+
326+
def test() -> None:
327+
a = tuple(f2(x) for x in "abc")
328+
329+
[out]
330+
def f2(val):
331+
val, r0, r1 :: str
332+
L0:
333+
r0 = 'f2'
334+
r1 = PyUnicode_Concat(val, r0)
335+
return r1
336+
def test():
337+
r0 :: str
338+
r1 :: tuple
339+
r2 :: native_int
340+
r3 :: bit
341+
r4, x, r5 :: str
342+
r6 :: native_int
343+
a :: tuple
344+
L0:
345+
r0 = 'abc'
346+
r1 = PyTuple_New(3)
347+
r2 = 0
348+
L1:
349+
r3 = r2 < 3 :: signed
350+
if r3 goto L2 else goto L4 :: bool
351+
L2:
352+
r4 = CPyStr_GetItemUnsafe(r0, r2)
353+
x = r4
354+
r5 = f2(x)
355+
CPySequenceTuple_SetItemUnsafe(r1, r2, r5)
356+
L3:
357+
r6 = r2 + 1
358+
r2 = r6
359+
goto L1
360+
L4:
361+
a = r1
362+
return 1
363+
322364
[case testTupleBuiltFromFinalStr]
323365
from typing import Final
324366

@@ -428,6 +470,66 @@ L8:
428470
a = r2
429471
return 1
430472

473+
[case testTupleBuiltFromBytesExpr_64bit]
474+
def f2(val: int) -> int:
475+
return val + 2
476+
477+
def test() -> None:
478+
a = tuple(f2(x) for x in b"abc")
479+
480+
[out]
481+
def f2(val):
482+
val, r0 :: int
483+
L0:
484+
r0 = CPyTagged_Add(val, 4)
485+
return r0
486+
def test():
487+
r0 :: bytes
488+
r1 :: tuple
489+
r2 :: native_int
490+
r3, r4, r5 :: bit
491+
r6, r7, r8, r9 :: int
492+
r10 :: object
493+
r11, x, r12 :: int
494+
r13 :: object
495+
r14 :: native_int
496+
a :: tuple
497+
L0:
498+
r0 = b'abc'
499+
r1 = PyTuple_New(3)
500+
r2 = 0
501+
L1:
502+
r3 = r2 < 3 :: signed
503+
if r3 goto L2 else goto L8 :: bool
504+
L2:
505+
r4 = r2 <= 4611686018427387903 :: signed
506+
if r4 goto L3 else goto L4 :: bool
507+
L3:
508+
r5 = r2 >= -4611686018427387904 :: signed
509+
if r5 goto L5 else goto L4 :: bool
510+
L4:
511+
r6 = CPyTagged_FromInt64(r2)
512+
r7 = r6
513+
goto L6
514+
L5:
515+
r8 = r2 << 1
516+
r7 = r8
517+
L6:
518+
r9 = CPyBytes_GetItem(r0, r7)
519+
r10 = box(int, r9)
520+
r11 = unbox(int, r10)
521+
x = r11
522+
r12 = f2(x)
523+
r13 = box(int, r12)
524+
CPySequenceTuple_SetItemUnsafe(r1, r2, r13)
525+
L7:
526+
r14 = r2 + 1
527+
r2 = r14
528+
goto L1
529+
L8:
530+
a = r1
531+
return 1
532+
431533
[case testTupleBuiltFromFinalBytes_64bit]
432534
from typing import Final
433535

0 commit comments

Comments
 (0)