Skip to content

Commit

Permalink
unique_ptr: Confirm RobotLocomotion/drake#8160
Browse files Browse the repository at this point in the history
  • Loading branch information
EricCousineau-TRI committed Apr 23, 2018
1 parent af34dd5 commit d16342c
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
22 changes: 22 additions & 0 deletions tests/test_smart_ptr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -404,4 +404,26 @@ TEST_SUBMODULE(smart_ptr, m) {
py::class_<UniquePtrDerived, UniquePtrHeld>(m, "UniquePtrDerived")
.def(py::init<int, std::string>())
.def("name", &UniquePtrDerived::name);

class FirstT {};
py::class_<FirstT>(m, "FirstT")
.def(py::init());
class SecondT {};
py::class_<SecondT>(m, "SecondT")
.def(py::init());

m.def("unique_ptr_overload",
[](std::unique_ptr<UniquePtrHeld> obj, FirstT) {
py::dict out;
out["obj"] = py::cast(std::move(obj));
out["overload"] = 1;
return out;
});
m.def("unique_ptr_overload",
[](std::unique_ptr<UniquePtrHeld> obj, SecondT) {
py::dict out;
out["obj"] = py::cast(std::move(obj));
out["overload"] = 2;
return out;
});
}
11 changes: 11 additions & 0 deletions tests/test_smart_ptr.py
Original file line number Diff line number Diff line change
Expand Up @@ -328,3 +328,14 @@ def test_unique_ptr_derived():
assert obj.value() == 1
assert obj.name() == "a"
del obj


def test_unique_ptr_overload_fail():
obj = m.UniquePtrHeld(1)
# These overloads pass ownership back to Python.
out = m.unique_ptr_overload(obj, m.FirstT())
assert out["obj"] is obj
assert out["overload"] == 1
out = m.unique_ptr_overload(obj, m.SecondT())
assert out["obj"] is obj
assert out["overload"] == 2

0 comments on commit d16342c

Please sign in to comment.