diff options
author | gatecat <gatecat@ds0.me> | 2022-09-14 09:28:47 +0200 |
---|---|---|
committer | gatecat <gatecat@ds0.me> | 2022-09-14 09:28:47 +0200 |
commit | a72f898ff4c4237424c468044a6db9d6953b541e (patch) | |
tree | 1c4a543f661dd1b281aecf4660388491702fa8d8 /3rdparty/pybind11/tests/test_stl.py | |
parent | f1349e114f3a16ccd002e8513339e18f5be4d31b (diff) | |
download | nextpnr-a72f898ff4c4237424c468044a6db9d6953b541e.tar.gz nextpnr-a72f898ff4c4237424c468044a6db9d6953b541e.tar.bz2 nextpnr-a72f898ff4c4237424c468044a6db9d6953b541e.zip |
3rdparty: Bump vendored pybind11 version for py3.11 support
Signed-off-by: gatecat <gatecat@ds0.me>
Diffstat (limited to '3rdparty/pybind11/tests/test_stl.py')
-rw-r--r-- | 3rdparty/pybind11/tests/test_stl.py | 123 |
1 files changed, 117 insertions, 6 deletions
diff --git a/3rdparty/pybind11/tests/test_stl.py b/3rdparty/pybind11/tests/test_stl.py index 33001754..d30c3821 100644 --- a/3rdparty/pybind11/tests/test_stl.py +++ b/3rdparty/pybind11/tests/test_stl.py @@ -1,9 +1,7 @@ -# -*- coding: utf-8 -*- import pytest +from pybind11_tests import ConstructorStats, UserType from pybind11_tests import stl as m -from pybind11_tests import UserType -from pybind11_tests import ConstructorStats def test_vector(doc): @@ -16,6 +14,7 @@ def test_vector(doc): assert m.cast_bool_vector() == [True, False] assert m.load_bool_vector([True, False]) + assert m.load_bool_vector(tuple([True, False])) assert doc(m.cast_vector) == "cast_vector() -> List[int]" assert doc(m.load_vector) == "load_vector(arg0: List[int]) -> bool" @@ -38,6 +37,7 @@ def test_array(doc): lst = m.cast_array() assert lst == [1, 2] assert m.load_array(lst) + assert m.load_array(tuple(lst)) assert doc(m.cast_array) == "cast_array() -> List[int[2]]" assert doc(m.load_array) == "load_array(arg0: List[int[2]]) -> bool" @@ -48,6 +48,7 @@ def test_valarray(doc): lst = m.cast_valarray() assert lst == [1, 4, 9] assert m.load_valarray(lst) + assert m.load_valarray(tuple(lst)) assert doc(m.cast_valarray) == "cast_valarray() -> List[int]" assert doc(m.load_valarray) == "load_valarray(arg0: List[int]) -> bool" @@ -72,6 +73,7 @@ def test_set(doc): assert s == {"key1", "key2"} s.add("key3") assert m.load_set(s) + assert m.load_set(frozenset(s)) assert doc(m.cast_set) == "cast_set() -> Set[str]" assert doc(m.load_set) == "load_set(arg0: Set[str]) -> bool" @@ -133,6 +135,10 @@ def test_optional(): assert mvalue.initialized assert holder.member_initialized() + props = m.OptionalProperties() + assert int(props.access_by_ref) == 42 + assert int(props.access_by_copy) == 42 + @pytest.mark.skipif( not hasattr(m, "has_exp_optional"), reason="no <experimental/optional>" @@ -161,6 +167,88 @@ def test_exp_optional(): assert mvalue.initialized assert holder.member_initialized() + props = m.OptionalExpProperties() + assert int(props.access_by_ref) == 42 + assert int(props.access_by_copy) == 42 + + +@pytest.mark.skipif(not hasattr(m, "has_boost_optional"), reason="no <boost/optional>") +def test_boost_optional(): + assert m.double_or_zero_boost(None) == 0 + assert m.double_or_zero_boost(42) == 84 + pytest.raises(TypeError, m.double_or_zero_boost, "foo") + + assert m.half_or_none_boost(0) is None + assert m.half_or_none_boost(42) == 21 + pytest.raises(TypeError, m.half_or_none_boost, "foo") + + assert m.test_nullopt_boost() == 42 + assert m.test_nullopt_boost(None) == 42 + assert m.test_nullopt_boost(42) == 42 + assert m.test_nullopt_boost(43) == 43 + + assert m.test_no_assign_boost() == 42 + assert m.test_no_assign_boost(None) == 42 + assert m.test_no_assign_boost(m.NoAssign(43)) == 43 + pytest.raises(TypeError, m.test_no_assign_boost, 43) + + holder = m.OptionalBoostHolder() + mvalue = holder.member + assert mvalue.initialized + assert holder.member_initialized() + + props = m.OptionalBoostProperties() + assert int(props.access_by_ref) == 42 + assert int(props.access_by_copy) == 42 + + +def test_reference_sensitive_optional(): + assert m.double_or_zero_refsensitive(None) == 0 + assert m.double_or_zero_refsensitive(42) == 84 + pytest.raises(TypeError, m.double_or_zero_refsensitive, "foo") + + assert m.half_or_none_refsensitive(0) is None + assert m.half_or_none_refsensitive(42) == 21 + pytest.raises(TypeError, m.half_or_none_refsensitive, "foo") + + assert m.test_nullopt_refsensitive() == 42 + assert m.test_nullopt_refsensitive(None) == 42 + assert m.test_nullopt_refsensitive(42) == 42 + assert m.test_nullopt_refsensitive(43) == 43 + + assert m.test_no_assign_refsensitive() == 42 + assert m.test_no_assign_refsensitive(None) == 42 + assert m.test_no_assign_refsensitive(m.NoAssign(43)) == 43 + pytest.raises(TypeError, m.test_no_assign_refsensitive, 43) + + holder = m.OptionalRefSensitiveHolder() + mvalue = holder.member + assert mvalue.initialized + assert holder.member_initialized() + + props = m.OptionalRefSensitiveProperties() + assert int(props.access_by_ref) == 42 + assert int(props.access_by_copy) == 42 + + +@pytest.mark.skipif(not hasattr(m, "has_filesystem"), reason="no <filesystem>") +def test_fs_path(): + from pathlib import Path + + class PseudoStrPath: + def __fspath__(self): + return "foo/bar" + + class PseudoBytesPath: + def __fspath__(self): + return b"foo/bar" + + assert m.parent_path(Path("foo/bar")) == Path("foo") + assert m.parent_path("foo/bar") == Path("foo") + assert m.parent_path(b"foo/bar") == Path("foo") + assert m.parent_path(PseudoStrPath()) == Path("foo") + assert m.parent_path(PseudoBytesPath()) == Path("foo") + @pytest.mark.skipif(not hasattr(m, "load_variant"), reason="no <variant>") def test_variant(doc): @@ -179,6 +267,22 @@ def test_variant(doc): ) +@pytest.mark.skipif( + not hasattr(m, "load_monostate_variant"), reason="no std::monostate" +) +def test_variant_monostate(doc): + assert m.load_monostate_variant(None) == "std::monostate" + assert m.load_monostate_variant(1) == "int" + assert m.load_monostate_variant("1") == "std::string" + + assert m.cast_monostate_variant() == (None, 5, "Hello") + + assert ( + doc(m.load_monostate_variant) + == "load_monostate_variant(arg0: Union[None, int, str]) -> str" + ) + + def test_vec_of_reference_wrapper(): """#171: Can't return reference wrappers (or STL structures containing them)""" assert ( @@ -198,7 +302,7 @@ def test_stl_pass_by_pointer(msg): 1. (v: List[int] = None) -> List[int] Invoked with: - """ # noqa: E501 line too long + """ ) with pytest.raises(TypeError) as excinfo: @@ -210,7 +314,7 @@ def test_stl_pass_by_pointer(msg): 1. (v: List[int] = None) -> List[int] Invoked with: None - """ # noqa: E501 line too long + """ ) assert m.stl_pass_by_pointer([1, 2, 3]) == [1, 2, 3] @@ -259,8 +363,15 @@ def test_array_cast_sequence(): def test_issue_1561(): - """ check fix for issue #1561 """ + """check fix for issue #1561""" bar = m.Issue1561Outer() bar.list = [m.Issue1561Inner("bar")] bar.list assert bar.list[0].data == "bar" + + +def test_return_vector_bool_raw_ptr(): + # Add `while True:` for manual leak checking. + v = m.return_vector_bool_raw_ptr() + assert isinstance(v, list) + assert len(v) == 4513 |