@@ -1387,6 +1387,52 @@ TEST_CASE("owner swap two instances with deleter", "[owner_utility]") {
13871387 REQUIRE (mem_track.double_del () == 0u );
13881388}
13891389
1390+ TEST_CASE (" owner swap self" , " [owner_utility]" ) {
1391+ memory_tracker mem_track;
1392+
1393+ {
1394+ test_ptr ptr (new test_object);
1395+ ptr.swap (ptr);
1396+ REQUIRE (instances == 1 );
1397+ REQUIRE (ptr.get () != nullptr );
1398+ }
1399+
1400+ REQUIRE (instances == 0 );
1401+ REQUIRE (mem_track.leaks () == 0u );
1402+ REQUIRE (mem_track.double_del () == 0u );
1403+ }
1404+
1405+ TEST_CASE (" owner swap self sealed" , " [owner_utility]" ) {
1406+ memory_tracker mem_track;
1407+
1408+ {
1409+ test_sptr ptr = oup::make_observable_sealed<test_object>();
1410+ ptr.swap (ptr);
1411+ REQUIRE (instances == 1 );
1412+ REQUIRE (ptr.get () != nullptr );
1413+ }
1414+
1415+ REQUIRE (instances == 0 );
1416+ REQUIRE (mem_track.leaks () == 0u );
1417+ REQUIRE (mem_track.double_del () == 0u );
1418+ }
1419+
1420+ TEST_CASE (" owner swap self with deleter" , " [owner_utility]" ) {
1421+ memory_tracker mem_track;
1422+
1423+ {
1424+ test_ptr_with_deleter ptr (new test_object, test_deleter{43 });
1425+ ptr.swap (ptr);
1426+ REQUIRE (instances == 1 );
1427+ REQUIRE (ptr.get () != nullptr );
1428+ }
1429+
1430+ REQUIRE (instances == 0 );
1431+ REQUIRE (instances_deleter == 0 );
1432+ REQUIRE (mem_track.leaks () == 0u );
1433+ REQUIRE (mem_track.double_del () == 0u );
1434+ }
1435+
13901436TEST_CASE (" owner dereference" , " [owner_utility]" ) {
13911437 memory_tracker mem_track;
13921438
@@ -2082,6 +2128,23 @@ TEST_CASE("observer swap two different instances", "[observer_utility]") {
20822128 REQUIRE (mem_track.double_del () == 0u );
20832129}
20842130
2131+ TEST_CASE (" observer swap self" , " [observer_utility]" ) {
2132+ memory_tracker mem_track;
2133+
2134+ {
2135+ test_ptr ptr_owner (new test_object);
2136+ test_optr ptr (ptr_owner);
2137+ ptr.swap (ptr);
2138+ REQUIRE (instances == 1 );
2139+ REQUIRE (ptr.get () == ptr_owner.get ());
2140+ REQUIRE (ptr.expired () == false );
2141+ }
2142+
2143+ REQUIRE (instances == 0 );
2144+ REQUIRE (mem_track.leaks () == 0u );
2145+ REQUIRE (mem_track.double_del () == 0u );
2146+ }
2147+
20852148TEST_CASE (" observer dereference" , " [observer_utility]" ) {
20862149 memory_tracker mem_track;
20872150
0 commit comments