diff options
Diffstat (limited to 'ext/pybind11/tests/test_buffers.py')
-rw-r--r-- | ext/pybind11/tests/test_buffers.py | 55 |
1 files changed, 38 insertions, 17 deletions
diff --git a/ext/pybind11/tests/test_buffers.py b/ext/pybind11/tests/test_buffers.py index 24843d95a..c348be5dd 100644 --- a/ext/pybind11/tests/test_buffers.py +++ b/ext/pybind11/tests/test_buffers.py @@ -1,5 +1,7 @@ +import struct import pytest -from pybind11_tests import Matrix, ConstructorStats +from pybind11_tests import buffers as m +from pybind11_tests import ConstructorStats pytestmark = pytest.requires_numpy @@ -9,17 +11,17 @@ with pytest.suppress(ImportError): def test_from_python(): with pytest.raises(RuntimeError) as excinfo: - Matrix(np.array([1, 2, 3])) # trying to assign a 1D array + m.Matrix(np.array([1, 2, 3])) # trying to assign a 1D array assert str(excinfo.value) == "Incompatible buffer format!" m3 = np.array([[1, 2, 3], [4, 5, 6]]).astype(np.float32) - m4 = Matrix(m3) + m4 = m.Matrix(m3) for i in range(m4.rows()): for j in range(m4.cols()): assert m3[i, j] == m4[i, j] - cstats = ConstructorStats.get(Matrix) + cstats = ConstructorStats.get(m.Matrix) assert cstats.alive() == 1 del m3, m4 assert cstats.alive() == 0 @@ -34,25 +36,26 @@ def test_from_python(): # https://bitbucket.org/pypy/pypy/issues/2444 @pytest.unsupported_on_pypy def test_to_python(): - m = Matrix(5, 5) + mat = m.Matrix(5, 5) + assert memoryview(mat).shape == (5, 5) - assert m[2, 3] == 0 - m[2, 3] = 4 - assert m[2, 3] == 4 + assert mat[2, 3] == 0 + mat[2, 3] = 4 + assert mat[2, 3] == 4 - m2 = np.array(m, copy=False) - assert m2.shape == (5, 5) - assert abs(m2).sum() == 4 - assert m2[2, 3] == 4 - m2[2, 3] = 5 - assert m2[2, 3] == 5 + mat2 = np.array(mat, copy=False) + assert mat2.shape == (5, 5) + assert abs(mat2).sum() == 4 + assert mat2[2, 3] == 4 + mat2[2, 3] = 5 + assert mat2[2, 3] == 5 - cstats = ConstructorStats.get(Matrix) + cstats = ConstructorStats.get(m.Matrix) assert cstats.alive() == 1 - del m + del mat pytest.gc_collect() assert cstats.alive() == 1 - del m2 # holds an m reference + del mat2 # holds a mat reference pytest.gc_collect() assert cstats.alive() == 0 assert cstats.values() == ["5x5 matrix"] @@ -60,3 +63,21 @@ def test_to_python(): # assert cstats.move_constructions >= 0 # Don't invoke any assert cstats.copy_assignments == 0 assert cstats.move_assignments == 0 + + +@pytest.unsupported_on_pypy +def test_inherited_protocol(): + """SquareMatrix is derived from Matrix and inherits the buffer protocol""" + + matrix = m.SquareMatrix(5) + assert memoryview(matrix).shape == (5, 5) + assert np.asarray(matrix).shape == (5, 5) + + +@pytest.unsupported_on_pypy +def test_pointer_to_member_fn(): + for cls in [m.Buffer, m.ConstBuffer, m.DerivedBuffer]: + buf = cls() + buf.value = 0x12345678 + value = struct.unpack('i', bytearray(buf))[0] + assert value == 0x12345678 |