aboutsummaryrefslogtreecommitdiffstats
path: root/3rdparty/pybind11/tests/test_stl.py
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/pybind11/tests/test_stl.py')
-rw-r--r--3rdparty/pybind11/tests/test_stl.py123
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