mirror of
https://github.com/thelsing/knx.git
synced 2026-02-23 13:50:35 +01:00
update pybind11
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import annotations
|
||||
|
||||
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,15 +16,16 @@ def test_vector(doc):
|
||||
|
||||
assert m.cast_bool_vector() == [True, False]
|
||||
assert m.load_bool_vector([True, False])
|
||||
assert m.load_bool_vector((True, False))
|
||||
|
||||
assert doc(m.cast_vector) == "cast_vector() -> List[int]"
|
||||
assert doc(m.load_vector) == "load_vector(arg0: List[int]) -> bool"
|
||||
assert doc(m.cast_vector) == "cast_vector() -> list[int]"
|
||||
assert doc(m.load_vector) == "load_vector(arg0: list[int]) -> bool"
|
||||
|
||||
# Test regression caused by 936: pointers to stl containers weren't castable
|
||||
assert m.cast_ptr_vector() == ["lvalue", "lvalue"]
|
||||
|
||||
|
||||
def test_deque(doc):
|
||||
def test_deque():
|
||||
"""std::deque <-> list"""
|
||||
lst = m.cast_deque()
|
||||
assert lst == [1]
|
||||
@@ -38,9 +39,13 @@ 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"
|
||||
assert doc(m.cast_array) == "cast_array() -> Annotated[list[int], FixedSize(2)]"
|
||||
assert (
|
||||
doc(m.load_array)
|
||||
== "load_array(arg0: Annotated[list[int], FixedSize(2)]) -> bool"
|
||||
)
|
||||
|
||||
|
||||
def test_valarray(doc):
|
||||
@@ -48,9 +53,10 @@ 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"
|
||||
assert doc(m.cast_valarray) == "cast_valarray() -> list[int]"
|
||||
assert doc(m.load_valarray) == "load_valarray(arg0: list[int]) -> bool"
|
||||
|
||||
|
||||
def test_map(doc):
|
||||
@@ -62,8 +68,8 @@ def test_map(doc):
|
||||
assert "key2" in d
|
||||
assert m.load_map(d)
|
||||
|
||||
assert doc(m.cast_map) == "cast_map() -> Dict[str, str]"
|
||||
assert doc(m.load_map) == "load_map(arg0: Dict[str, str]) -> bool"
|
||||
assert doc(m.cast_map) == "cast_map() -> dict[str, str]"
|
||||
assert doc(m.load_map) == "load_map(arg0: dict[str, str]) -> bool"
|
||||
|
||||
|
||||
def test_set(doc):
|
||||
@@ -72,9 +78,10 @@ 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"
|
||||
assert doc(m.cast_set) == "cast_set() -> set[str]"
|
||||
assert doc(m.load_set) == "load_set(arg0: set[str]) -> bool"
|
||||
|
||||
|
||||
def test_recursive_casting():
|
||||
@@ -93,7 +100,8 @@ def test_recursive_casting():
|
||||
|
||||
# Issue #853 test case:
|
||||
z = m.cast_unique_ptr_vector()
|
||||
assert z[0].value == 7 and z[1].value == 42
|
||||
assert z[0].value == 7
|
||||
assert z[1].value == 42
|
||||
|
||||
|
||||
def test_move_out_container():
|
||||
@@ -133,6 +141,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 +173,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 +273,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 (
|
||||
@@ -195,10 +305,10 @@ def test_stl_pass_by_pointer(msg):
|
||||
msg(excinfo.value)
|
||||
== """
|
||||
stl_pass_by_pointer(): incompatible function arguments. The following argument types are supported:
|
||||
1. (v: List[int] = None) -> List[int]
|
||||
1. (v: list[int] = None) -> list[int]
|
||||
|
||||
Invoked with:
|
||||
""" # noqa: E501 line too long
|
||||
"""
|
||||
)
|
||||
|
||||
with pytest.raises(TypeError) as excinfo:
|
||||
@@ -207,10 +317,10 @@ def test_stl_pass_by_pointer(msg):
|
||||
msg(excinfo.value)
|
||||
== """
|
||||
stl_pass_by_pointer(): incompatible function arguments. The following argument types are supported:
|
||||
1. (v: List[int] = None) -> List[int]
|
||||
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 +369,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
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user