Commit 6a194b56 authored by Ralf W. Grosse-Kunstleve's avatar Ralf W. Grosse-Kunstleve
Browse files

pass_shared_vrederived test

No related merge requests found
Showing with 17 additions and 4 deletions
+17 -4
......@@ -45,6 +45,8 @@ class vderived : public vbase {
int base_get_int(const vbase& base) { return get_int() + base.get_int(); }
};
class vrederived : public vderived {};
inline std::unique_ptr<cbase>
make_unique_cderived_up_cast() {
// Undefined Behavior (pure C++ problem, NOT a pybind11 problem):
......@@ -110,6 +112,10 @@ inline int pass_shared_vderived(std::shared_ptr<vderived> vd) {
return vd->get_int();
}
inline int pass_shared_vrederived(std::shared_ptr<vrederived> vr) {
return vr->get_int();
}
TEST_SUBMODULE(smart_ptr_base_derived, m) {
m.def("to_cout", to_cout);
......@@ -127,6 +133,9 @@ TEST_SUBMODULE(smart_ptr_base_derived, m) {
py::class_<vderived, vbase, std::shared_ptr<vderived>>(m, "vderived")
.def(py::init<>());
py::class_<vrederived, vderived, std::shared_ptr<vrederived>>(m, "vrederived")
.def(py::init<>());
m.def("make_shared_cderived",
make_shared_cderived,
py::arg("use_custom_deleter") = false);
......@@ -144,6 +153,7 @@ TEST_SUBMODULE(smart_ptr_base_derived, m) {
py::arg("use_custom_deleter") = false);
m.def("pass_shared_vbase", pass_shared_vbase);
m.def("pass_shared_vderived", pass_shared_vderived);
m.def("pass_shared_vrederived", pass_shared_vrederived);
}
} // namespace smart_ptr_base_derived
......
......@@ -30,8 +30,11 @@ def test_virtual():
assert vd.get_int() == VDERIVED_GET_INT_RESULT
m.pass_shared_vderived(vd)
m.pass_shared_vbase(vd)
vb = m.make_shared_vderived_up_cast()
assert vb.get_int() == VDERIVED_GET_INT_RESULT
m.pass_shared_vbase(vb)
m.pass_shared_vderived(vb)
vd_uc = m.make_shared_vderived_up_cast()
assert vd_uc.get_int() == VDERIVED_GET_INT_RESULT
assert isinstance(vd_uc, m.vderived) # pybind11 un-did upcast.
m.pass_shared_vbase(vd_uc) # HOW DOES THIS UPCAST HAPPEN?
m.pass_shared_vderived(vd_uc)
with pytest.raises(TypeError):
m.pass_shared_vrederived(vd_uc)
m.to_cout("")
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment