2021-08-13 16:37:05 +00:00
|
|
|
import ctypes
|
2019-11-24 07:33:05 +00:00
|
|
|
import io
|
2017-05-17 08:52:33 +00:00
|
|
|
import struct
|
2019-11-24 07:33:05 +00:00
|
|
|
|
2016-08-12 11:50:00 +00:00
|
|
|
import pytest
|
2019-11-24 07:33:05 +00:00
|
|
|
|
2021-10-08 12:38:04 +00:00
|
|
|
import env
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
from pybind11_tests import ConstructorStats
|
2021-08-13 16:37:05 +00:00
|
|
|
from pybind11_tests import buffers as m
|
2016-08-12 11:50:00 +00:00
|
|
|
|
2020-08-16 20:02:12 +00:00
|
|
|
np = pytest.importorskip("numpy")
|
2016-08-12 11:50:00 +00:00
|
|
|
|
Add `format_descriptor<>` & `npy_format_descriptor<>` `PyObject *` specializations. (#4674)
* Add `npy_format_descriptor<PyObject *>` to enable `py::array_t<PyObject *>` to/from-python conversions.
* resolve clang-tidy warning
* Use existing constructor instead of adding a static method. Thanks @Skylion007 for pointing out.
* Add `format_descriptor<PyObject *>`
Trivial addition, but still in search for a meaningful test.
* Add test_format_descriptor_format
* Ensure the Eigen `type_caster`s do not segfault when loading arrays with dtype=object
* Use `static_assert()` `!std::is_pointer<>` to replace runtime guards.
* Add comments to explain how to check for ref-count bugs. (NO code changes.)
* Make the "Pointer types ... are not supported" message Eigen-specific, as suggested by @Lalaland. Move to new pybind11/eigen/common.h header.
* Change "format_descriptor_format" implementation as suggested by @Lalaland. Additional tests meant to ensure consistency between py::format_descriptor<>, np.array, np.format_parser turn out to be useful only to highlight long-standing inconsistencies.
* resolve clang-tidy warning
* Account for np.float128, np.complex256 not being available on Windows, in a future-proof way.
* Fully address i|q|l ambiguity (hopefully).
* Remove the new `np.format_parser()`-based test, it's much more distracting than useful.
* Use bi.itemsize to disambiguate "l" or "L"
* Use `py::detail::compare_buffer_info<T>::compare()` to validate the `format_descriptor<T>::format()` strings.
* Add `buffer_info::compare<T>` to make `detail::compare_buffer_info<T>::compare` more visible & accessible.
* silence clang-tidy warning
* pytest-compatible access to np.float128, np.complex256
* Revert "pytest-compatible access to np.float128, np.complex256"
This reverts commit e9a289c50fc07199806d14ded644215ab6f03afa.
* Use `sizeof(long double) == sizeof(double)` instead of `std::is_same<>`
* Report skipped `long double` tests.
* Change the name of the new `buffer_info` member function to `item_type_is_equivalent_to`. Add comment defining "equivalent" by example.
* Change `item_type_is_equivalent_to<>()` from `static` function to member function, as suggested by @Lalaland
2023-05-23 17:49:32 +00:00
|
|
|
if m.long_double_and_double_have_same_size:
|
|
|
|
# Determined by the compiler used to build the pybind11 tests
|
|
|
|
# (e.g. MSVC gets here, but MinGW might not).
|
|
|
|
np_float128 = None
|
|
|
|
np_complex256 = None
|
|
|
|
else:
|
|
|
|
# Determined by the compiler used to build numpy (e.g. MinGW).
|
|
|
|
np_float128 = getattr(np, *["float128"] * 2)
|
|
|
|
np_complex256 = getattr(np, *["complex256"] * 2)
|
|
|
|
|
|
|
|
CPP_NAME_FORMAT_NP_DTYPE_TABLE = [
|
|
|
|
("PyObject *", "O", object),
|
|
|
|
("bool", "?", np.bool_),
|
|
|
|
("std::int8_t", "b", np.int8),
|
|
|
|
("std::uint8_t", "B", np.uint8),
|
|
|
|
("std::int16_t", "h", np.int16),
|
|
|
|
("std::uint16_t", "H", np.uint16),
|
|
|
|
("std::int32_t", "i", np.int32),
|
|
|
|
("std::uint32_t", "I", np.uint32),
|
|
|
|
("std::int64_t", "q", np.int64),
|
|
|
|
("std::uint64_t", "Q", np.uint64),
|
|
|
|
("float", "f", np.float32),
|
|
|
|
("double", "d", np.float64),
|
|
|
|
("long double", "g", np_float128),
|
|
|
|
("std::complex<float>", "Zf", np.complex64),
|
|
|
|
("std::complex<double>", "Zd", np.complex128),
|
|
|
|
("std::complex<long double>", "Zg", np_complex256),
|
|
|
|
]
|
|
|
|
CPP_NAME_FORMAT_TABLE = [
|
|
|
|
(cpp_name, format)
|
|
|
|
for cpp_name, format, np_dtype in CPP_NAME_FORMAT_NP_DTYPE_TABLE
|
|
|
|
if np_dtype is not None
|
|
|
|
]
|
|
|
|
CPP_NAME_NP_DTYPE_TABLE = [
|
|
|
|
(cpp_name, np_dtype) for cpp_name, _, np_dtype in CPP_NAME_FORMAT_NP_DTYPE_TABLE
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.parametrize(("cpp_name", "np_dtype"), CPP_NAME_NP_DTYPE_TABLE)
|
|
|
|
def test_format_descriptor_format_buffer_info_equiv(cpp_name, np_dtype):
|
|
|
|
if np_dtype is None:
|
|
|
|
pytest.skip(
|
|
|
|
f"cpp_name=`{cpp_name}`: `long double` and `double` have same size."
|
|
|
|
)
|
|
|
|
if isinstance(np_dtype, str):
|
|
|
|
pytest.skip(f"np.{np_dtype} does not exist.")
|
|
|
|
np_array = np.array([], dtype=np_dtype)
|
|
|
|
for other_cpp_name, expected_format in CPP_NAME_FORMAT_TABLE:
|
|
|
|
format, np_array_is_matching = m.format_descriptor_format_buffer_info_equiv(
|
|
|
|
other_cpp_name, np_array
|
|
|
|
)
|
|
|
|
assert format == expected_format
|
|
|
|
if other_cpp_name == cpp_name:
|
|
|
|
assert np_array_is_matching
|
|
|
|
else:
|
|
|
|
assert not np_array_is_matching
|
|
|
|
|
2016-08-12 11:50:00 +00:00
|
|
|
|
2016-12-16 14:00:46 +00:00
|
|
|
def test_from_python():
|
|
|
|
with pytest.raises(RuntimeError) as excinfo:
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
m.Matrix(np.array([1, 2, 3])) # trying to assign a 1D array
|
2016-12-16 14:00:46 +00:00
|
|
|
assert str(excinfo.value) == "Incompatible buffer format!"
|
|
|
|
|
|
|
|
m3 = np.array([[1, 2, 3], [4, 5, 6]]).astype(np.float32)
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
m4 = m.Matrix(m3)
|
2016-12-16 14:00:46 +00:00
|
|
|
|
|
|
|
for i in range(m4.rows()):
|
|
|
|
for j in range(m4.cols()):
|
|
|
|
assert m3[i, j] == m4[i, j]
|
|
|
|
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
cstats = ConstructorStats.get(m.Matrix)
|
2016-12-16 14:00:46 +00:00
|
|
|
assert cstats.alive() == 1
|
|
|
|
del m3, m4
|
|
|
|
assert cstats.alive() == 0
|
|
|
|
assert cstats.values() == ["2x3 matrix"]
|
|
|
|
assert cstats.copy_constructions == 0
|
|
|
|
# assert cstats.move_constructions >= 0 # Don't invoke any
|
|
|
|
assert cstats.copy_assignments == 0
|
|
|
|
assert cstats.move_assignments == 0
|
|
|
|
|
|
|
|
|
2020-08-16 20:02:12 +00:00
|
|
|
# https://foss.heptapod.net/pypy/pypy/-/issues/2444
|
2021-11-17 14:44:19 +00:00
|
|
|
# TODO: fix on recent PyPy
|
|
|
|
@pytest.mark.xfail(
|
2021-11-22 09:33:03 +00:00
|
|
|
env.PYPY, reason="PyPy 7.3.7 doesn't clear this anymore", strict=False
|
2021-11-17 14:44:19 +00:00
|
|
|
)
|
2016-08-12 11:50:00 +00:00
|
|
|
def test_to_python():
|
2017-09-21 21:07:48 +00:00
|
|
|
mat = m.Matrix(5, 4)
|
|
|
|
assert memoryview(mat).shape == (5, 4)
|
2016-08-12 11:50:00 +00:00
|
|
|
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
assert mat[2, 3] == 0
|
2017-09-21 21:07:48 +00:00
|
|
|
mat[2, 3] = 4.0
|
|
|
|
mat[3, 2] = 7.0
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
assert mat[2, 3] == 4
|
2017-09-21 21:07:48 +00:00
|
|
|
assert mat[3, 2] == 7
|
2020-10-16 20:38:13 +00:00
|
|
|
assert struct.unpack_from("f", mat, (3 * 4 + 2) * 4) == (7,)
|
|
|
|
assert struct.unpack_from("f", mat, (2 * 4 + 3) * 4) == (4,)
|
2016-08-12 11:50:00 +00:00
|
|
|
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
mat2 = np.array(mat, copy=False)
|
2017-09-21 21:07:48 +00:00
|
|
|
assert mat2.shape == (5, 4)
|
|
|
|
assert abs(mat2).sum() == 11
|
2023-02-22 14:18:55 +00:00
|
|
|
assert mat2[2, 3] == 4
|
|
|
|
assert mat2[3, 2] == 7
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
mat2[2, 3] = 5
|
|
|
|
assert mat2[2, 3] == 5
|
2016-08-12 11:50:00 +00:00
|
|
|
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
cstats = ConstructorStats.get(m.Matrix)
|
2016-08-12 11:50:00 +00:00
|
|
|
assert cstats.alive() == 1
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
del mat
|
2016-12-16 14:00:46 +00:00
|
|
|
pytest.gc_collect()
|
2016-08-12 11:50:00 +00:00
|
|
|
assert cstats.alive() == 1
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
del mat2 # holds a mat reference
|
2016-12-16 14:00:46 +00:00
|
|
|
pytest.gc_collect()
|
2016-08-12 11:50:00 +00:00
|
|
|
assert cstats.alive() == 0
|
2017-09-21 21:07:48 +00:00
|
|
|
assert cstats.values() == ["5x4 matrix"]
|
2016-08-12 11:50:00 +00:00
|
|
|
assert cstats.copy_constructions == 0
|
|
|
|
# assert cstats.move_constructions >= 0 # Don't invoke any
|
|
|
|
assert cstats.copy_assignments == 0
|
|
|
|
assert cstats.move_assignments == 0
|
2017-05-17 08:52:33 +00:00
|
|
|
|
|
|
|
|
2017-05-28 14:35:02 +00:00
|
|
|
def test_inherited_protocol():
|
|
|
|
"""SquareMatrix is derived from Matrix and inherits the buffer protocol"""
|
|
|
|
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
matrix = m.SquareMatrix(5)
|
2017-05-28 14:35:02 +00:00
|
|
|
assert memoryview(matrix).shape == (5, 5)
|
|
|
|
assert np.asarray(matrix).shape == (5, 5)
|
|
|
|
|
|
|
|
|
Update all remaining tests to new test styles
This udpates all the remaining tests to the new test suite code and
comment styles started in #898. For the most part, the test coverage
here is unchanged, with a few minor exceptions as noted below.
- test_constants_and_functions: this adds more overload tests with
overloads with different number of arguments for more comprehensive
overload_cast testing. The test style conversion broke the overload
tests under MSVC 2015, prompting the additional tests while looking
for a workaround.
- test_eigen: this dropped the unused functions `get_cm_corners` and
`get_cm_corners_const`--these same tests were duplicates of the same
things provided (and used) via ReturnTester methods.
- test_opaque_types: this test had a hidden dependence on ExampleMandA
which is now fixed by using the global UserType which suffices for the
relevant test.
- test_methods_and_attributes: this required some additions to UserType
to make it usable as a replacement for the test's previous SimpleType:
UserType gained a value mutator, and the `value` property is not
mutable (it was previously readonly). Some overload tests were also
added to better test overload_cast (as described above).
- test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
the templated versions with an empty parameter pack expand to the same
thing.
- test_stl: this was already mostly in the new style; this just tweaks
things a bit, localizing a class, and adding some missing
`// test_whatever` comments.
- test_virtual_functions: like `test_stl`, this was mostly in the new
test style already, but needed some `// test_whatever` comments.
This commit also moves the inherited virtual example code to the end
of the file, after the main set of tests (since it is less important
than the other tests, and rather length); it also got renamed to
`test_inherited_virtuals` (from `test_inheriting_repeat`) because it
tests both inherited virtual approaches, not just the repeat approach.
2017-07-25 20:47:36 +00:00
|
|
|
def test_pointer_to_member_fn():
|
|
|
|
for cls in [m.Buffer, m.ConstBuffer, m.DerivedBuffer]:
|
2017-05-17 08:52:33 +00:00
|
|
|
buf = cls()
|
|
|
|
buf.value = 0x12345678
|
2020-10-16 20:38:13 +00:00
|
|
|
value = struct.unpack("i", bytearray(buf))[0]
|
2017-05-17 08:52:33 +00:00
|
|
|
assert value == 0x12345678
|
2019-11-24 07:33:05 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_readonly_buffer():
|
|
|
|
buf = m.BufferReadOnly(0x64)
|
|
|
|
view = memoryview(buf)
|
2022-02-11 02:28:08 +00:00
|
|
|
assert view[0] == 0x64
|
2019-11-24 07:33:05 +00:00
|
|
|
assert view.readonly
|
2021-01-01 16:05:22 +00:00
|
|
|
with pytest.raises(TypeError):
|
2022-02-11 02:28:08 +00:00
|
|
|
view[0] = 0
|
2019-11-24 07:33:05 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_selective_readonly_buffer():
|
|
|
|
buf = m.BufferReadOnlySelect()
|
|
|
|
|
2022-02-11 02:28:08 +00:00
|
|
|
memoryview(buf)[0] = 0x64
|
2019-11-24 07:33:05 +00:00
|
|
|
assert buf.value == 0x64
|
|
|
|
|
2020-10-16 20:38:13 +00:00
|
|
|
io.BytesIO(b"A").readinto(buf)
|
|
|
|
assert buf.value == ord(b"A")
|
2019-11-24 07:33:05 +00:00
|
|
|
|
|
|
|
buf.readonly = True
|
|
|
|
with pytest.raises(TypeError):
|
2022-02-11 02:28:08 +00:00
|
|
|
memoryview(buf)[0] = 0
|
2019-11-24 07:33:05 +00:00
|
|
|
with pytest.raises(TypeError):
|
2020-10-16 20:38:13 +00:00
|
|
|
io.BytesIO(b"1").readinto(buf)
|
2020-10-03 21:09:14 +00:00
|
|
|
|
|
|
|
|
|
|
|
def test_ctypes_array_1d():
|
|
|
|
char1d = (ctypes.c_char * 10)()
|
|
|
|
int1d = (ctypes.c_int * 15)()
|
|
|
|
long1d = (ctypes.c_long * 7)()
|
|
|
|
|
|
|
|
for carray in (char1d, int1d, long1d):
|
|
|
|
info = m.get_buffer_info(carray)
|
|
|
|
assert info.itemsize == ctypes.sizeof(carray._type_)
|
|
|
|
assert info.size == len(carray)
|
|
|
|
assert info.ndim == 1
|
|
|
|
assert info.shape == [info.size]
|
|
|
|
assert info.strides == [info.itemsize]
|
|
|
|
assert not info.readonly
|
|
|
|
|
|
|
|
|
|
|
|
def test_ctypes_array_2d():
|
|
|
|
char2d = ((ctypes.c_char * 10) * 4)()
|
|
|
|
int2d = ((ctypes.c_int * 15) * 3)()
|
|
|
|
long2d = ((ctypes.c_long * 7) * 2)()
|
|
|
|
|
|
|
|
for carray in (char2d, int2d, long2d):
|
|
|
|
info = m.get_buffer_info(carray)
|
|
|
|
assert info.itemsize == ctypes.sizeof(carray[0]._type_)
|
|
|
|
assert info.size == len(carray) * len(carray[0])
|
|
|
|
assert info.ndim == 2
|
|
|
|
assert info.shape == [len(carray), len(carray[0])]
|
|
|
|
assert info.strides == [info.itemsize * len(carray[0]), info.itemsize]
|
|
|
|
assert not info.readonly
|
|
|
|
|
|
|
|
|
|
|
|
def test_ctypes_from_buffer():
|
|
|
|
test_pystr = b"0123456789"
|
|
|
|
for pyarray in (test_pystr, bytearray(test_pystr)):
|
|
|
|
pyinfo = m.get_buffer_info(pyarray)
|
|
|
|
|
|
|
|
if pyinfo.readonly:
|
|
|
|
cbytes = (ctypes.c_char * len(pyarray)).from_buffer_copy(pyarray)
|
|
|
|
cinfo = m.get_buffer_info(cbytes)
|
|
|
|
else:
|
|
|
|
cbytes = (ctypes.c_char * len(pyarray)).from_buffer(pyarray)
|
|
|
|
cinfo = m.get_buffer_info(cbytes)
|
|
|
|
|
|
|
|
assert cinfo.size == pyinfo.size
|
|
|
|
assert cinfo.ndim == pyinfo.ndim
|
|
|
|
assert cinfo.shape == pyinfo.shape
|
|
|
|
assert cinfo.strides == pyinfo.strides
|
|
|
|
assert not cinfo.readonly
|