Skip to content

Commit 13105d5

Browse files
committed
fix(smart_holder): Custom deleter in unit tests traces constructions.
1 parent f2f87f0 commit 13105d5

File tree

2 files changed

+32
-19
lines changed

2 files changed

+32
-19
lines changed

tests/test_class_sh_basic.cpp

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,34 @@ struct uconsumer { // unique_ptr consumer
2828
const std::unique_ptr<atyp> &rtrn_cref() const { return held; }
2929
};
3030

31+
struct custom_deleter {
32+
std::string trace_txt;
33+
34+
custom_deleter() = delete;
35+
explicit custom_deleter(const std::string &trace_txt_) : trace_txt(trace_txt_) {}
36+
37+
custom_deleter(const custom_deleter &other) { trace_txt = other.trace_txt + "_CpCtor"; }
38+
39+
custom_deleter &operator=(const custom_deleter &rhs) {
40+
trace_txt = rhs.trace_txt + "_CpLhs";
41+
return *this;
42+
}
43+
44+
custom_deleter(custom_deleter &&other) {
45+
trace_txt = other.trace_txt + "_MvCtorTo";
46+
other.trace_txt += "_MvCtorFrom";
47+
}
48+
49+
custom_deleter &operator=(custom_deleter &&rhs) {
50+
trace_txt = rhs.trace_txt + "_MvLhs";
51+
rhs.trace_txt += "_MvRhs";
52+
return *this;
53+
}
54+
55+
void operator()(atyp *p) const { std::default_delete<atyp>()(p); }
56+
void operator()(const atyp *p) const { std::default_delete<const atyp>()(p); }
57+
};
58+
3159
// clang-format off
3260

3361
atyp rtrn_valu() { atyp obj{"rtrn_valu"}; return obj; }
@@ -65,26 +93,11 @@ std::string pass_udmp(std::unique_ptr<atyp, sddm> obj) { return "pass_udmp
6593
std::string pass_udcp(std::unique_ptr<atyp const, sddc> obj) { return "pass_udcp:" + obj->mtxt; }
6694

6795

68-
struct custom_deleter
69-
{
70-
std::string delete_txt;
71-
custom_deleter() = delete;
72-
explicit custom_deleter(const std::string &delete_txt_) : delete_txt(delete_txt_) {}
73-
void operator()(atyp* p) const
74-
{
75-
std::default_delete<atyp>()(p);
76-
}
77-
void operator()(const atyp* p) const
78-
{
79-
std::default_delete<const atyp>()(p);
80-
}
81-
};
82-
8396
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"}); }
8497
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"}); }
8598

86-
std::string pass_udmp_del(std::unique_ptr<atyp, custom_deleter> obj) { return "pass_udmp_del:" + obj->mtxt + "," + obj.get_deleter().delete_txt; }
87-
std::string pass_udcp_del(std::unique_ptr<atyp const, custom_deleter> obj) { return "pass_udcp_del:" + obj->mtxt + "," + obj.get_deleter().delete_txt; }
99+
std::string pass_udmp_del(std::unique_ptr<atyp, custom_deleter> obj) { return "pass_udmp_del:" + obj->mtxt + "," + obj.get_deleter().trace_txt; }
100+
std::string pass_udcp_del(std::unique_ptr<atyp const, custom_deleter> obj) { return "pass_udcp_del:" + obj->mtxt + "," + obj.get_deleter().trace_txt; }
88101

89102
// clang-format on
90103

tests/test_class_sh_basic.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ def test_load_with_rtrn_f(pass_f, rtrn_f, expected):
6868
@pytest.mark.parametrize(
6969
("pass_f", "rtrn_f", "expected"),
7070
[
71-
(m.pass_udmp_del, m.rtrn_udmp_del, "pass_udmp_del:rtrn_udmp_del,udmp_deleter"),
72-
(m.pass_udcp_del, m.rtrn_udcp_del, "pass_udcp_del:rtrn_udcp_del,udcp_deleter"),
71+
(m.pass_udmp_del, m.rtrn_udmp_del, "pass_udmp_del:rtrn_udmp_del,udmp_deleter_MvCtorTo_MvCtorTo_MvCtorTo_MvCtorTo_MvCtorTo_MvCtorTo"),
72+
(m.pass_udcp_del, m.rtrn_udcp_del, "pass_udcp_del:rtrn_udcp_del,udcp_deleter_MvCtorTo_MvCtorTo_MvCtorTo_MvCtorTo_MvCtorTo_MvCtorTo_MvCtorTo_MvCtorTo"),
7373
],
7474
)
7575
def test_deleter_roundtrip(pass_f, rtrn_f, expected):

0 commit comments

Comments
 (0)