Skip to content

Commit 2cff6b7

Browse files
committed
Enhance release test with and without observer
1 parent 63a4b3a commit 2cff6b7

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

tests/runtime_tests.cpp

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -818,6 +818,23 @@ TEST_CASE("owner operator bool invalid", "[owner_utility]") {
818818
TEST_CASE("owner release valid", "[owner_utility]") {
819819
memory_tracker mem_track;
820820

821+
{
822+
test_ptr ptr(new test_object);
823+
test_object* ptr_raw = ptr.release();
824+
REQUIRE(ptr_raw != nullptr);
825+
REQUIRE(ptr.get() == nullptr);
826+
REQUIRE(instances == 1);
827+
delete ptr_raw;
828+
}
829+
830+
REQUIRE(instances == 0);
831+
REQUIRE(mem_track.leaks() == 0u);
832+
REQUIRE(mem_track.double_del() == 0u);
833+
}
834+
835+
TEST_CASE("owner release valid with observer", "[owner_utility]") {
836+
memory_tracker mem_track;
837+
821838
{
822839
test_optr optr;
823840
{
@@ -841,6 +858,23 @@ TEST_CASE("owner release valid", "[owner_utility]") {
841858
TEST_CASE("owner release valid from make_observable_unique", "[owner_utility]") {
842859
memory_tracker mem_track;
843860

861+
{
862+
test_ptr ptr = oup::make_observable_unique<test_object>();
863+
test_object* ptr_raw = ptr.release();
864+
REQUIRE(ptr_raw != nullptr);
865+
REQUIRE(ptr.get() == nullptr);
866+
REQUIRE(instances == 1);
867+
delete ptr_raw;
868+
}
869+
870+
REQUIRE(instances == 0);
871+
REQUIRE(mem_track.leaks() == 0u);
872+
REQUIRE(mem_track.double_del() == 0u);
873+
}
874+
875+
TEST_CASE("owner release valid from make_observable_unique with obsever", "[owner_utility]") {
876+
memory_tracker mem_track;
877+
844878
{
845879
test_optr optr;
846880
{
@@ -864,10 +898,31 @@ TEST_CASE("owner release valid from make_observable_unique", "[owner_utility]")
864898
TEST_CASE("owner release valid with deleter", "[owner_utility]") {
865899
memory_tracker mem_track;
866900

901+
{
902+
test_ptr_with_deleter ptr(new test_object, test_deleter{42});
903+
test_object* ptr_raw = ptr.release();
904+
REQUIRE(ptr_raw != nullptr);
905+
REQUIRE(ptr.get() == nullptr);
906+
REQUIRE(instances == 1);
907+
REQUIRE(instances_deleter == 1);
908+
REQUIRE(ptr.get_deleter().state_ == 42);
909+
delete ptr_raw;
910+
}
911+
912+
REQUIRE(instances == 0);
913+
REQUIRE(instances_deleter == 0);
914+
REQUIRE(mem_track.leaks() == 0u);
915+
REQUIRE(mem_track.double_del() == 0u);
916+
}
917+
918+
TEST_CASE("owner release valid with deleter with observer", "[owner_utility]") {
919+
memory_tracker mem_track;
920+
867921
{
868922
test_optr optr;
869923
{
870924
test_ptr_with_deleter ptr(new test_object, test_deleter{42});
925+
optr = ptr;
871926
test_object* ptr_raw = ptr.release();
872927
REQUIRE(ptr_raw != nullptr);
873928
REQUIRE(ptr.get() == nullptr);
@@ -1010,6 +1065,8 @@ TEST_CASE("observer move constructor", "[observer_construction]") {
10101065
REQUIRE(instances == 1);
10111066
REQUIRE(ptr.get() != nullptr);
10121067
REQUIRE(ptr.expired() == false);
1068+
REQUIRE(ptr_orig.get() == nullptr);
1069+
REQUIRE(ptr_orig.expired() == true);
10131070
}
10141071

10151072
REQUIRE(instances == 1);

0 commit comments

Comments
 (0)