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
|
|
|
|
|
|
|
|
2023-05-18 00:52:43 +00:00
|
|
|
@pytest.mark.parametrize(
|
2023-05-18 22:22:07 +00:00
|
|
|
("cpp_name", "expected_fmts", "np_array_dtype"),
|
2023-05-18 00:52:43 +00:00
|
|
|
[
|
2023-05-18 22:22:07 +00:00
|
|
|
("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", "d"], np.float128),
|
|
|
|
("std::complex<float>", ["Zf"], np.complex64),
|
|
|
|
("std::complex<double>", ["Zd"], np.complex128),
|
|
|
|
("std::complex<long double>", ["Zg", "Zd"], np.complex256),
|
2023-05-18 00:52:43 +00:00
|
|
|
],
|
|
|
|
)
|
2023-05-18 22:22:07 +00:00
|
|
|
def test_format_descriptor_format(cpp_name, expected_fmts, np_array_dtype):
|
|
|
|
fmt = m.format_descriptor_format(cpp_name)
|
|
|
|
assert fmt in expected_fmts
|
|
|
|
|
|
|
|
# Everything below just documents long-standing inconsistencies.
|
|
|
|
# See also: https://github.com/pybind/pybind11/issues/1908
|
|
|
|
|
|
|
|
# py::format_descriptor<> vs np.array:
|
|
|
|
na = np.array([], dtype=np_array_dtype)
|
|
|
|
bi = m.get_buffer_info(na)
|
|
|
|
if fmt == "q":
|
|
|
|
assert bi.format in ["q", "l"]
|
|
|
|
elif fmt == "Q":
|
|
|
|
assert bi.format in ["Q", "L"]
|
|
|
|
else:
|
|
|
|
assert bi.format == fmt
|
|
|
|
|
|
|
|
# py::format_descriptor<> vs np.format_parser():
|
|
|
|
fmtp = fmt[1:] if fmt.startswith("Z") else fmt
|
|
|
|
fp = np.format_parser(fmtp, [], [])
|
|
|
|
assert fp.dtype is not None
|
|
|
|
|
|
|
|
# DO NOT try to compare fp.dtype and na.dtype, unless you have a lot of
|
|
|
|
# spare time to make sense of it and possibly chime in under #1908.
|
2023-05-18 00:52:43 +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
|