Skip to content

Commit f35e1a3

Browse files
committed
Increase coverage of owner move assignment operator
1 parent 83567c0 commit f35e1a3

File tree

1 file changed

+198
-6
lines changed

1 file changed

+198
-6
lines changed

tests/runtime_tests.cpp

Lines changed: 198 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
557749
TEST_CASE("owner comparison valid ptr vs nullptr", "[owner_comparison]") {
558750
memory_tracker mem_track;
559751

0 commit comments

Comments
 (0)