memoryview¶
memoryview() - Create memory views.¶
Memoryview indexing and slicing.¶
Memoryview conversion methods.¶
Memoryview casting to different formats.¶
Memoryview comparison operations.¶
Memoryview release and context manager.¶
Memoryview iteration and membership.¶
Advanced slicing operations.¶
Different format types.¶
Edge cases and special scenarios.¶
Basic: Create from bytes.¶
def test_create_from_bytes(self):
"""Basic: Create from bytes."""
data = b'hello'
mv = memoryview(data)
assert len(mv) == 5
assert mv[0] == ord('h')
Verification: ✅ Tested in CI
Basic: Create from bytearray.¶
def test_create_from_bytearray(self):
"""Basic: Create from bytearray."""
data = bytearray(b'world')
mv = memoryview(data)
assert len(mv) == 5
assert mv[0] == ord('w')
Verification: ✅ Tested in CI
Basic: Create from array.array.¶
def test_create_from_array(self):
"""Basic: Create from array.array."""
data = array.array('i', [1, 2, 3])
mv = memoryview(data)
assert len(mv) == 3
Verification: ✅ Tested in CI
Property: bytes creates read-only view.¶
def test_readonly_from_bytes(self):
"""Property: bytes creates read-only view."""
data = b'test'
mv = memoryview(data)
assert mv.readonly is True
Verification: ✅ Tested in CI
Property: bytearray creates writable view.¶
def test_writable_from_bytearray(self):
"""Property: bytearray creates writable view."""
data = bytearray(b'test')
mv = memoryview(data)
assert mv.readonly is False
Verification: ✅ Tested in CI
Property: obj references underlying object.¶
def test_obj_attribute(self):
"""Property: obj references underlying object."""
data = b'test'
mv = memoryview(data)
assert mv.obj is data
Verification: ✅ Tested in CI
Property: format describes item format.¶
def test_format_attribute(self):
"""Property: format describes item format."""
data = bytearray(b'test')
mv = memoryview(data)
assert mv.format == 'B'
Verification: ✅ Tested in CI
Property: itemsize is bytes per item.¶
def test_itemsize_attribute(self):
"""Property: itemsize is bytes per item."""
data = bytearray(b'test')
mv = memoryview(data)
assert mv.itemsize == 1
Verification: ✅ Tested in CI
Property: ndim is number of dimensions.¶
def test_ndim_attribute(self):
"""Property: ndim is number of dimensions."""
data = bytearray(b'test')
mv = memoryview(data)
assert mv.ndim == 1
Verification: ✅ Tested in CI
Property: shape is tuple of dimensions.¶
def test_shape_attribute(self):
"""Property: shape is tuple of dimensions."""
data = bytearray(b'test')
mv = memoryview(data)
assert mv.shape == (4,)
Verification: ✅ Tested in CI
Property: strides is byte steps.¶
def test_strides_attribute(self):
"""Property: strides is byte steps."""
data = bytearray(b'test')
mv = memoryview(data)
assert mv.strides == (1,)
Verification: ✅ Tested in CI
Error: Non-buffer object raises TypeError.¶
def test_error_non_buffer_object(self):
"""Error: Non-buffer object raises TypeError."""
with pytest.raises(TypeError):
memoryview('string')
Verification: ✅ Tested in CI
Error: List raises TypeError.¶
def test_error_non_buffer_list(self):
"""Error: List raises TypeError."""
with pytest.raises(TypeError):
memoryview([1, 2, 3])
Verification: ✅ Tested in CI
Basic: Index access.¶
def test_index_access(self):
"""Basic: Index access."""
data = bytearray(b'hello')
mv = memoryview(data)
assert mv[0] == ord('h')
assert mv[4] == ord('o')
Verification: ✅ Tested in CI
Feature: Negative indexing.¶
def test_negative_index(self):
"""Feature: Negative indexing."""
data = bytearray(b'hello')
mv = memoryview(data)
assert mv[-1] == ord('o')
assert mv[-5] == ord('h')
Verification: ✅ Tested in CI
Feature: Slice access.¶
def test_slice_access(self):
"""Feature: Slice access."""
data = bytearray(b'hello')
mv = memoryview(data)
sliced = mv[1:4]
assert len(sliced) == 3
assert bytes(sliced) == b'ell'
Verification: ✅ Tested in CI
Property: Slice returns memoryview.¶
def test_slice_returns_memoryview(self):
"""Property: Slice returns memoryview."""
data = bytearray(b'test')
mv = memoryview(data)
sliced = mv[1:3]
assert isinstance(sliced, memoryview)
Verification: ✅ Tested in CI
Feature: Modify writable memoryview.¶
def test_modify_writable_view(self):
"""Feature: Modify writable memoryview."""
data = bytearray(b'hello')
mv = memoryview(data)
mv[0] = ord('H')
assert data[0] == ord('H')
assert data == b'Hello'
Verification: ✅ Tested in CI
Error: Cannot modify read-only view.¶
def test_error_modify_readonly(self):
"""Error: Cannot modify read-only view."""
data = b'hello'
mv = memoryview(data)
with pytest.raises(TypeError):
mv[0] = ord('H')
Verification: ✅ Tested in CI
Error: Index out of range.¶
def test_error_index_out_of_range(self):
"""Error: Index out of range."""
data = bytearray(b'test')
mv = memoryview(data)
with pytest.raises(IndexError):
_ = mv[10]
Verification: ✅ Tested in CI
Basic: Convert to bytes.¶
def test_tobytes(self):
"""Basic: Convert to bytes."""
data = bytearray(b'hello')
mv = memoryview(data)
b = mv.tobytes()
assert isinstance(b, bytes)
assert b == b'hello'
Verification: ✅ Tested in CI
Basic: Convert to list.¶
def test_tolist(self):
"""Basic: Convert to list."""
data = bytearray(b'abc')
mv = memoryview(data)
lst = mv.tolist()
assert isinstance(lst, list)
assert lst == [ord('a'), ord('b'), ord('c')]
Verification: ✅ Tested in CI
Feature: Convert to hex string.¶
def test_hex(self):
"""Feature: Convert to hex string."""
data = bytearray(b'\x00\xff\xaa')
mv = memoryview(data)
h = mv.hex()
assert h == '00ffaa'
Verification: ✅ Tested in CI
Property: tobytes preserves data.¶
def test_tobytes_preserves_data(self):
"""Property: tobytes preserves data."""
original = bytearray(range(256))
mv = memoryview(original)
b = mv.tobytes()
assert b == bytes(original)
Verification: ✅ Tested in CI
Feature: tolist with array.¶
def test_tolist_array(self):
"""Feature: tolist with array."""
data = array.array('i', [1, 2, 3, 4])
mv = memoryview(data)
lst = mv.tolist()
assert lst == [1, 2, 3, 4]
Verification: ✅ Tested in CI
Feature: Cast byte view to integers.¶
def test_cast_bytes_to_int(self):
"""Feature: Cast byte view to integers."""
data = bytearray(b'\x01\x00\x00\x00\x02\x00\x00\x00')
mv = memoryview(data)
int_view = mv.cast('i')
assert len(int_view) == 2
assert int_view[0] == 1
assert int_view[1] == 2
Verification: ✅ Tested in CI
Feature: Cast int array to bytes.¶
def test_cast_int_to_bytes(self):
"""Feature: Cast int array to bytes."""
data = array.array('i', [1, 2, 3])
mv = memoryview(data)
byte_view = mv.cast('B')
assert len(byte_view) == 12
Verification: ✅ Tested in CI
Property: Cast changes itemsize.¶
def test_cast_changes_itemsize(self):
"""Property: Cast changes itemsize."""
data = bytearray(8)
mv = memoryview(data)
assert mv.itemsize == 1
int_view = mv.cast('i')
assert int_view.itemsize == 4
Verification: ✅ Tested in CI
Property: Cast changes shape.¶
def test_cast_changes_shape(self):
"""Property: Cast changes shape."""
data = bytearray(8)
mv = memoryview(data)
assert mv.shape == (8,)
int_view = mv.cast('i')
assert int_view.shape == (2,)
Verification: ✅ Tested in CI
Error: Cast with incompatible size.¶
def test_error_cast_size_mismatch(self):
"""Error: Cast with incompatible size."""
data = bytearray(5)
mv = memoryview(data)
with pytest.raises(TypeError):
mv.cast('i')
Verification: ✅ Tested in CI
Basic: Memoryview equality.¶
def test_equality(self):
"""Basic: Memoryview equality."""
data1 = bytearray(b'test')
data2 = bytearray(b'test')
mv1 = memoryview(data1)
mv2 = memoryview(data2)
assert mv1 == mv2
Verification: ✅ Tested in CI
Basic: Memoryview inequality.¶
def test_inequality(self):
"""Basic: Memoryview inequality."""
data1 = bytearray(b'test')
data2 = bytearray(b'best')
mv1 = memoryview(data1)
mv2 = memoryview(data2)
assert mv1 != mv2
Verification: ✅ Tested in CI
Feature: Compare with bytes.¶
def test_compare_with_bytes(self):
"""Feature: Compare with bytes."""
data = bytearray(b'test')
mv = memoryview(data)
assert mv == b'test'
Verification: ✅ Tested in CI
Feature: Compare with bytearray.¶
def test_compare_with_bytearray(self):
"""Feature: Compare with bytearray."""
data = b'test'
mv = memoryview(data)
assert mv == bytearray(b'test')
Verification: ✅ Tested in CI
Feature: Release memoryview.¶
def test_release_method(self):
"""Feature: Release memoryview."""
data = bytearray(b'test')
mv = memoryview(data)
mv.release()
with pytest.raises(ValueError):
_ = mv[0]
Verification: ✅ Tested in CI
Feature: Use as context manager.¶
def test_context_manager(self):
"""Feature: Use as context manager."""
data = bytearray(b'test')
with memoryview(data) as mv:
assert mv[0] == ord('t')
with pytest.raises(ValueError):
_ = mv[0]
Verification: ✅ Tested in CI
Edge: Double release is safe.¶
def test_double_release(self):
"""Edge: Double release is safe."""
data = bytearray(b'test')
mv = memoryview(data)
mv.release()
mv.release()
Verification: ✅ Tested in CI
Edge: Released views cannot be accessed.¶
def test_released_equality_check(self):
"""Edge: Released views cannot be accessed."""
data1 = bytearray(b'test')
mv1 = memoryview(data1)
mv1.release()
with pytest.raises(ValueError):
_ = len(mv1)
Verification: ✅ Tested in CI
Basic: Iterate over memoryview.¶
def test_iteration(self):
"""Basic: Iterate over memoryview."""
data = bytearray(b'abc')
mv = memoryview(data)
result = list(mv)
assert result == [ord('a'), ord('b'), ord('c')]
Verification: ✅ Tested in CI
Feature: Iterate over int array view.¶
def test_iteration_int_array(self):
"""Feature: Iterate over int array view."""
data = array.array('i', [10, 20, 30])
mv = memoryview(data)
result = list(mv)
assert result == [10, 20, 30]
Verification: ✅ Tested in CI
Feature: Membership test.¶
def test_membership(self):
"""Feature: Membership test."""
data = bytearray(b'hello')
mv = memoryview(data)
assert ord('h') in mv
assert ord('z') not in mv
Verification: ✅ Tested in CI
Basic: Length function.¶
def test_len(self):
"""Basic: Length function."""
data = bytearray(b'hello')
mv = memoryview(data)
assert len(mv) == 5
Verification: ✅ Tested in CI
Feature: Slice with step.¶
def test_slice_with_step(self):
"""Feature: Slice with step."""
data = bytearray(b'abcdefgh')
mv = memoryview(data)
sliced = mv[::2]
assert bytes(sliced) == b'aceg'
Verification: ✅ Tested in CI
Feature: Reverse slice.¶
def test_reverse_slice(self):
"""Feature: Reverse slice."""
data = bytearray(b'hello')
mv = memoryview(data)
reversed_mv = mv[::-1]
assert bytes(reversed_mv) == b'olleh'
Verification: ✅ Tested in CI
Feature: Slice of a slice.¶
def test_nested_slicing(self):
"""Feature: Slice of a slice."""
data = bytearray(b'abcdefgh')
mv = memoryview(data)
sliced1 = mv[2:6]
sliced2 = sliced1[1:3]
assert bytes(sliced2) == b'de'
Verification: ✅ Tested in CI
Feature: Modify through slice.¶
def test_modify_through_slice(self):
"""Feature: Modify through slice."""
data = bytearray(b'hello')
mv = memoryview(data)
sliced = mv[1:4]
sliced[0] = ord('a')
assert data == b'hallo'
Verification: ✅ Tested in CI
Format 'B': Unsigned byte.¶
def test_format_unsigned_byte(self):
"""Format 'B': Unsigned byte."""
data = bytearray([0, 128, 255])
mv = memoryview(data)
assert mv.format == 'B'
assert mv.itemsize == 1
Verification: ✅ Tested in CI
Format 'i': Signed integer.¶
def test_format_signed_int(self):
"""Format 'i': Signed integer."""
data = array.array('i', [1, -1, 100])
mv = memoryview(data)
assert mv.format == 'i'
assert mv.itemsize == 4
Verification: ✅ Tested in CI
Format 'f': Float.¶
def test_format_float(self):
"""Format 'f': Float."""
data = array.array('f', [1.0, 2.5, 3.14])
mv = memoryview(data)
assert mv.format == 'f'
assert mv.itemsize == 4
Verification: ✅ Tested in CI
Format 'd': Double.¶
def test_format_double(self):
"""Format 'd': Double."""
data = array.array('d', [3.14159])
mv = memoryview(data)
assert mv.format == 'd'
assert mv.itemsize == 8
Verification: ✅ Tested in CI
Edge: Empty memoryview.¶
def test_empty_memoryview(self):
"""Edge: Empty memoryview."""
data = bytearray()
mv = memoryview(data)
assert len(mv) == 0
assert mv.tobytes() == b''
Verification: ✅ Tested in CI
Edge: Single byte view.¶
def test_single_byte_view(self):
"""Edge: Single byte view."""
data = bytearray(b'x')
mv = memoryview(data)
assert len(mv) == 1
assert mv[0] == ord('x')
Verification: ✅ Tested in CI
Performance: Large memoryview.¶
def test_large_memoryview(self):
"""Performance: Large memoryview."""
data = bytearray(10000)
mv = memoryview(data)
assert len(mv) == 10000
Verification: ✅ Tested in CI
Property: bytes conversion roundtrip.¶
def test_bytes_conversion_roundtrip(self):
"""Property: bytes conversion roundtrip."""
original = bytearray(range(256))
mv = memoryview(original)
converted = bytearray(mv.tobytes())
assert converted == original
Verification: ✅ Tested in CI
Feature: Bool conversion.¶
def test_bool_conversion(self):
"""Feature: Bool conversion."""
empty = memoryview(bytearray())
filled = memoryview(bytearray(b'x'))
assert not empty
assert filled
Verification: ✅ Tested in CI
Edge: Writable memoryviews are not hashable.¶
def test_hash_error(self):
"""Edge: Writable memoryviews are not hashable."""
data = bytearray(b'test')
mv = memoryview(data)
with pytest.raises(ValueError, match='cannot hash writable memoryview'):
hash(mv)
Verification: ✅ Tested in CI
Property: c_contiguous and f_contiguous.¶
def test_contiguous_check(self):
"""Property: c_contiguous and f_contiguous."""
data = bytearray(b'test')
mv = memoryview(data)
assert mv.c_contiguous is True
assert mv.f_contiguous is True
Verification: ✅ Tested in CI
Property: Modifications visible through view.¶
def test_shared_memory_modification(self):
"""Property: Modifications visible through view."""
data = bytearray(b'hello')
mv1 = memoryview(data)
mv2 = memoryview(data)
mv1[0] = ord('H')
assert mv2[0] == ord('H')
assert data[0] == ord('H')
Verification: ✅ Tested in CI
Error: Zero step in slice.¶
def test_zero_step_slice_error(self):
"""Error: Zero step in slice."""
data = bytearray(b'test')
mv = memoryview(data)
with pytest.raises(ValueError):
_ = mv[::0]
Verification: ✅ Tested in CI
Property: Single index returns int.¶
def test_getitem_returns_int(self):
"""Property: Single index returns int."""
data = bytearray(b'test')
mv = memoryview(data)
item = mv[0]
assert isinstance(item, int)
assert item == ord('t')
Verification: ✅ Tested in CI