| -- 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 |