forked from Rust-related/RustPython
70 lines
1.6 KiB
Python
70 lines
1.6 KiB
Python
import array
|
|
|
|
from testutils import assert_raises
|
|
|
|
obj = b"abcde"
|
|
a = memoryview(obj)
|
|
assert a.obj == obj
|
|
|
|
assert a[2:3] == b"c"
|
|
|
|
assert hash(obj) == hash(a)
|
|
|
|
class A(array.array):
|
|
...
|
|
|
|
class B(bytes):
|
|
...
|
|
|
|
class C():
|
|
...
|
|
|
|
memoryview(bytearray('abcde', encoding='utf-8'))
|
|
memoryview(array.array('i', [1, 2, 3]))
|
|
memoryview(A('b', [0]))
|
|
memoryview(B('abcde', encoding='utf-8'))
|
|
|
|
assert_raises(TypeError, lambda: memoryview([1, 2, 3]))
|
|
assert_raises(TypeError, lambda: memoryview((1, 2, 3)))
|
|
assert_raises(TypeError, lambda: memoryview({}))
|
|
assert_raises(TypeError, lambda: memoryview('string'))
|
|
assert_raises(TypeError, lambda: memoryview(C()))
|
|
|
|
def test_slice():
|
|
b = b'123456789'
|
|
m = memoryview(b)
|
|
m2 = memoryview(b)
|
|
assert m == m
|
|
assert m == m2
|
|
assert m.tobytes() == b'123456789'
|
|
assert m == b
|
|
assert m[::2].tobytes() == b'13579'
|
|
assert m[::2] == b'13579'
|
|
assert m[1::2].tobytes() == b'2468'
|
|
assert m[::2][1:].tobytes() == b'3579'
|
|
assert m[::2][1:-1].tobytes() == b'357'
|
|
assert m[::2][::2].tobytes() == b'159'
|
|
assert m[::2][1::2].tobytes() == b'37'
|
|
|
|
test_slice()
|
|
|
|
def test_resizable():
|
|
b = bytearray(b'123')
|
|
b.append(4)
|
|
m = memoryview(b)
|
|
assert_raises(BufferError, lambda: b.append(5))
|
|
m.release()
|
|
b.append(6)
|
|
m2 = memoryview(b)
|
|
m4 = memoryview(b)
|
|
assert_raises(BufferError, lambda: b.append(5))
|
|
m3 = memoryview(b)
|
|
assert_raises(BufferError, lambda: b.append(5))
|
|
m2.release()
|
|
assert_raises(BufferError, lambda: b.append(5))
|
|
m3.release()
|
|
m4.release()
|
|
b.append(7)
|
|
|
|
test_resizable()
|