Skip to content

Commit da73d98

Browse files
committed
Added more "system" tests
1 parent 7def9b8 commit da73d98

File tree

1 file changed

+52
-2
lines changed

1 file changed

+52
-2
lines changed

tests/runtime_tests.cpp

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
#include <catch2/catch_test_macros.hpp>
44
#include <cstdlib>
5+
#include <vector>
6+
#include <algorithm>
57

68
// Allocation tracker, to catch memory leaks and double delete
79
constexpr std::size_t max_allocations = 20'000;
@@ -2572,7 +2574,7 @@ TEST_CASE("object owning observer pointer to other", "[system_tests]") {
25722574
REQUIRE(mem_track.double_del() == 0u);
25732575
}
25742576

2575-
TEST_CASE("object owning observer pointer chain", "[system_tests]") {
2577+
TEST_CASE("object owning observer pointer open chain", "[system_tests]") {
25762578
memory_tracker mem_track;
25772579

25782580
{
@@ -2587,7 +2589,7 @@ TEST_CASE("object owning observer pointer chain", "[system_tests]") {
25872589
REQUIRE(mem_track.double_del() == 0u);
25882590
}
25892591

2590-
TEST_CASE("object owning observer pointer chain reversed", "[system_tests]") {
2592+
TEST_CASE("object owning observer pointer open chain reversed", "[system_tests]") {
25912593
memory_tracker mem_track;
25922594

25932595
{
@@ -2601,3 +2603,51 @@ TEST_CASE("object owning observer pointer chain reversed", "[system_tests]") {
26012603
REQUIRE(mem_track.leaks() == 0u);
26022604
REQUIRE(mem_track.double_del() == 0u);
26032605
}
2606+
2607+
TEST_CASE("object owning observer pointer closed chain interleaved", "[system_tests]") {
2608+
memory_tracker mem_track;
2609+
2610+
{
2611+
auto ptr1 = oup::make_observable_sealed<observer_owner>();
2612+
auto ptr2 = oup::make_observable_sealed<observer_owner>();
2613+
auto ptr3 = oup::make_observable_sealed<observer_owner>();
2614+
auto ptr4 = oup::make_observable_sealed<observer_owner>();
2615+
ptr1->obs = ptr2;
2616+
ptr2->obs = ptr4;
2617+
ptr3->obs = ptr1;
2618+
ptr4->obs = ptr3;
2619+
}
2620+
2621+
REQUIRE(mem_track.leaks() == 0u);
2622+
REQUIRE(mem_track.double_del() == 0u);
2623+
}
2624+
2625+
TEST_CASE("pointers in vector", "[system_tests]") {
2626+
memory_tracker mem_track;
2627+
2628+
{
2629+
std::vector<test_sptr> vec_own;
2630+
std::vector<test_optr> vec_obs;
2631+
2632+
vec_own.resize(100);
2633+
REQUIRE(std::all_of(vec_own.begin(), vec_own.end(), [](const auto& p) { return p == nullptr; }) == true);
2634+
2635+
std::generate(vec_own.begin(), vec_own.end(), []() { return oup::make_observable_sealed<test_object>(); });
2636+
REQUIRE(std::none_of(vec_own.begin(), vec_own.end(), [](const auto& p) { return p == nullptr; }) == true);
2637+
2638+
vec_obs.resize(100);
2639+
REQUIRE(std::all_of(vec_obs.begin(), vec_obs.end(), [](const auto& p) { return p == nullptr; }) == true);
2640+
2641+
std::copy(vec_own.begin(), vec_own.end(), vec_obs.begin());
2642+
REQUIRE(std::none_of(vec_own.begin(), vec_own.end(), [](const auto& p) { return p == nullptr; }) == true);
2643+
2644+
std::vector<test_sptr> vec_own_new = std::move(vec_own);
2645+
REQUIRE(std::none_of(vec_own.begin(), vec_own.end(), [](const auto& p) { return p == nullptr; }) == true);
2646+
2647+
vec_own_new.clear();
2648+
REQUIRE(std::all_of(vec_obs.begin(), vec_obs.end(), [](const auto& p) { return p == nullptr; }) == true);
2649+
}
2650+
2651+
REQUIRE(mem_track.leaks() == 0u);
2652+
REQUIRE(mem_track.double_del() == 0u);
2653+
}

0 commit comments

Comments
 (0)