Skip to content

Commit 7cc1e1f

Browse files
committed
Roundtrip through unique pointer with custom deleter.
Currently failing.
1 parent edfaaed commit 7cc1e1f

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

tests/test_class_sh_basic.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,23 @@ std::unique_ptr<atyp const, sddc> rtrn_udcp() { return std::unique_ptr<atyp cons
6464
std::string pass_udmp(std::unique_ptr<atyp, sddm> obj) { return "pass_udmp:" + obj->mtxt; }
6565
std::string pass_udcp(std::unique_ptr<atyp const, sddc> obj) { return "pass_udcp:" + obj->mtxt; }
6666

67+
68+
struct custom_deleter
69+
{
70+
std::string delete_txt;
71+
void operator()(atyp* p) const
72+
{
73+
std::default_delete<atyp>()(p);
74+
}
75+
};
76+
77+
std::unique_ptr<atyp, custom_deleter> rtrn_udmp_del() { return std::unique_ptr<atyp, custom_deleter>(new atyp{"rtrn_udmp_del"}, custom_deleter{"udmp_deleter"}); }
78+
79+
std::string pass_udmp_del(std::unique_ptr<atyp, custom_deleter> obj) {
80+
const auto d = obj.get_deleter();
81+
return "pass_udmp_del:" + obj->mtxt + "," + d.delete_txt;
82+
}
83+
6784
// clang-format on
6885

6986
// Helpers for testing.
@@ -130,6 +147,9 @@ TEST_SUBMODULE(class_sh_basic, m) {
130147
m.def("pass_udmp", pass_udmp);
131148
m.def("pass_udcp", pass_udcp);
132149

150+
m.def("rtrn_udmp_del", rtrn_udmp_del);
151+
m.def("pass_udmp_del", pass_udmp_del);
152+
133153
py::classh<uconsumer>(m, "uconsumer")
134154
.def(py::init<>())
135155
.def("valid", &uconsumer::valid)

tests/test_class_sh_basic.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ def test_load_with_mtxt(pass_f, mtxt, expected):
6464
def test_load_with_rtrn_f(pass_f, rtrn_f, expected):
6565
assert pass_f(rtrn_f()) == expected
6666

67+
def test_deleter_roundtrip():
68+
t = m.rtrn_udmp_del()
69+
r = m.pass_udmp_del(t)
70+
assert r == "pass_udmp_del:rtrn_udmp_del,udmp_deleter"
6771

6872
@pytest.mark.parametrize(
6973
("pass_f", "rtrn_f", "expected"),

0 commit comments

Comments
 (0)