[case testBytesBasics]
def f(num: int, l: list, d: dict, s: str) -> None:
    b1 = bytes()
    b2 = bytes(num)
    b3 = bytes(l)
    b4 = bytes(d)
    b5 = bytes(s)
[out]
def f(num, l, d, s):
    num :: int
    l :: list
    d :: dict
    s :: str
    r0, r1 :: object
    r2, b1 :: bytes
    r3, r4, r5 :: object
    r6, b2, r7, b3, r8, b4, r9, b5 :: bytes
L0:
    r0 = load_address PyBytes_Type
    r1 = PyObject_CallFunctionObjArgs(r0, 0)
    r2 = cast(bytes, r1)
    b1 = r2
    r3 = load_address PyBytes_Type
    r4 = box(int, num)
    r5 = PyObject_CallFunctionObjArgs(r3, r4, 0)
    r6 = cast(bytes, r5)
    b2 = r6
    r7 = PyBytes_FromObject(l)
    b3 = r7
    r8 = PyBytes_FromObject(d)
    b4 = r8
    r9 = PyBytes_FromObject(s)
    b5 = r9
    return 1

[case testBytearrayBasics]
def f(s: str, num: int) -> None:
    a = bytearray()
    b = bytearray(s)
    c = bytearray(num)
[out]
def f(s, num):
    s :: str
    num :: int
    r0 :: object
    r1 :: str
    r2, r3, a :: object
    r4 :: bytes
    b, r5 :: object
    r6 :: bytes
    c :: object
L0:
    r0 = builtins :: module
    r1 = 'bytearray'
    r2 = CPyObject_GetAttr(r0, r1)
    r3 = PyObject_CallFunctionObjArgs(r2, 0)
    a = r3
    r4 = PyByteArray_FromObject(s)
    b = r4
    r5 = box(int, num)
    r6 = PyByteArray_FromObject(r5)
    c = r6
    return 1

[case testBytesEquality]
def eq(x: bytes, y: bytes) -> bool:
    return x == y

def neq(x: bytes, y: bytes) -> bool:
    return x != y
[out]
def eq(x, y):
    x, y :: bytes
    r0 :: int32
    r1, r2 :: bit
L0:
    r0 = CPyBytes_Compare(x, y)
    r1 = r0 >= 0 :: signed
    r2 = r0 == 1
    return r2
def neq(x, y):
    x, y :: bytes
    r0 :: int32
    r1, r2 :: bit
L0:
    r0 = CPyBytes_Compare(x, y)
    r1 = r0 >= 0 :: signed
    r2 = r0 != 1
    return r2

[case testBytesSlicing]
def f(a: bytes, start: int, end: int) -> bytes:
    return a[start:end]
[out]
def f(a, start, end):
    a :: bytes
    start, end :: int
    r0 :: bytes
L0:
    r0 = CPyBytes_GetSlice(a, start, end)
    return r0

[case testBytesIndex]
def f(a: bytes, i: int) -> int:
    return a[i]
[out]
def f(a, i):
    a :: bytes
    i, r0 :: int
L0:
    r0 = CPyBytes_GetItem(a, i)
    return r0

[case testBytesConcat]
def f(a: bytes, b: bytes) -> bytes:
    return a + b
[out]
def f(a, b):
    a, b, r0 :: bytes
L0:
    r0 = CPyBytes_Concat(a, b)
    return r0

[case testBytesJoin]
from typing import List
def f(b: List[bytes]) -> bytes:
    return b" ".join(b)
[out]
def f(b):
    b :: list
    r0, r1 :: bytes
L0:
    r0 = b' '
    r1 = CPyBytes_Join(r0, b)
    return r1

[case testBytesLen]
def f(b: bytes) -> int:
    return len(b)
[out]
def f(b):
    b :: bytes
    r0 :: ptr
    r1 :: native_int
    r2 :: short_int
L0:
    r0 = get_element_ptr b ob_size :: PyVarObject
    r1 = load_mem r0 :: native_int*
    keep_alive b
    r2 = r1 << 1
    return r2

[case testBytesFormatting]
def f(var: bytes, num: int) -> None:
    b1 = b'aaaa%bbbbb%s' % (var, var)
    b2 = b'aaaa%bbbbb%s%d' % (var, var, num)
    b3 = b'%b' % var
    b4 = b'%ssss' % var
[typing fixtures/typing-full.pyi]
[out]
def f(var, num):
    var :: bytes
    num :: int
    r0, r1, r2, b1, r3 :: bytes
    r4 :: tuple[bytes, bytes, int]
    r5, r6 :: object
    r7, b2, r8, b3, r9, r10, b4 :: bytes
L0:
    r0 = b'aaaa'
    r1 = b'bbbb'
    r2 = CPyBytes_Build(4, r0, var, r1, var)
    b1 = r2
    r3 = b'aaaa%bbbbb%s%d'
    r4 = (var, var, num)
    r5 = box(tuple[bytes, bytes, int], r4)
    r6 = PyNumber_Remainder(r3, r5)
    r7 = cast(bytes, r6)
    b2 = r7
    r8 = CPyBytes_Build(1, var)
    b3 = r8
    r9 = b'sss'
    r10 = CPyBytes_Build(2, var, r9)
    b4 = r10
    return 1
