blob: 6b3389394d93d68915ea5d9225a1d0e3e76f54bd [file] [log] [blame] [edit]
-- Test cases for nested vecs
[case testVecNestedCreateEmpty]
from librt.vecs import vec, append
from mypy_extensions import i64
def f() -> vec[vec[str]]:
return vec[vec[str]]()
def g() -> vec[vec[i64]]:
return vec[vec[i64]]()
[out]
def f():
r0 :: object
r1 :: ptr
r2 :: vec[vec[str]]
L0:
r0 = load_address PyUnicode_Type
r1 = r0
r2 = VecNestedApi.alloc(0, 0, r1, 1)
return r2
def g():
r0 :: vec[vec[i64]]
L0:
r0 = VecNestedApi.alloc(0, 0, 2, 1)
return r0
[case testVecNestedAppend]
from librt.vecs import vec, append
def f(v: vec[vec[str]], vv: vec[str]) -> vec[vec[str]]:
return append(v, vv)
[out]
def f(v, vv):
v :: vec[vec[str]]
vv :: vec[str]
r0 :: native_int
r1 :: object
r2, r3 :: VecNestedBufItem{len:native_int, buf:object_nrc}
r4 :: vec[vec[str]]
L0:
r0 = vv.len
r1 = vv.buf
r2 = set_element undef VecNestedBufItem, len, r0
r3 = set_element r2, buf, r1
r4 = VecNestedApi.append(v, r3)
keep_alive vv
return r4
[case testVecNestedVecI64Append]
from librt.vecs import vec, append
from mypy_extensions import i64
def f(v: vec[vec[i64]], vv: vec[i64]) -> vec[vec[i64]]:
return append(v, vv)
[out]
def f(v, vv):
v :: vec[vec[i64]]
vv :: vec[i64]
r0 :: native_int
r1 :: object
r2, r3 :: VecNestedBufItem{len:native_int, buf:object_nrc}
r4 :: vec[vec[i64]]
L0:
r0 = vv.len
r1 = vv.buf
r2 = set_element undef VecNestedBufItem, len, r0
r3 = set_element r2, buf, r1
r4 = VecNestedApi.append(v, r3)
keep_alive vv
return r4
[case testVecNestedLen_64bit]
from librt.vecs import vec
from mypy_extensions import i64
from typing import Optional
def f(v: vec[vec[str]]) -> i64:
return len(v)
def g(v: vec[vec[i64]]) -> i64:
return len(v)
[out]
def f(v):
v :: vec[vec[str]]
r0 :: native_int
L0:
r0 = v.len
return r0
def g(v):
v :: vec[vec[i64]]
r0 :: native_int
L0:
r0 = v.len
return r0
[case testVecNestedGetItem_64bit]
from librt.vecs import vec
from mypy_extensions import i64
def f(v: vec[vec[str]], n: i64) -> vec[str]:
return v[n]
[out]
def f(v, n):
v :: vec[vec[str]]
n :: i64
r0 :: native_int
r1 :: bit
r2 :: i64
r3 :: bit
r4 :: bool
r5 :: i64
r6 :: object
r7 :: ptr
r8 :: i64
r9 :: ptr
r10 :: vec[str]
L0:
r0 = v.len
r1 = n < r0 :: unsigned
if r1 goto L4 else goto L1 :: bool
L1:
r2 = n + r0
r3 = r2 < r0 :: unsigned
if r3 goto L3 else goto L2 :: bool
L2:
r4 = raise IndexError
unreachable
L3:
r5 = r2
goto L5
L4:
r5 = n
L5:
r6 = v.buf
r7 = get_element_ptr r6 items :: VecNestedBufObject
r8 = r5 * 16
r9 = r7 + r8
r10 = load_mem r9 :: vec[str]*
keep_alive v
return r10
[case testVecNestedI64GetItem_64bit]
from librt.vecs import vec
from mypy_extensions import i64
def f(v: vec[vec[i64]], n: i64) -> vec[i64]:
return v[n]
[out]
def f(v, n):
v :: vec[vec[i64]]
n :: i64
r0 :: native_int
r1 :: bit
r2 :: i64
r3 :: bit
r4 :: bool
r5 :: i64
r6 :: object
r7 :: ptr
r8 :: i64
r9 :: ptr
r10 :: vec[i64]
L0:
r0 = v.len
r1 = n < r0 :: unsigned
if r1 goto L4 else goto L1 :: bool
L1:
r2 = n + r0
r3 = r2 < r0 :: unsigned
if r3 goto L3 else goto L2 :: bool
L2:
r4 = raise IndexError
unreachable
L3:
r5 = r2
goto L5
L4:
r5 = n
L5:
r6 = v.buf
r7 = get_element_ptr r6 items :: VecNestedBufObject
r8 = r5 * 16
r9 = r7 + r8
r10 = load_mem r9 :: vec[i64]*
keep_alive v
return r10
[case testVecNestedI64GetItemWithBorrow_64bit]
from librt.vecs import vec
from mypy_extensions import i64
def f(v: vec[vec[i64]], n: i64) -> i64:
return v[n][n]
[out]
def f(v, n):
v :: vec[vec[i64]]
n :: i64
r0 :: native_int
r1 :: bit
r2 :: i64
r3 :: bit
r4 :: bool
r5 :: i64
r6 :: object
r7 :: ptr
r8 :: i64
r9 :: ptr
r10 :: vec[i64]
r11 :: native_int
r12 :: bit
r13 :: i64
r14 :: bit
r15 :: bool
r16 :: i64
r17 :: object
r18 :: ptr
r19 :: i64
r20 :: ptr
r21 :: i64
L0:
r0 = v.len
r1 = n < r0 :: unsigned
if r1 goto L4 else goto L1 :: bool
L1:
r2 = n + r0
r3 = r2 < r0 :: unsigned
if r3 goto L3 else goto L2 :: bool
L2:
r4 = raise IndexError
unreachable
L3:
r5 = r2
goto L5
L4:
r5 = n
L5:
r6 = v.buf
r7 = get_element_ptr r6 items :: VecNestedBufObject
r8 = r5 * 16
r9 = r7 + r8
r10 = borrow load_mem r9 :: vec[i64]*
r11 = r10.len
r12 = n < r11 :: unsigned
if r12 goto L9 else goto L6 :: bool
L6:
r13 = n + r11
r14 = r13 < r11 :: unsigned
if r14 goto L8 else goto L7 :: bool
L7:
r15 = raise IndexError
unreachable
L8:
r16 = r13
goto L10
L9:
r16 = n
L10:
r17 = r10.buf
r18 = get_element_ptr r17 items :: VecI64BufObject
r19 = r16 * 8
r20 = r18 + r19
r21 = load_mem r20 :: i64*
keep_alive v, r10
return r21
[case testVecDoublyNestedGetItem_64bit]
from librt.vecs import vec
from mypy_extensions import i64
def f(v: vec[vec[vec[str]]], n: i64) -> vec[vec[str]]:
return v[n]
[out]
def f(v, n):
v :: vec[vec[vec[str]]]
n :: i64
r0 :: native_int
r1 :: bit
r2 :: i64
r3 :: bit
r4 :: bool
r5 :: i64
r6 :: object
r7 :: ptr
r8 :: i64
r9 :: ptr
r10 :: vec[vec[str]]
L0:
r0 = v.len
r1 = n < r0 :: unsigned
if r1 goto L4 else goto L1 :: bool
L1:
r2 = n + r0
r3 = r2 < r0 :: unsigned
if r3 goto L3 else goto L2 :: bool
L2:
r4 = raise IndexError
unreachable
L3:
r5 = r2
goto L5
L4:
r5 = n
L5:
r6 = v.buf
r7 = get_element_ptr r6 items :: VecNestedBufObject
r8 = r5 * 16
r9 = r7 + r8
r10 = load_mem r9 :: vec[vec[str]]*
keep_alive v
return r10