@@ -110,7 +110,7 @@ TEST_CASE("owner default constructor", "[owner_construction]") {
110110 memory_tracker mem_track;
111111
112112 {
113- test_ptr ptr{} ;
113+ test_ptr ptr;
114114 REQUIRE (instances == 0 );
115115 REQUIRE (ptr.get () == nullptr );
116116 }
@@ -124,7 +124,7 @@ TEST_CASE("owner default constructor sealed", "[owner_construction]") {
124124 memory_tracker mem_track;
125125
126126 {
127- test_sptr ptr{} ;
127+ test_sptr ptr;
128128 REQUIRE (instances == 0 );
129129 REQUIRE (ptr.get () == nullptr );
130130 }
@@ -138,7 +138,7 @@ TEST_CASE("owner default constructor with deleter", "[owner_construction]") {
138138 memory_tracker mem_track;
139139
140140 {
141- test_ptr_with_deleter ptr{} ;
141+ test_ptr_with_deleter ptr;
142142 REQUIRE (instances == 0 );
143143 REQUIRE (instances_deleter == 1 );
144144 REQUIRE (ptr.get () == nullptr );
@@ -490,7 +490,7 @@ TEST_CASE("owner explicit conversion constructor with custom deleter", "[owner_c
490490 REQUIRE (mem_track.double_del () == 0u );
491491}
492492
493- TEST_CASE (" owner move assignment operator" , " [owner_assignment]" ) {
493+ TEST_CASE (" owner move assignment operator valid to empty " , " [owner_assignment]" ) {
494494 memory_tracker mem_track;
495495
496496 {
@@ -510,7 +510,7 @@ TEST_CASE("owner move assignment operator", "[owner_assignment]") {
510510 REQUIRE (mem_track.double_del () == 0u );
511511}
512512
513- TEST_CASE (" owner move assignment operator sealed" , " [owner_assignment]" ) {
513+ TEST_CASE (" owner move assignment operator valid to empty sealed" , " [owner_assignment]" ) {
514514 memory_tracker mem_track;
515515
516516 {
@@ -530,7 +530,7 @@ TEST_CASE("owner move assignment operator sealed", "[owner_assignment]") {
530530 REQUIRE (mem_track.double_del () == 0u );
531531}
532532
533- TEST_CASE (" owner move assignment operator with deleter" , " [owner_assignment]" ) {
533+ TEST_CASE (" owner move assignment operator valid to empty with deleter" , " [owner_assignment]" ) {
534534 memory_tracker mem_track;
535535
536536 {
@@ -554,6 +554,198 @@ TEST_CASE("owner move assignment operator with deleter", "[owner_assignment]") {
554554 REQUIRE (mem_track.double_del () == 0u );
555555}
556556
557+ TEST_CASE (" owner move assignment operator empty to valid" , " [owner_assignment]" ) {
558+ memory_tracker mem_track;
559+
560+ {
561+ test_ptr ptr_orig;
562+ {
563+ test_ptr ptr (new test_object);
564+ ptr = std::move (ptr_orig);
565+ REQUIRE (instances == 0 );
566+ REQUIRE (ptr.get () == nullptr );
567+ }
568+
569+ REQUIRE (instances == 0 );
570+ }
571+
572+ REQUIRE (instances == 0 );
573+ REQUIRE (mem_track.leaks () == 0u );
574+ REQUIRE (mem_track.double_del () == 0u );
575+ }
576+
577+ TEST_CASE (" owner move assignment operator empty to valid sealed" , " [owner_assignment]" ) {
578+ memory_tracker mem_track;
579+
580+ {
581+ test_sptr ptr_orig;
582+ {
583+ test_sptr ptr = oup::make_observable_sealed<test_object>();
584+ ptr = std::move (ptr_orig);
585+ REQUIRE (instances == 0 );
586+ REQUIRE (ptr.get () == nullptr );
587+ }
588+
589+ REQUIRE (instances == 0 );
590+ }
591+
592+ REQUIRE (instances == 0 );
593+ REQUIRE (mem_track.leaks () == 0u );
594+ REQUIRE (mem_track.double_del () == 0u );
595+ }
596+
597+ TEST_CASE (" owner move assignment operator empty to valid with deleter" , " [owner_assignment]" ) {
598+ memory_tracker mem_track;
599+
600+ {
601+ test_ptr_with_deleter ptr_orig;
602+ {
603+ test_ptr_with_deleter ptr (new test_object, test_deleter{42 });
604+ ptr = std::move (ptr_orig);
605+ REQUIRE (instances == 0 );
606+ REQUIRE (instances_deleter == 2 );
607+ REQUIRE (ptr.get () == nullptr );
608+ REQUIRE (ptr.get_deleter ().state_ == 0 );
609+ }
610+
611+ REQUIRE (instances == 0 );
612+ REQUIRE (instances_deleter == 1 );
613+ }
614+
615+ REQUIRE (instances == 0 );
616+ REQUIRE (instances_deleter == 0 );
617+ REQUIRE (mem_track.leaks () == 0u );
618+ REQUIRE (mem_track.double_del () == 0u );
619+ }
620+
621+ TEST_CASE (" owner move assignment operator empty to empty" , " [owner_assignment]" ) {
622+ memory_tracker mem_track;
623+
624+ {
625+ test_ptr ptr_orig;
626+ {
627+ test_ptr ptr;
628+ ptr = std::move (ptr_orig);
629+ REQUIRE (instances == 0 );
630+ REQUIRE (ptr.get () == nullptr );
631+ }
632+
633+ REQUIRE (instances == 0 );
634+ }
635+
636+ REQUIRE (instances == 0 );
637+ REQUIRE (mem_track.leaks () == 0u );
638+ REQUIRE (mem_track.double_del () == 0u );
639+ }
640+
641+ TEST_CASE (" owner move assignment operator empty to empty sealed" , " [owner_assignment]" ) {
642+ memory_tracker mem_track;
643+
644+ {
645+ test_sptr ptr_orig;
646+ {
647+ test_sptr ptr;
648+ ptr = std::move (ptr_orig);
649+ REQUIRE (instances == 0 );
650+ REQUIRE (ptr.get () == nullptr );
651+ }
652+
653+ REQUIRE (instances == 0 );
654+ }
655+
656+ REQUIRE (instances == 0 );
657+ REQUIRE (mem_track.leaks () == 0u );
658+ REQUIRE (mem_track.double_del () == 0u );
659+ }
660+
661+ TEST_CASE (" owner move assignment operator empty to empty with deleter" , " [owner_assignment]" ) {
662+ memory_tracker mem_track;
663+
664+ {
665+ test_ptr_with_deleter ptr_orig;
666+ {
667+ test_ptr_with_deleter ptr;
668+ ptr = std::move (ptr_orig);
669+ REQUIRE (instances == 0 );
670+ REQUIRE (instances_deleter == 2 );
671+ REQUIRE (ptr.get () == nullptr );
672+ REQUIRE (ptr.get_deleter ().state_ == 0 );
673+ }
674+
675+ REQUIRE (instances == 0 );
676+ REQUIRE (instances_deleter == 1 );
677+ }
678+
679+ REQUIRE (instances == 0 );
680+ REQUIRE (instances_deleter == 0 );
681+ REQUIRE (mem_track.leaks () == 0u );
682+ REQUIRE (mem_track.double_del () == 0u );
683+ }
684+
685+ TEST_CASE (" owner move assignment operator valid to valid" , " [owner_assignment]" ) {
686+ memory_tracker mem_track;
687+
688+ {
689+ test_ptr ptr_orig (new test_object);
690+ {
691+ test_ptr ptr (new test_object);
692+ ptr = std::move (ptr_orig);
693+ REQUIRE (instances == 1 );
694+ REQUIRE (ptr.get () != nullptr );
695+ }
696+
697+ REQUIRE (instances == 0 );
698+ }
699+
700+ REQUIRE (instances == 0 );
701+ REQUIRE (mem_track.leaks () == 0u );
702+ REQUIRE (mem_track.double_del () == 0u );
703+ }
704+
705+ TEST_CASE (" owner move assignment operator valid to valid sealed" , " [owner_assignment]" ) {
706+ memory_tracker mem_track;
707+
708+ {
709+ test_sptr ptr_orig = oup::make_observable_sealed<test_object>();
710+ {
711+ test_sptr ptr = oup::make_observable_sealed<test_object>();
712+ ptr = std::move (ptr_orig);
713+ REQUIRE (instances == 1 );
714+ REQUIRE (ptr.get () != nullptr );
715+ }
716+
717+ REQUIRE (instances == 0 );
718+ }
719+
720+ REQUIRE (instances == 0 );
721+ REQUIRE (mem_track.leaks () == 0u );
722+ REQUIRE (mem_track.double_del () == 0u );
723+ }
724+
725+ TEST_CASE (" owner move assignment operator valid to valid with deleter" , " [owner_assignment]" ) {
726+ memory_tracker mem_track;
727+
728+ {
729+ test_ptr_with_deleter ptr_orig (new test_object, test_deleter{42 });
730+ {
731+ test_ptr_with_deleter ptr (new test_object, test_deleter{43 });
732+ ptr = std::move (ptr_orig);
733+ REQUIRE (instances == 1 );
734+ REQUIRE (instances_deleter == 2 );
735+ REQUIRE (ptr.get () != nullptr );
736+ REQUIRE (ptr.get_deleter ().state_ == 42 );
737+ }
738+
739+ REQUIRE (instances == 0 );
740+ REQUIRE (instances_deleter == 1 );
741+ }
742+
743+ REQUIRE (instances == 0 );
744+ REQUIRE (instances_deleter == 0 );
745+ REQUIRE (mem_track.leaks () == 0u );
746+ REQUIRE (mem_track.double_del () == 0u );
747+ }
748+
557749TEST_CASE (" owner comparison valid ptr vs nullptr" , " [owner_comparison]" ) {
558750 memory_tracker mem_track;
559751
0 commit comments