Skip to content

Commit 248ac89

Browse files
committed
All tests pass when using m.make_derived_as_base0_raw_ptr(), with USE_SH defined or not defined. [ci skip]
1 parent b7cca96 commit 248ac89

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

tests/test_mi_debug.cpp

+28-1
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,21 @@ namespace test_mi_debug {
1616

1717
struct Base0 {
1818
virtual ~Base0() = default;
19+
Base0() = default;
20+
Base0(const Base0 &) = delete;
1921
};
2022

2123
struct Base1 {
2224
virtual ~Base1() = default;
2325
std::vector<int> vec = {1, 2, 3, 4, 5};
26+
Base1() = default;
27+
Base1(const Base1 &) = delete;
2428
};
2529

2630
struct Derived : Base1, Base0 {
2731
~Derived() override = default;
32+
Derived() = default;
33+
Derived(const Derived &) = delete;
2834
};
2935

3036
} // namespace test_mi_debug
@@ -50,10 +56,27 @@ TEST_SUBMODULE(mi_debug, m) {
5056

5157
m.def("make_derived_as_base0", []() -> std::shared_ptr<Base0> {
5258
auto ret_der = std::make_shared<Derived>();
59+
printf("\nLOOOK [%lu] %s:%d\n", (std::size_t) ret_der.get(), __FILE__, __LINE__);
60+
fflush(stdout);
5361
auto ret = std::dynamic_pointer_cast<Base0>(ret_der);
62+
printf("\nLOOOK [%lu] %s:%d\n", (std::size_t) ret.get(), __FILE__, __LINE__);
63+
fflush(stdout);
5464
return ret;
5565
});
5666

67+
m.def(
68+
"make_derived_as_base0_raw_ptr",
69+
[]() {
70+
auto ret_der = new Derived{};
71+
printf("\nLOOOK [%lu] %s:%d\n", (std::size_t) ret_der, __FILE__, __LINE__);
72+
fflush(stdout);
73+
auto ret = dynamic_cast<Base0 *>(ret_der);
74+
printf("\nLOOOK [%lu] %s:%d\n", (std::size_t) ret, __FILE__, __LINE__);
75+
fflush(stdout);
76+
return ret;
77+
},
78+
py::return_value_policy::take_ownership);
79+
5780
// class_ OK
5881
// classh FAIL
5982
m.def("get_vec_size_raw_ptr_base0", [](const Base0 *obj) -> std::size_t {
@@ -66,7 +89,11 @@ TEST_SUBMODULE(mi_debug, m) {
6689

6790
// class_ OK
6891
// classh FAIL
69-
m.def("get_vec_size_raw_ptr_derived", [](const Derived *obj) { return obj->vec.size(); });
92+
m.def("get_vec_size_raw_ptr_derived", [](const Derived *obj) {
93+
printf("\nLOOOK [%lu] %s:%d\n", (std::size_t) obj, __FILE__, __LINE__);
94+
fflush(stdout);
95+
return obj->vec.size();
96+
});
7097

7198
// class_ OK
7299
// classh FAIL

tests/test_mi_debug.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33

44
def test_get_vec_size_raw_ptr_base0():
5-
obj = m.make_derived_as_base0()
5+
obj = m.make_derived_as_base0_raw_ptr()
66
assert m.get_vec_size_raw_ptr_base0(obj) == 5
77

88

99
def test_get_vec_size_raw_ptr_derived():
10-
obj = m.make_derived_as_base0()
10+
obj = m.make_derived_as_base0_raw_ptr()
1111
assert m.get_vec_size_raw_ptr_derived(obj) == 5
1212

1313

1414
def test_get_vec_size_shared_ptr_derived():
15-
obj = m.make_derived_as_base0()
15+
obj = m.make_derived_as_base0_raw_ptr()
1616
assert m.get_vec_size_shared_ptr_derived(obj) == 5

0 commit comments

Comments
 (0)