Skip to content

Commit 71cda45

Browse files
committed
feat(test): test final and list
1 parent 589497b commit 71cda45

File tree

2 files changed

+454
-0
lines changed

2 files changed

+454
-0
lines changed

mypyc/test-data/irbuild-lists.test

Lines changed: 229 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,3 +572,232 @@ def sort_iterable(a):
572572
L0:
573573
r0 = CPySequence_Sort(a)
574574
return 1
575+
576+
[case testListBuiltFromStr]
577+
def f2(val: str) -> str:
578+
return val + "f2"
579+
580+
def test() -> None:
581+
source = "abc"
582+
a = [f2(x) for x in source]
583+
[out]
584+
def f2(val):
585+
val, r0, r1 :: str
586+
L0:
587+
r0 = 'f2'
588+
r1 = PyUnicode_Concat(val, r0)
589+
return r1
590+
def test():
591+
r0, source :: str
592+
r1 :: native_int
593+
r2 :: bit
594+
r3 :: list
595+
r4 :: native_int
596+
r5 :: bit
597+
r6, x, r7 :: str
598+
r8 :: native_int
599+
a :: list
600+
L0:
601+
r0 = 'abc'
602+
source = r0
603+
r1 = CPyStr_Size_size_t(source)
604+
r2 = r1 >= 0 :: signed
605+
r3 = PyList_New(r1)
606+
r4 = 0
607+
L1:
608+
r5 = r4 < r1 :: signed
609+
if r5 goto L2 else goto L4 :: bool
610+
L2:
611+
r6 = CPyStr_GetItemUnsafe(source, r4)
612+
x = r6
613+
r7 = f2(x)
614+
CPyList_SetItemUnsafe(r3, r4, r7)
615+
L3:
616+
r8 = r4 + 1
617+
r4 = r8
618+
goto L1
619+
L4:
620+
a = r3
621+
return 1
622+
623+
[case testListBuiltFromFinalStr]
624+
from typing import Final
625+
626+
source: Final = "abc"
627+
628+
def f2(val: str) -> str:
629+
return val + "f2"
630+
631+
def test() -> None:
632+
a = [f2(x) for x in source]
633+
[out]
634+
def f2(val):
635+
val, r0, r1 :: str
636+
L0:
637+
r0 = 'f2'
638+
r1 = PyUnicode_Concat(val, r0)
639+
return r1
640+
def test():
641+
r0 :: str
642+
r1 :: list
643+
r2 :: native_int
644+
r3 :: bit
645+
r4, x, r5 :: str
646+
r6 :: native_int
647+
a :: list
648+
L0:
649+
r0 = 'abc'
650+
r1 = PyList_New(3)
651+
r2 = 0
652+
L1:
653+
r3 = r2 < 3 :: signed
654+
if r3 goto L2 else goto L4 :: bool
655+
L2:
656+
r4 = CPyStr_GetItemUnsafe(r0, r2)
657+
x = r4
658+
r5 = f2(x)
659+
CPyList_SetItemUnsafe(r1, r2, r5)
660+
L3:
661+
r6 = r2 + 1
662+
r2 = r6
663+
goto L1
664+
L4:
665+
a = r1
666+
return 1
667+
668+
[case testListBuiltFromBytes_64bit]
669+
def f2(val: int) -> int:
670+
return val + 2
671+
672+
def test() -> None:
673+
source = b"abc"
674+
a = [f2(x) for x in source]
675+
676+
[out]
677+
def f2(val):
678+
val, r0 :: int
679+
L0:
680+
r0 = CPyTagged_Add(val, 4)
681+
return r0
682+
def test():
683+
r0, source :: bytes
684+
r1 :: native_int
685+
r2 :: list
686+
r3 :: native_int
687+
r4, r5, r6 :: bit
688+
r7, r8, r9, r10 :: int
689+
r11 :: object
690+
r12, x, r13 :: int
691+
r14 :: object
692+
r15 :: native_int
693+
a :: list
694+
L0:
695+
r0 = b'abc'
696+
source = r0
697+
r1 = var_object_size source
698+
r2 = PyList_New(r1)
699+
r3 = 0
700+
L1:
701+
r4 = r3 < r1 :: signed
702+
if r4 goto L2 else goto L8 :: bool
703+
L2:
704+
r5 = r3 <= 4611686018427387903 :: signed
705+
if r5 goto L3 else goto L4 :: bool
706+
L3:
707+
r6 = r3 >= -4611686018427387904 :: signed
708+
if r6 goto L5 else goto L4 :: bool
709+
L4:
710+
r7 = CPyTagged_FromInt64(r3)
711+
r8 = r7
712+
goto L6
713+
L5:
714+
r9 = r3 << 1
715+
r8 = r9
716+
L6:
717+
r10 = CPyBytes_GetItem(source, r8)
718+
r11 = box(int, r10)
719+
r12 = unbox(int, r11)
720+
x = r12
721+
r13 = f2(x)
722+
r14 = box(int, r13)
723+
CPyList_SetItemUnsafe(r2, r3, r14)
724+
L7:
725+
r15 = r3 + 1
726+
r3 = r15
727+
goto L1
728+
L8:
729+
a = r2
730+
return 1
731+
732+
[case testListBuiltFromFinalBytes_64bit]
733+
from typing import Final
734+
735+
source: Final = b"abc"
736+
737+
def f2(val: int) -> int:
738+
return val + 2
739+
740+
def test() -> None:
741+
a = [f2(x) for x in source]
742+
743+
[out]
744+
def f2(val):
745+
val, r0 :: int
746+
L0:
747+
r0 = CPyTagged_Add(val, 4)
748+
return r0
749+
def test():
750+
r0 :: bytes
751+
r1 :: bool
752+
r2 :: native_int
753+
r3 :: list
754+
r4 :: native_int
755+
r5, r6, r7 :: bit
756+
r8, r9, r10, r11 :: int
757+
r12 :: object
758+
r13, x, r14 :: int
759+
r15 :: object
760+
r16 :: native_int
761+
a :: list
762+
L0:
763+
r0 = __main__.source :: static
764+
if is_error(r0) goto L1 else goto L2
765+
L1:
766+
r1 = raise NameError('value for final name "source" was not set')
767+
unreachable
768+
L2:
769+
r2 = var_object_size r0
770+
r3 = PyList_New(r2)
771+
r4 = 0
772+
L3:
773+
r5 = r4 < r2 :: signed
774+
if r5 goto L4 else goto L10 :: bool
775+
L4:
776+
r6 = r4 <= 4611686018427387903 :: signed
777+
if r6 goto L5 else goto L6 :: bool
778+
L5:
779+
r7 = r4 >= -4611686018427387904 :: signed
780+
if r7 goto L7 else goto L6 :: bool
781+
L6:
782+
r8 = CPyTagged_FromInt64(r4)
783+
r9 = r8
784+
goto L8
785+
L7:
786+
r10 = r4 << 1
787+
r9 = r10
788+
L8:
789+
r11 = CPyBytes_GetItem(r0, r9)
790+
r12 = box(int, r11)
791+
r13 = unbox(int, r12)
792+
x = r13
793+
r14 = f2(x)
794+
r15 = box(int, r14)
795+
CPyList_SetItemUnsafe(r3, r4, r15)
796+
L9:
797+
r16 = r4 + 1
798+
r4 = r16
799+
goto L3
800+
L10:
801+
a = r3
802+
return 1
803+

0 commit comments

Comments
 (0)