blob: 63be7250ebd102d14a483bbfc79c62c378b5b5bf [file] [log] [blame]
[case testStrSplit]
from typing import Optional, List
def do_split(s: str, sep: Optional[str] = None, max_split: Optional[int] = None) -> List[str]:
if sep is not None:
if max_split is not None:
return s.split(sep, max_split)
else:
return s.split(sep)
return s.split()
[out]
def do_split(s, sep, max_split):
s :: str
sep :: union[str, None]
max_split :: union[int, None]
r0, r1, r2 :: object
r3 :: bit
r4 :: object
r5 :: bit
r6 :: str
r7 :: int
r8 :: list
r9 :: str
r10, r11 :: list
L0:
if is_error(sep) goto L1 else goto L2
L1:
r0 = box(None, 1)
sep = r0
L2:
if is_error(max_split) goto L3 else goto L4
L3:
r1 = box(None, 1)
max_split = r1
L4:
r2 = load_address _Py_NoneStruct
r3 = sep != r2
if r3 goto L5 else goto L9 :: bool
L5:
r4 = load_address _Py_NoneStruct
r5 = max_split != r4
if r5 goto L6 else goto L7 :: bool
L6:
r6 = cast(str, sep)
r7 = unbox(int, max_split)
r8 = CPyStr_Split(s, r6, r7)
return r8
L7:
r9 = cast(str, sep)
r10 = PyUnicode_Split(s, r9, -1)
return r10
L8:
L9:
r11 = PyUnicode_Split(s, 0, -1)
return r11
[case testStrEquality]
def eq(x: str, y: str) -> bool:
return x == y
def neq(x: str, y: str) -> bool:
return x != y
[out]
def eq(x, y):
x, y :: str
r0 :: int32
r1 :: bit
r2 :: object
r3, r4, r5 :: bit
L0:
r0 = PyUnicode_Compare(x, y)
r1 = r0 == -1
if r1 goto L1 else goto L3 :: bool
L1:
r2 = PyErr_Occurred()
r3 = r2 != 0
if r3 goto L2 else goto L3 :: bool
L2:
r4 = CPy_KeepPropagating()
L3:
r5 = r0 == 0
return r5
def neq(x, y):
x, y :: str
r0 :: int32
r1 :: bit
r2 :: object
r3, r4, r5 :: bit
L0:
r0 = PyUnicode_Compare(x, y)
r1 = r0 == -1
if r1 goto L1 else goto L3 :: bool
L1:
r2 = PyErr_Occurred()
r3 = r2 != 0
if r3 goto L2 else goto L3 :: bool
L2:
r4 = CPy_KeepPropagating()
L3:
r5 = r0 != 0
return r5
[case testStrReplace]
from typing import Optional
def do_replace(s: str, old_substr: str, new_substr: str, max_count: Optional[int] = None) -> str:
if max_count is not None:
return s.replace(old_substr, new_substr, max_count)
else:
return s.replace(old_substr, new_substr)
[out]
def do_replace(s, old_substr, new_substr, max_count):
s, old_substr, new_substr :: str
max_count :: union[int, None]
r0, r1 :: object
r2 :: bit
r3 :: int
r4, r5 :: str
L0:
if is_error(max_count) goto L1 else goto L2
L1:
r0 = box(None, 1)
max_count = r0
L2:
r1 = load_address _Py_NoneStruct
r2 = max_count != r1
if r2 goto L3 else goto L4 :: bool
L3:
r3 = unbox(int, max_count)
r4 = CPyStr_Replace(s, old_substr, new_substr, r3)
return r4
L4:
r5 = PyUnicode_Replace(s, old_substr, new_substr, -1)
return r5
L5:
unreachable
[case testStrToBool]
def is_true(x: str) -> bool:
if x:
return True
else:
return False
[out]
def is_true(x):
x :: str
r0 :: bit
L0:
r0 = CPyStr_IsTrue(x)
if r0 goto L1 else goto L2 :: bool
L1:
return 1
L2:
return 0
L3:
unreachable
[case testStringFormatMethod]
def f(s: str, num: int) -> None:
s1 = "Hi! I'm {}, and I'm {} years old.".format(s, num)
s2 = ''.format()
s3 = 'abc'.format()
s4 = '}}{}{{{}}}{{{}'.format(num, num, num)
[out]
def f(s, num):
s :: str
num :: int
r0, r1, r2, r3, r4, s1, r5, s2, r6, s3, r7, r8, r9, r10, r11, r12, r13, s4 :: str
L0:
r0 = CPyTagged_Str(num)
r1 = "Hi! I'm "
r2 = ", and I'm "
r3 = ' years old.'
r4 = CPyStr_Build(5, r1, s, r2, r0, r3)
s1 = r4
r5 = ''
s2 = r5
r6 = 'abc'
s3 = r6
r7 = CPyTagged_Str(num)
r8 = CPyTagged_Str(num)
r9 = CPyTagged_Str(num)
r10 = '}'
r11 = '{'
r12 = '}{'
r13 = CPyStr_Build(6, r10, r7, r11, r8, r12, r9)
s4 = r13
return 1
[case testFStrings]
def f(var: str, num: int) -> None:
s1 = f"Hi! I'm {var}. I am {num} years old."
s2 = f'Hello {var:>{num}}'
s3 = f''
s4 = f'abc'
[out]
def f(var, num):
var :: str
num :: int
r0, r1, r2, r3, r4, s1, r5, r6, r7, r8, r9, r10, r11 :: str
r12 :: object
r13 :: str
r14 :: list
r15, r16, r17 :: ptr
r18, s2, r19, s3, r20, s4 :: str
L0:
r0 = "Hi! I'm "
r1 = '. I am '
r2 = CPyTagged_Str(num)
r3 = ' years old.'
r4 = CPyStr_Build(5, r0, var, r1, r2, r3)
s1 = r4
r5 = ''
r6 = 'Hello '
r7 = '{:{}}'
r8 = '>'
r9 = CPyTagged_Str(num)
r10 = CPyStr_Build(2, r8, r9)
r11 = 'format'
r12 = CPyObject_CallMethodObjArgs(r7, r11, var, r10, 0)
r13 = cast(str, r12)
r14 = PyList_New(2)
r15 = get_element_ptr r14 ob_item :: PyListObject
r16 = load_mem r15 :: ptr*
set_mem r16, r6 :: builtins.object*
r17 = r16 + WORD_SIZE*1
set_mem r17, r13 :: builtins.object*
keep_alive r14
r18 = PyUnicode_Join(r5, r14)
s2 = r18
r19 = ''
s3 = r19
r20 = 'abc'
s4 = r20
return 1
[case testStringFormattingCStyle]
def f(var: str, num: int) -> None:
s1 = "Hi! I'm %s." % var
s2 = "I am %d years old." % num
s3 = "Hi! I'm %s. I am %d years old." % (var, num)
s4 = "Float: %f" % num
[typing fixtures/typing-full.pyi]
[out]
def f(var, num):
var :: str
num :: int
r0, r1, r2, s1, r3, r4, r5, r6, s2, r7, r8, r9, r10, r11, s3, r12 :: str
r13, r14 :: object
r15, s4 :: str
L0:
r0 = "Hi! I'm "
r1 = '.'
r2 = CPyStr_Build(3, r0, var, r1)
s1 = r2
r3 = CPyTagged_Str(num)
r4 = 'I am '
r5 = ' years old.'
r6 = CPyStr_Build(3, r4, r3, r5)
s2 = r6
r7 = CPyTagged_Str(num)
r8 = "Hi! I'm "
r9 = '. I am '
r10 = ' years old.'
r11 = CPyStr_Build(5, r8, var, r9, r7, r10)
s3 = r11
r12 = 'Float: %f'
r13 = box(int, num)
r14 = PyNumber_Remainder(r12, r13)
r15 = cast(str, r14)
s4 = r15
return 1
[case testDecode]
def f(b: bytes) -> None:
b.decode()
b.decode('utf-8')
b.decode('utf-8', 'backslashreplace')
[out]
def f(b):
b :: bytes
r0, r1, r2, r3, r4, r5 :: str
L0:
r0 = CPy_Decode(b, 0, 0)
r1 = 'utf-8'
r2 = CPy_Decode(b, r1, 0)
r3 = 'utf-8'
r4 = 'backslashreplace'
r5 = CPy_Decode(b, r3, r4)
return 1
[case testEncode]
def f(s: str) -> None:
s.encode()
s.encode('utf-8')
s.encode('ascii', 'backslashreplace')
[out]
def f(s):
s :: str
r0 :: bytes
r1 :: str
r2 :: bytes
r3, r4 :: str
r5 :: bytes
L0:
r0 = CPy_Encode(s, 0, 0)
r1 = 'utf-8'
r2 = CPy_Encode(s, r1, 0)
r3 = 'ascii'
r4 = 'backslashreplace'
r5 = CPy_Encode(s, r3, r4)
return 1