@@ -531,6 +531,108 @@ def test_extend_bool() -> None:
531531 v = extend(v, [False, True])
532532 assert v == vec[bool]([True, False, True])
533533
534+ [case testLibrtVecsBufferProtocol_librt_experimental]
535+ import struct
536+ from typing import Any
537+
538+ import librt.vecs
539+ import mypy_extensions
540+
541+ from testutil import assertRaises
542+
543+ vec: Any = librt.vecs.vec
544+ append: Any = librt.vecs.append
545+ extend: Any = librt.vecs.extend
546+ i64: Any = mypy_extensions.i64
547+ i32: Any = mypy_extensions.i32
548+ i16: Any = mypy_extensions.i16
549+ u8: Any = mypy_extensions.u8
550+ memoryview_: Any = eval('memoryview')
551+
552+ def test_buffer_u8() -> None:
553+ v = vec[u8]([1, 2, 3])
554+ mv = memoryview_(v)
555+ assert mv.format == "B"
556+ assert mv.itemsize == 1
557+ assert mv.readonly
558+ assert mv.ndim == 1
559+ assert mv.shape == (3,)
560+ assert list(mv) == [1, 2, 3]
561+
562+ def test_buffer_i64() -> None:
563+ v = vec[i64]([10, 20, -30])
564+ mv = memoryview_(v)
565+ assert mv.format == "q"
566+ assert mv.itemsize == 8
567+ assert mv.readonly
568+ assert mv.ndim == 1
569+ assert mv.shape == (3,)
570+ assert list(mv) == [10, 20, -30]
571+
572+ def test_buffer_i32() -> None:
573+ v = vec[i32]([5, -12])
574+ mv = memoryview_(v)
575+ assert mv.format == "i"
576+ assert mv.itemsize == 4
577+ assert mv.readonly
578+ assert list(mv) == [5, -12]
579+
580+ def test_buffer_i16() -> None:
581+ v = vec[i16]([100, -200])
582+ mv = memoryview_(v)
583+ assert mv.format == "h"
584+ assert mv.itemsize == 2
585+ assert mv.readonly
586+ assert list(mv) == [100, -200]
587+
588+ def test_buffer_float() -> None:
589+ v = vec[float]([1.5, -2.5])
590+ mv = memoryview_(v)
591+ assert mv.format == "d"
592+ assert mv.itemsize == 8
593+ assert mv.readonly
594+ assert list(mv) == [1.5, -2.5]
595+
596+ def test_buffer_bool() -> None:
597+ v = vec[bool]([True, False, True])
598+ mv = memoryview_(v)
599+ assert mv.format == "b"
600+ assert mv.itemsize == 1
601+ assert mv.readonly
602+ assert list(mv) == [1, 0, 1]
603+
604+ def test_buffer_empty() -> None:
605+ v = vec[i64]([])
606+ mv = memoryview_(v)
607+ assert mv.format == "q"
608+ assert len(mv) == 0
609+ assert mv.shape == (0,)
610+ assert list(mv) == []
611+
612+ def test_buffer_readonly() -> None:
613+ v = vec[u8]([1, 2, 3])
614+ mv = memoryview_(v)
615+ with assertRaises(TypeError):
616+ mv[0] = 99
617+
618+ def test_buffer_bytes_conversion() -> None:
619+ v = vec[u8]([72, 101, 108, 108, 111])
620+ assert bytes(v) == b"Hello"
621+
622+ def test_buffer_tobytes() -> None:
623+ v = vec[i32]([1, 2])
624+ mv = memoryview_(v)
625+ b = mv.tobytes()
626+ values = struct.unpack("ii", b)
627+ assert values == (1, 2)
628+
629+ def test_buffer_extend_from_shared_buffer() -> None:
630+ old = vec[u8]([1, 2], capacity=5)
631+ new = append(old, 3)
632+ v = extend(old, memoryview_(new))
633+ assert v == vec[u8]([1, 2, 1, 2, 3])
634+ assert new == vec[u8]([1, 2, 3])
635+
534636[case testLibrtVecsFeaturesNotAvailableInNonExperimentalBuild_librt]
535637# This also ensures librt.vecs can be built without experimental features
536638import librt.vecs
0 commit comments