Commit a22dd2d1 authored by Ansgar Burchardt's avatar Ansgar Burchardt Committed by Jason Rhinelander
Browse files

correct stride in matrix example and test

This also matches the Eigen example for the row-major case.

This also enhances one of the tests to trigger a failure (and fixes it in the PR).  (This isn't really a flaw in pybind itself, but rather fixes wrong code in the test code and docs).
parent d2757d04
...@@ -41,7 +41,7 @@ completely avoid copy operations with Python expressions like ...@@ -41,7 +41,7 @@ completely avoid copy operations with Python expressions like
py::format_descriptor<float>::format(), /* Python struct-style format descriptor */ py::format_descriptor<float>::format(), /* Python struct-style format descriptor */
2, /* Number of dimensions */ 2, /* Number of dimensions */
{ m.rows(), m.cols() }, /* Buffer dimensions */ { m.rows(), m.cols() }, /* Buffer dimensions */
{ sizeof(float) * m.rows(), /* Strides (in bytes) for each index */ { sizeof(float) * m.cols(), /* Strides (in bytes) for each index */
sizeof(float) } sizeof(float) }
); );
}); });
......
...@@ -107,7 +107,7 @@ TEST_SUBMODULE(buffers, m) { ...@@ -107,7 +107,7 @@ TEST_SUBMODULE(buffers, m) {
return py::buffer_info( return py::buffer_info(
m.data(), /* Pointer to buffer */ m.data(), /* Pointer to buffer */
{ m.rows(), m.cols() }, /* Buffer dimensions */ { m.rows(), m.cols() }, /* Buffer dimensions */
{ sizeof(float) * size_t(m.rows()), /* Strides (in bytes) for each index */ { sizeof(float) * size_t(m.cols()), /* Strides (in bytes) for each index */
sizeof(float) } sizeof(float) }
); );
}) })
......
...@@ -36,17 +36,21 @@ def test_from_python(): ...@@ -36,17 +36,21 @@ def test_from_python():
# https://bitbucket.org/pypy/pypy/issues/2444 # https://bitbucket.org/pypy/pypy/issues/2444
@pytest.unsupported_on_pypy @pytest.unsupported_on_pypy
def test_to_python(): def test_to_python():
mat = m.Matrix(5, 5) mat = m.Matrix(5, 4)
assert memoryview(mat).shape == (5, 5) assert memoryview(mat).shape == (5, 4)
assert mat[2, 3] == 0 assert mat[2, 3] == 0
mat[2, 3] = 4 mat[2, 3] = 4.0
mat[3, 2] = 7.0
assert mat[2, 3] == 4 assert mat[2, 3] == 4
assert mat[3, 2] == 7
assert struct.unpack_from('f', mat, (3 * 4 + 2) * 4) == (7, )
assert struct.unpack_from('f', mat, (2 * 4 + 3) * 4) == (4, )
mat2 = np.array(mat, copy=False) mat2 = np.array(mat, copy=False)
assert mat2.shape == (5, 5) assert mat2.shape == (5, 4)
assert abs(mat2).sum() == 4 assert abs(mat2).sum() == 11
assert mat2[2, 3] == 4 assert mat2[2, 3] == 4 and mat2[3, 2] == 7
mat2[2, 3] = 5 mat2[2, 3] = 5
assert mat2[2, 3] == 5 assert mat2[2, 3] == 5
...@@ -58,7 +62,7 @@ def test_to_python(): ...@@ -58,7 +62,7 @@ def test_to_python():
del mat2 # holds a mat reference del mat2 # holds a mat reference
pytest.gc_collect() pytest.gc_collect()
assert cstats.alive() == 0 assert cstats.alive() == 0
assert cstats.values() == ["5x5 matrix"] assert cstats.values() == ["5x4 matrix"]
assert cstats.copy_constructions == 0 assert cstats.copy_constructions == 0
# assert cstats.move_constructions >= 0 # Don't invoke any # assert cstats.move_constructions >= 0 # Don't invoke any
assert cstats.copy_assignments == 0 assert cstats.copy_assignments == 0
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment