diff --git a/tests/test_variant_unique_shared.cpp b/tests/test_variant_unique_shared.cpp index 40f3fa928..9f083dafb 100644 --- a/tests/test_variant_unique_shared.cpp +++ b/tests/test_variant_unique_shared.cpp @@ -40,8 +40,13 @@ TEST_SUBMODULE(variant_unique_shared, m) { v.get_unique(); return; }) - .def("get_shared", [](vptr &v) { - v.get_shared(); + .def("get_shared", + [](vptr &v) { + v.get_shared(); + return; + }) + .def("disown_unique", [](vptr &v) { + v.get_unique().reset(); return; }); } diff --git a/tests/test_variant_unique_shared.py b/tests/test_variant_unique_shared.py index 7f5733be6..2ef0e40a7 100644 --- a/tests/test_variant_unique_shared.py +++ b/tests/test_variant_unique_shared.py @@ -48,3 +48,14 @@ def test_shared_from_birth(): v.get_unique() assert str(exc_info.value) == "get_unique failure." v.get_shared() # Still works. + + +def test_promotion_of_disowned_to_shared(): + v = m.from_unique() + assert v.get_value() == 5 + v.disown_unique() + assert v.ownership_type() == 0 + assert v.get_value() == -1 + v.get_shared() # Promotion of disowned to shared_ptr. + assert v.ownership_type() == 1 + assert v.get_value() == -1