Skip to content

Commit ad7eaa4

Browse files
committed
Add deleter roundtrip for const atyp.
Currently failing, custom deleter is lost.
1 parent 5b00921 commit ad7eaa4

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

tests/test_class_sh_basic.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,17 @@ struct custom_deleter
7272
{
7373
std::default_delete<atyp>()(p);
7474
}
75+
void operator()(const atyp* p) const
76+
{
77+
std::default_delete<const atyp>()(p);
78+
}
7579
};
7680

7781
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"}); }
82+
std::unique_ptr<atyp const, custom_deleter> rtrn_udcp_del() { return std::unique_ptr<atyp const, custom_deleter>(new atyp{"rtrn_udcp_del"}, custom_deleter{"udcp_deleter"}); }
7883

7984
std::string pass_udmp_del(std::unique_ptr<atyp, custom_deleter> obj) { return "pass_udmp_del:" + obj->mtxt + "," + obj.get_deleter().delete_txt; }
85+
std::string pass_udcp_del(std::unique_ptr<atyp const, custom_deleter> obj) { return "pass_udcp_del:" + obj->mtxt + "," + obj.get_deleter().delete_txt; }
8086

8187
// clang-format on
8288

@@ -145,7 +151,10 @@ TEST_SUBMODULE(class_sh_basic, m) {
145151
m.def("pass_udcp", pass_udcp);
146152

147153
m.def("rtrn_udmp_del", rtrn_udmp_del);
154+
m.def("rtrn_udcp_del", rtrn_udcp_del);
155+
148156
m.def("pass_udmp_del", pass_udmp_del);
157+
m.def("pass_udcp_del", pass_udcp_del);
149158

150159
py::classh<uconsumer>(m, "uconsumer")
151160
.def(py::init<>())

tests/test_class_sh_basic.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,15 @@ 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"
67+
@pytest.mark.parametrize(
68+
("pass_f", "rtrn_f", "expected"),
69+
[
70+
(m.pass_udmp_del, m.rtrn_udmp_del, "pass_udmp_del:rtrn_udmp_del,udmp_deleter"),
71+
(m.pass_udcp_del, m.rtrn_udcp_del, "pass_udcp_del:rtrn_udcp_del,udcp_deleter"),
72+
],
73+
)
74+
def test_deleter_roundtrip(pass_f, rtrn_f, expected):
75+
assert pass_f(rtrn_f()) == expected
7176

7277
@pytest.mark.parametrize(
7378
("pass_f", "rtrn_f", "expected"),

0 commit comments

Comments
 (0)