From a21e76cb0b0194808af78d103c2ea734cb78b2ab Mon Sep 17 00:00:00 2001 From: Rosdf Date: Sat, 14 Jun 2025 10:41:58 +0400 Subject: [PATCH] better test for const only smart ptr --- tests/test_smart_ptr.cpp | 23 ++++++++++++++++++----- tests/test_smart_ptr.py | 8 +++----- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/tests/test_smart_ptr.cpp b/tests/test_smart_ptr.cpp index 7d009c9a84..5fdd69db38 100644 --- a/tests/test_smart_ptr.cpp +++ b/tests/test_smart_ptr.cpp @@ -193,6 +193,20 @@ class MyObject5 { // managed by huge_unique_ptr int value; }; +// test const_only_shared_ptr +class MyObject6 { +public: + static const_only_shared_ptr createObject(std::string value) { + return const_only_shared_ptr(new MyObject6(std::move(value))); + } + + const std::string &value() const { return value_; } + +private: + explicit MyObject6(std::string &&value) : value_{std::move(value)} {} + std::string value_; +}; + // test_shared_ptr_and_references struct SharedPtrRef { struct A { @@ -412,11 +426,6 @@ TEST_SUBMODULE(smart_ptr, m) { m.def("print_myobject2_4", [](const std::shared_ptr *obj) { py::print((*obj)->toString()); }); - m.def("make_myobject2_3", - [](int val) { return const_only_shared_ptr(new MyObject2(val)); }); - m.def("print_myobject2_5", - [](const const_only_shared_ptr &obj) { py::print(obj.get()->toString()); }); - py::class_>(m, "MyObject3").def(py::init()); m.def("make_myobject3_1", []() { return new MyObject3(8); }); m.def("make_myobject3_2", []() { return std::make_shared(9); }); @@ -459,6 +468,10 @@ TEST_SUBMODULE(smart_ptr, m) { .def(py::init()) .def_readwrite("value", &MyObject5::value); + py::class_>(m, "MyObject6") + .def(py::init([](const std::string &value) { return MyObject6::createObject(value); })) + .def_property_readonly("value", &MyObject6::value); + // test_shared_ptr_and_references using A = SharedPtrRef::A; py::class_>(m, "A"); diff --git a/tests/test_smart_ptr.py b/tests/test_smart_ptr.py index e1d51ca06c..2d48aac78d 100644 --- a/tests/test_smart_ptr.py +++ b/tests/test_smart_ptr.py @@ -352,8 +352,6 @@ def test_move_only_holder_caster_shared_ptr_with_smart_holder_support_enabled(): ) -def test_const_only_holder(capture): - o = m.make_myobject2_3(4) - with capture: - m.print_myobject2_5(o) - assert capture == "MyObject2[4]\n" +def test_const_only_holder(): + o = m.MyObject6("my_data") + assert o.value == "my_data"