Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add more tests
  • Loading branch information
JukkaL committed Apr 23, 2026
commit 3a1767d4b15840a0ba69676059c547d56c0cdb84
82 changes: 82 additions & 0 deletions mypyc/test-data/run-vecs-i64-interp.test
Original file line number Diff line number Diff line change
Expand Up @@ -417,3 +417,85 @@ def test_pop_index() -> None:
v, n = pop(v, 0)
assert n == 15
assert v == vec[i64]()

def test_cap_empty() -> None:
v = vec[i64](cap=3)
assert len(v) == 0
assert v == vec[i64]()

def test_cap_with_initializer() -> None:
v = vec[i64]([10, 20], cap=3)
assert len(v) == 2
assert v[0] == 10
assert v[1] == 20
assert v == vec[i64]([10, 20])

def test_cap_zero() -> None:
v = vec[i64](cap=0)
assert len(v) == 0
v = vec[i64]([5], cap=0)
assert v == vec[i64]([5])

def test_cap_negative() -> None:
with assertRaises(ValueError):
vec[i64](cap=-1)
with assertRaises(ValueError):
vec[i64]([1], cap=-1)

def test_cap_buffer_reuse_empty() -> None:
# cap=3, append 3 items -> all fit, buffer reused (no reallocation)
v = vec[i64](cap=3)
old = v
v = append(v, 1)
v = append(v, 2)
v = append(v, 3)
assert len(v) == 3
# old shares the buffer so old's append overwrites v[0]
old = append(old, 99)
assert v[0] == 99

def test_cap_buffer_reuse_with_initializer() -> None:
# 2 items with cap=3 -> one more append fits without reallocation
v = vec[i64]([10, 20], cap=3)
old = v
v = append(v, 30)
assert len(v) == 3
# Shared buffer: mutation through v visible through old
v[0] = 99
assert old[0] == 99

def test_cap_buffer_reuse_at_capacity() -> None:
# cap=2, fill with 2 items -> at capacity, next append must reallocate
v = vec[i64]([10, 20], cap=2)
old = v
v = append(v, 30)
# v now has a new buffer; appending to old should NOT affect v
old = append(old, 99)
assert v[0] == 10

def test_cap_read_old_after_realloc() -> None:
# After reallocation, old alias must still have valid items
v = vec[i64]([10, 20, 30], cap=3)
old = v
v = append(v, 40)
v[0] = 99
assert old[0] == 10
assert old[1] == 20
assert old[2] == 30

def test_cap_exceeded() -> None:
# cap=2, fill to capacity, then one more append triggers reallocation
v = vec[i64](cap=2)
v = append(v, 10)
v = append(v, 20)
old = v
v = append(v, 30)
old = append(old, 99)
assert v[0] == 10

def test_cap_initializer_longer_than_cap() -> None:
v = vec[i64]([10, 20, 30], cap=1)
assert len(v) == 3
assert v[0] == 10
assert v[1] == 20
assert v[2] == 30
52 changes: 52 additions & 0 deletions mypyc/test-data/run-vecs-misc-interp.test
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,58 @@ def test_iterator_protocol() -> None:
with assertRaises(StopIteration):
next(it)

def test_cap_empty() -> None:
for t in ITEM_TYPES:
v = vec[t](cap=3)
assert len(v) == 0
assert v == vec[t]()

def test_cap_with_initializer() -> None:
v = vec[float]([1.5, 2.5], cap=3)
assert len(v) == 2
assert v[0] == 1.5
assert v[1] == 2.5

v = vec[u8]([10, 20], cap=3)
assert len(v) == 2
assert v[0] == 10

v = vec[i16]([-100, 100], cap=3)
assert len(v) == 2

v = vec[i32]([1000, 2000], cap=3)
assert len(v) == 2

v = vec[bool]([True, False], cap=3)
assert len(v) == 2
assert v[0] is True
assert v[1] is False

def test_cap_negative() -> None:
for t in ITEM_TYPES:
with assertRaises(ValueError):
vec[t](cap=-1)

def test_cap_buffer_reuse() -> None:
# Verify buffer reuse within cap for each type
v = vec[float]([1.5], cap=3)
old = v
v = append(v, 2.5)
v[0] = 9.5
assert old[0] == 9.5 # shared buffer

