Skip to content

Commit 51dd458

Browse files
committed
Initial test
1 parent 8f6ca71 commit 51dd458

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

tests/test_smart_ptr.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,16 @@ class MyObject3 : public std::enable_shared_from_this<MyObject3> {
9898
int value;
9999
};
100100

101+
// an uncopyable object managed by a std::shared_ptr<>
102+
class MyObject3a {
103+
public:
104+
MyObject3a(int value) : value(value) { print_created(this, toString()); }
105+
std::string toString() const { return "MyObject3a[" + std::to_string(value) + "]"; }
106+
virtual ~MyObject3a() { print_destroyed(this); }
107+
private:
108+
int value;
109+
};
110+
101111
// test_unique_nodelete
102112
// Object with a private destructor
103113
class MyObject4;
@@ -353,6 +363,15 @@ TEST_SUBMODULE(smart_ptr, m) {
353363
m.def("print_myobject3_3", [](const std::shared_ptr<MyObject3> &obj) { py::print(obj->toString()); });
354364
m.def("print_myobject3_4", [](const std::shared_ptr<MyObject3> *obj) { py::print((*obj)->toString()); });
355365

366+
py::class_<MyObject3a>(m, "MyObject3a");
367+
m.def("make_myobject3_1", []() { return new MyObject3a(8); });
368+
m.def("make_myobject3_2", []() { return std::make_shared<MyObject3a>(9); });
369+
m.def("print_myobject3a_1", [](const MyObject3a *obj) { py::print(obj->toString()); });
370+
m.def("print_myobject3a_2", [](std::shared_ptr<MyObject3a> obj) { py::print(obj->toString()); });
371+
m.def("print_myobject3a_3", [](const std::shared_ptr<MyObject3a> &obj) { py::print(obj->toString()); });
372+
// this doesn't compile, should it?
373+
//m.def("print_myobject3a_4", [](const std::shared_ptr<MyObject3a> *obj) { py::print((*obj)->toString()); });
374+
356375
// test_smart_ptr_refcounting
357376
m.def("test_object1_refcounting", []() {
358377
ref<MyObject1> o = new MyObject1(0);
@@ -462,4 +481,10 @@ TEST_SUBMODULE(smart_ptr, m) {
462481
list.append(py::cast(e));
463482
return list;
464483
});
484+
485+
m.def("test_3011_shared_ptr", []() {
486+
auto o = std::make_shared<MyObject3a>(42);
487+
auto l = py::list();
488+
l.append(o);
489+
});
465490
}

tests/test_smart_ptr.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,3 +316,7 @@ def test_shared_ptr_gc():
316316
pytest.gc_collect()
317317
for i, v in enumerate(el.get()):
318318
assert i == v.value()
319+
320+
321+
def test_3011_shared_ptr():
322+
m.test_3011_shared_ptr()

0 commit comments

Comments
 (0)