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).
diff --git a/docs/advanced/pycpp/numpy.rst b/docs/advanced/pycpp/numpy.rst
index 98b0c25..18eff80 100644
--- a/docs/advanced/pycpp/numpy.rst
+++ b/docs/advanced/pycpp/numpy.rst
@@ -41,7 +41,7 @@
py::format_descriptor<float>::format(), /* Python struct-style format descriptor */
2, /* Number of 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) }
);
});
diff --git a/tests/test_buffers.cpp b/tests/test_buffers.cpp
index 5be7177..5199cf6 100644
--- a/tests/test_buffers.cpp
+++ b/tests/test_buffers.cpp
@@ -107,7 +107,7 @@
return py::buffer_info(
m.data(), /* Pointer to buffer */
{ 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) }
);
})
diff --git a/tests/test_buffers.py b/tests/test_buffers.py
index c348be5..f006552 100644
--- a/tests/test_buffers.py
+++ b/tests/test_buffers.py
@@ -36,17 +36,21 @@
# https://bitbucket.org/pypy/pypy/issues/2444
@pytest.unsupported_on_pypy
def test_to_python():
- mat = m.Matrix(5, 5)
- assert memoryview(mat).shape == (5, 5)
+ mat = m.Matrix(5, 4)
+ assert memoryview(mat).shape == (5, 4)
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[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)
- assert mat2.shape == (5, 5)
- assert abs(mat2).sum() == 4
- assert mat2[2, 3] == 4
+ assert mat2.shape == (5, 4)
+ assert abs(mat2).sum() == 11
+ assert mat2[2, 3] == 4 and mat2[3, 2] == 7
mat2[2, 3] = 5
assert mat2[2, 3] == 5
@@ -58,7 +62,7 @@
del mat2 # holds a mat reference
pytest.gc_collect()
assert cstats.alive() == 0
- assert cstats.values() == ["5x5 matrix"]
+ assert cstats.values() == ["5x4 matrix"]
assert cstats.copy_constructions == 0
# assert cstats.move_constructions >= 0 # Don't invoke any
assert cstats.copy_assignments == 0