v = vec[u8]([10], cap=3)
old = v
v = append(v, 20)
v[0] = 99
assert old[0] == 99

v = vec[bool]([True], cap=3)
old = v
v = append(v, False)
v[0] = False
assert old[0] is False

[case testLibrtVecsFeaturesNotAvailableInNonExperimentalBuild_librt]
# This also ensures librt.vecs can be built without experimental features
import librt.vecs
Expand Down
90 changes: 90 additions & 0 deletions mypyc/test-data/run-vecs-nested-interp.test
Original file line number Diff line number Diff line change
Expand Up @@ -467,3 +467,93 @@ def test_append_with_alias() -> None:
assert len(alias) == 1
assert v[0] == vec[i64]([1, 2, 3])
assert len(v) == 4

def test_cap_empty() -> None:
v = vec[vec[str]](cap=3)
assert len(v) == 0
assert v == vec[vec[str]]()

def test_cap_with_initializer() -> None:
v = vec[vec[str]]([vec[str](['a']), vec[str](['b'])], cap=3)
assert len(v) == 2
assert v[0] == vec[str](['a'])
assert v[1] == vec[str](['b'])

def test_cap_zero() -> None:
v = vec[vec[str]](cap=0)
assert len(v) == 0
v = vec[vec[str]]([vec[str](['x'])], cap=0)
assert v == vec[vec[str]]([vec[str](['x'])])

def test_cap_negative() -> None:
with assertRaises(ValueError):
vec[vec[str]](cap=-1)
with assertRaises(ValueError):
vec[vec[str]]([vec[str]()], cap=-1)

def test_cap_buffer_reuse_empty() -> None:
# cap=3, append 3 items -> all fit, buffer reused (no reallocation)
v = vec[vec[str]](cap=3)
old = v
v = append(v, vec[str](['a']))
v = append(v, vec[str](['b']))
v = append(v, vec[str](['c']))
assert len(v) == 3
# old shares the buffer so old's append overwrites v[0]
old = append(old, vec[str](['Q']))
assert v[0] == vec[str](['Q'])

def test_cap_buffer_reuse_with_initializer() -> None:
# 2 items with cap=3 -> one more append fits without reallocation
v = vec[vec[str]]([vec[str](['a']), vec[str](['b'])], cap=3)
old = v
v = append(v, vec[str](['c']))
assert len(v) == 3
# Shared buffer: mutation through v visible through old
v[0] = vec[str](['z'])
assert old[0] == vec[str](['z'])

def test_cap_buffer_reuse_at_capacity() -> None:
# cap=2, fill with 2 items -> at capacity, next append must reallocate
v = vec[vec[str]]([vec[str](['a']), vec[str](['b'])], cap=2)
old = v
v = append(v, vec[str](['c']))
# v now has a new buffer; appending to old should NOT affect v
old = append(old, vec[str](['Q']))
assert v[0] == vec[str](['a'])

def test_cap_read_old_after_realloc() -> None:
# After reallocation, old alias must still have valid items (not NULL)
v = vec[vec[str]]([vec[str](['a']), vec[str](['b']), vec[str](['c'])], cap=3)
old = v
v = append(v, vec[str](['d']))
v[0] = vec[str](['z'])
assert old[0] == vec[str](['a'])
assert old[1] == vec[str](['b'])
assert old[2] == vec[str](['c'])

def test_cap_exceeded() -> None:
# cap=2, fill to capacity, then one more append triggers reallocation
v = vec[vec[str]](cap=2)
v = append(v, vec[str](['a']))
v = append(v, vec[str](['b']))
old = v
v = append(v, vec[str](['c']))
old = append(old, vec[str](['Q']))
assert v[0] == vec[str](['a'])

def test_cap_initializer_longer_than_cap() -> None:
v = vec[vec[str]]([vec[str](['a']), vec[str](['b']), vec[str](['c'])], cap=1)
assert len(v) == 3
assert v[0] == vec[str](['a'])
assert v[1] == vec[str](['b'])
assert v[2] == vec[str](['c'])

def test_cap_nested_i64() -> None:
v = vec[vec[i64]](cap=3)
assert len(v) == 0
v = append(v, vec[i64]([1, 2]))
v = append(v, vec[i64]([3]))
assert len(v) == 2
assert v[0] == vec[i64]([1, 2])
assert v[1] == vec[i64]([3])