diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index fc8040c..e87c633 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -3,7 +3,7 @@ name: CI on: push env: - EM_VERSION: 2.0.16 + EM_VERSION: 2.0.34 EM_CACHE_FOLDER: 'emsdk-cache' CODECOV_TOKEN: '99959e57-0b92-48b4-bf55-559d43d41b58' @@ -28,7 +28,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: submodules: 'recursive' @@ -46,7 +46,7 @@ jobs: - name: Setup Emscripten if: matrix.platform.compiler == 'em++' - uses: mymindstorm/setup-emsdk@v7 + uses: mymindstorm/setup-emsdk@v11 with: version: ${{env.EM_VERSION}} actions-cache-folder: ${{env.EM_CACHE_FOLDER}} diff --git a/.gitignore b/.gitignore index 8d5ebce..7a51255 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ build/ +build_wasm/ build_clang/ doc/html/ oup.sublime-workspace diff --git a/oup.sublime-project b/oup.sublime-project index 1aac163..74693ce 100644 --- a/oup.sublime-project +++ b/oup.sublime-project @@ -70,8 +70,8 @@ "shell_cmd": "make -j12 oup_speed_benchmark", }, { - "name": "snatch", - "shell_cmd": "make -j12 snatch", + "name": "snitch", + "shell_cmd": "make -j12 snitch", }, ], "working_dir": "$folder/build", diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index e14920f..8b375aa 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -31,10 +31,10 @@ endfunction() include(FetchContent) -FetchContent_Declare(snatch - GIT_REPOSITORY https://github.com/cschreib/snatch.git - GIT_TAG v0.1.3) -FetchContent_MakeAvailable(snatch) +FetchContent_Declare(snitch + GIT_REPOSITORY https://github.com/cschreib/snitch.git + GIT_TAG v1.0.0) +FetchContent_MakeAvailable(snitch) set(RUNTIME_TEST_FILES ${PROJECT_SOURCE_DIR}/tests/tests_common.cpp @@ -61,7 +61,7 @@ set(RUNTIME_TEST_FILES add_executable(oup_runtime_tests ${RUNTIME_TEST_FILES}) target_link_libraries(oup_runtime_tests PRIVATE oup::oup) -target_link_libraries(oup_runtime_tests PRIVATE snatch::snatch) +target_link_libraries(oup_runtime_tests PRIVATE snitch::snitch) add_platform_definitions(oup_runtime_tests) add_custom_target(oup_runtime_tests_run diff --git a/tests/memory_tracker.cpp b/tests/memory_tracker.cpp index 136a03d..9899cc0 100644 --- a/tests/memory_tracker.cpp +++ b/tests/memory_tracker.cpp @@ -4,14 +4,14 @@ #include #include -void* allocations[max_allocations]; -void* allocations_array[max_allocations]; -std::size_t allocations_bytes[max_allocations]; -std::size_t num_allocations = 0u; -std::size_t size_allocations = 0u; -std::size_t double_delete = 0u; -bool memory_tracking = false; -bool force_next_allocation_failure = false; +volatile void* allocations[max_allocations]; +volatile void* allocations_array[max_allocations]; +volatile std::size_t allocations_bytes[max_allocations]; +volatile std::size_t num_allocations = 0u; +volatile std::size_t size_allocations = 0u; +volatile std::size_t double_delete = 0u; +volatile bool memory_tracking = false; +volatile bool force_next_allocation_failure = false; constexpr bool debug_alloc = false; constexpr bool scramble_alloc = true; @@ -93,8 +93,8 @@ void* allocate(std::size_t size, bool array, std::align_val_t align) { allocations_bytes[num_allocations] = size; - ++num_allocations; - size_allocations += size; + num_allocations = num_allocations + 1u; + size_allocations = size_allocations + size; } return p; @@ -110,21 +110,21 @@ void deallocate(void* p, bool array, std::align_val_t align [[maybe_unused]]) { } if (memory_tracking) { - bool found = false; - void** allocations_type = array ? allocations_array : allocations; + bool found = false; + volatile void** allocations_type = array ? allocations_array : allocations; for (std::size_t i = 0; i < num_allocations; ++i) { if (allocations_type[i] == p) { std::swap(allocations_type[i], allocations_type[num_allocations - 1]); std::swap(allocations_bytes[i], allocations_bytes[num_allocations - 1]); - --num_allocations; - size_allocations -= allocations_bytes[num_allocations - 1]; - found = true; + num_allocations = num_allocations - 1u; + size_allocations = size_allocations - allocations_bytes[num_allocations - 1]; + found = true; break; } } if (!found) { - ++double_delete; + double_delete = double_delete + 1u; } } @@ -188,11 +188,11 @@ memory_tracker::~memory_tracker() noexcept { ::memory_tracking = false; } -std::size_t memory_tracker::allocated() const { +std::size_t memory_tracker::allocated() const volatile { return ::num_allocations - initial_allocations; } -std::size_t memory_tracker::double_delete() const { +std::size_t memory_tracker::double_delete() const volatile { return ::double_delete - initial_double_delete; } diff --git a/tests/memory_tracker.hpp b/tests/memory_tracker.hpp index 1b7c717..a295ab6 100644 --- a/tests/memory_tracker.hpp +++ b/tests/memory_tracker.hpp @@ -2,15 +2,15 @@ #include // Allocation tracker, to catch memory leaks and double delete -constexpr std::size_t max_allocations = 20'000; -extern void* allocations[max_allocations]; -extern void* allocations_array[max_allocations]; -extern std::size_t allocations_bytes[max_allocations]; -extern std::size_t num_allocations; -extern std::size_t size_allocations; -extern std::size_t double_delete; -extern bool memory_tracking; -extern bool force_next_allocation_failure; +constexpr std::size_t max_allocations = 20'000; +extern volatile void* allocations[max_allocations]; +extern volatile void* allocations_array[max_allocations]; +extern volatile std::size_t allocations_bytes[max_allocations]; +extern volatile std::size_t num_allocations; +extern volatile std::size_t size_allocations; +extern volatile std::size_t double_delete; +extern volatile bool memory_tracking; +extern volatile bool force_next_allocation_failure; void* operator new(std::size_t size); @@ -39,8 +39,8 @@ struct memory_tracker { memory_tracker() noexcept; ~memory_tracker() noexcept; - std::size_t allocated() const; - std::size_t double_delete() const; + std::size_t allocated() const volatile; + std::size_t double_delete() const volatile; }; struct fail_next_allocation { diff --git a/tests/runtime_tests_lifetime.cpp b/tests/runtime_tests_lifetime.cpp index 36d6a1c..d720568 100644 --- a/tests/runtime_tests_lifetime.cpp +++ b/tests/runtime_tests_lifetime.cpp @@ -1,12 +1,11 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" #include #include TEMPLATE_LIST_TEST_CASE("observer expiring scope", "[lifetime][owner][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr; @@ -25,11 +24,11 @@ TEMPLATE_LIST_TEST_CASE("observer expiring scope", "[lifetime][owner][observer]" } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer not expiring when owner moved", "[lifetime][owner][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType outer_ptr; @@ -59,10 +58,10 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer expiring reset", "[lifetime][owner][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr; @@ -82,12 +81,12 @@ TEMPLATE_LIST_TEST_CASE("observer expiring reset", "[lifetime][owner][observer]" } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "release valid owner with observer", "[lifetime][release][owner][observer]", owner_types) { if constexpr (!is_sealed) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr; @@ -126,14 +125,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "release valid owner with observer subobject", "[lifetime][release][owner][observer]", owner_types) { if constexpr (!is_sealed) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { state_observer_ptr optr; @@ -170,11 +169,11 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer get and raw get", "[lifetime][get][raw_get][owner][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr; @@ -196,14 +195,14 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "object owning observer pointer to itself", "[lifetime][cycles][owner][observer]", owner_types) { if constexpr (is_cyclic) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -214,12 +213,12 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "object owning observer pointer to other", "[lifetime][cycles][owner][observer]", owner_types) { if constexpr (is_cyclic) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_pointer_deleter_1(); @@ -232,14 +231,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "object owning observer pointer open chain", "[lifetime][cycles][owner][observer]", owner_types) { if constexpr (is_cyclic) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_pointer_deleter_1(); @@ -253,14 +252,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "object owning observer pointer open chain reversed", "[lifetime][cycles][owner][observer]", owner_types) { if constexpr (is_cyclic) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_pointer_deleter_1(); @@ -274,14 +273,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "object owning observer pointer closed chain interleaved", "[lifetime][cycles][owner][observer]", owner_types) { if constexpr (is_cyclic) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_pointer_deleter_1(); @@ -298,10 +297,10 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE("pointers in vector", "[lifetime][array][owner][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { std::vector vec_own; @@ -346,4 +345,4 @@ TEMPLATE_LIST_TEST_CASE("pointers in vector", "[lifetime][array][owner][observer } CHECK_NO_LEAKS; -}; +} diff --git a/tests/runtime_tests_make_observable.cpp b/tests/runtime_tests_make_observable.cpp index 1a41b00..7138c5a 100644 --- a/tests/runtime_tests_make_observable.cpp +++ b/tests/runtime_tests_make_observable.cpp @@ -1,18 +1,17 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE("make observable", "[make_observable][owner]", owner_types) { if constexpr (can_use_make_observable) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = oup::make_observable, get_policy>(); if constexpr (is_sealed) { - CHECK(mem_track.allocated() == 1u); + CHECK_MAX_ALLOC(1u); } else { - CHECK(mem_track.allocated() == 2u); + CHECK_MAX_ALLOC(2u); } CHECK(ptr.get() != nullptr); CHECK(ptr->state_ == test_object::state::default_init); @@ -24,20 +23,20 @@ TEMPLATE_LIST_TEST_CASE("make observable", "[make_observable][owner]", owner_typ CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE("make observable with arguments", "[make_observable][owner]", owner_types) { if constexpr (can_use_make_observable) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = oup::make_observable, get_policy>( test_object::state::special_init); if constexpr (is_sealed) { - CHECK(mem_track.allocated() == 1u); + CHECK_MAX_ALLOC(1u); } else { - CHECK(mem_track.allocated() == 2u); + CHECK_MAX_ALLOC(2u); } CHECK(ptr.get() != nullptr); CHECK(ptr->state_ == test_object::state::special_init); @@ -49,12 +48,12 @@ TEMPLATE_LIST_TEST_CASE("make observable with arguments", "[make_observable][own CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "make observable throw in constructor", "[make_observable][owner]", owner_types) { if constexpr (can_use_make_observable) { - memory_tracker mem_track; + volatile memory_tracker mem_track; next_test_object_constructor_throws = true; REQUIRE_THROWS_AS( @@ -63,11 +62,11 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE("make observable bad alloc", "[make_observable][owner]", owner_types) { if constexpr (can_use_make_observable) { - memory_tracker mem_track; + volatile memory_tracker mem_track; force_next_allocation_failure = true; REQUIRE_THROWS_AS( @@ -75,36 +74,36 @@ TEMPLATE_LIST_TEST_CASE("make observable bad alloc", "[make_observable][owner]", CHECK_NO_LEAKS; } -}; +} TEST_CASE("make observable unique", "[make_observable][owner]") { using TestType = oup::observable_unique_ptr; - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = oup::make_observable_unique(); - CHECK(mem_track.allocated() == 2u); + CHECK_MAX_ALLOC(2u); CHECK(ptr.get() != nullptr); CHECK(ptr->state_ == test_object::state::default_init); CHECK_INSTANCES(1, 1); } CHECK_NO_LEAKS; -}; +} TEST_CASE("make observable sealed", "[make_observable][owner]") { using TestType = oup::observable_sealed_ptr; - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = oup::make_observable_sealed(); - CHECK(mem_track.allocated() == 1u); + CHECK_MAX_ALLOC(1u); CHECK(ptr.get() != nullptr); CHECK(ptr->state_ == test_object::state::default_init); CHECK_INSTANCES(1, 1); } CHECK_NO_LEAKS; -}; +} diff --git a/tests/runtime_tests_observer_assignment_copy.cpp b/tests/runtime_tests_observer_assignment_copy.cpp index d2cfaee..44ddbd0 100644 --- a/tests/runtime_tests_observer_assignment_copy.cpp +++ b/tests/runtime_tests_observer_assignment_copy.cpp @@ -1,10 +1,9 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE( "observer copy assignment operator valid to empty", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_orig = make_pointer_deleter_1(); @@ -24,11 +23,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer copy assignment operator empty to valid", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr_orig; @@ -48,11 +47,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer copy assignment operator empty to empty", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr_orig; @@ -71,11 +70,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer copy assignment operator valid to valid", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_orig = make_pointer_deleter_1(); @@ -96,13 +95,13 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer copy assignment converting operator valid to empty", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; if constexpr (has_base) { { @@ -124,13 +123,13 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer copy assignment converting operator empty to valid", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; if constexpr (has_base) { { @@ -152,13 +151,13 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer copy assignment converting operator empty to empty", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; if constexpr (has_base) { { @@ -179,13 +178,13 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer copy assignment converting operator valid to valid", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; if constexpr (has_base) { { @@ -208,19 +207,19 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer copy assignment operator self to self valid", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); observer_ptr optr{ptr}; - SNATCH_WARNING_PUSH; - SNATCH_WARNING_DISABLE_SELF_ASSIGN; + SNITCH_WARNING_PUSH; + SNITCH_WARNING_DISABLE_SELF_ASSIGN; optr = optr; - SNATCH_WARNING_POP; + SNITCH_WARNING_POP; CHECK(optr.get() == ptr.get()); CHECK(optr.expired() == false); @@ -228,18 +227,18 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer copy assignment operator self to self empty", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr; - SNATCH_WARNING_PUSH; - SNATCH_WARNING_DISABLE_SELF_ASSIGN; + SNITCH_WARNING_PUSH; + SNITCH_WARNING_DISABLE_SELF_ASSIGN; optr = optr; - SNATCH_WARNING_POP; + SNITCH_WARNING_POP; CHECK(optr.get() == nullptr); CHECK(optr.expired() == true); @@ -247,4 +246,4 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} diff --git a/tests/runtime_tests_observer_assignment_from_owner.cpp b/tests/runtime_tests_observer_assignment_from_owner.cpp index 1243441..7a6f481 100644 --- a/tests/runtime_tests_observer_assignment_from_owner.cpp +++ b/tests/runtime_tests_observer_assignment_from_owner.cpp @@ -1,6 +1,5 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE( "observer from owner assignment operator valid to empty", @@ -23,7 +22,7 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer from owner assignment operator empty to valid", @@ -48,7 +47,7 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer from owner assignment operator empty to empty", @@ -72,7 +71,7 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer from owner assignment operator valid to valid", @@ -100,7 +99,7 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer from owner assignment converting operator valid to empty", @@ -125,7 +124,7 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer from owner assignment converting operator empty to valid", @@ -152,7 +151,7 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer from owner assignment converting operator empty to empty", @@ -178,7 +177,7 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer from owner assignment converting operator valid to valid", @@ -208,4 +207,4 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} diff --git a/tests/runtime_tests_observer_assignment_move.cpp b/tests/runtime_tests_observer_assignment_move.cpp index 4e2b05a..e0a2dbd 100644 --- a/tests/runtime_tests_observer_assignment_move.cpp +++ b/tests/runtime_tests_observer_assignment_move.cpp @@ -1,10 +1,9 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE( "observer move assignment operator valid to empty", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_orig = make_pointer_deleter_1(); @@ -24,11 +23,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer move assignment operator empty to valid", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr_orig; @@ -48,11 +47,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer move assignment operator empty to empty", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr_orig; @@ -71,11 +70,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer move assignment operator valid to valid", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_orig = make_pointer_deleter_1(); @@ -96,13 +95,13 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer move assignment converting operator valid to empty", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; if constexpr (has_base) { { @@ -124,13 +123,13 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer move assignment converting operator empty to valid", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; if constexpr (has_base) { { @@ -152,13 +151,13 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer move assignment converting operator empty to empty", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; if constexpr (has_base) { { @@ -179,13 +178,13 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer move assignment converting operator valid to valid", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; if constexpr (has_base) { { @@ -208,11 +207,11 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer move assignment operator self to self valid", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -224,11 +223,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer move assignment operator self to self empty", "[assignment][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr; @@ -239,4 +238,4 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} diff --git a/tests/runtime_tests_observer_cast_copy.cpp b/tests/runtime_tests_observer_cast_copy.cpp index c767085..8b88a40 100644 --- a/tests/runtime_tests_observer_cast_copy.cpp +++ b/tests/runtime_tests_observer_cast_copy.cpp @@ -1,9 +1,8 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE("observer static_cast copy from valid", "[cast][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = [&]() { @@ -16,7 +15,7 @@ TEMPLATE_LIST_TEST_CASE("observer static_cast copy from valid", "[cast][observer CHECK(optr1.get() == raw_ptr); CHECK(optr2.get() == raw_ptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); CHECK_INSTANCES(1, 1); }; @@ -28,10 +27,10 @@ TEMPLATE_LIST_TEST_CASE("observer static_cast copy from valid", "[cast][observer } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer static_cast copy from empty", "[cast][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = [&]() { @@ -43,7 +42,7 @@ TEMPLATE_LIST_TEST_CASE("observer static_cast copy from empty", "[cast][observer CHECK(optr1.get() == nullptr); CHECK(optr2.get() == nullptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); CHECK_INSTANCES(0, 1); }; @@ -55,10 +54,10 @@ TEMPLATE_LIST_TEST_CASE("observer static_cast copy from empty", "[cast][observer } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer const_cast copy from valid", "[cast][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = [&]() { @@ -71,7 +70,7 @@ TEMPLATE_LIST_TEST_CASE("observer const_cast copy from valid", "[cast][observer] CHECK(optr1.get() == raw_ptr); CHECK(optr2.get() == raw_ptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); CHECK_INSTANCES(1, 1); }; @@ -81,10 +80,10 @@ TEMPLATE_LIST_TEST_CASE("observer const_cast copy from valid", "[cast][observer] } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer const_cast copy from empty", "[cast][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = [&]() { @@ -96,7 +95,7 @@ TEMPLATE_LIST_TEST_CASE("observer const_cast copy from empty", "[cast][observer] CHECK(optr1.get() == nullptr); CHECK(optr2.get() == nullptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); CHECK_INSTANCES(0, 1); }; @@ -106,10 +105,10 @@ TEMPLATE_LIST_TEST_CASE("observer const_cast copy from empty", "[cast][observer] } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer dynamic_cast copy from valid", "[cast][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = @@ -123,7 +122,7 @@ TEMPLATE_LIST_TEST_CASE("observer dynamic_cast copy from valid", "[cast][observe CHECK(optr1.get() == raw_ptr); CHECK(optr2.get() == raw_ptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); CHECK_INSTANCES(1, 1); }; @@ -139,10 +138,10 @@ TEMPLATE_LIST_TEST_CASE("observer dynamic_cast copy from valid", "[cast][observe } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer dynamic_cast copy from empty", "[cast][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = @@ -155,7 +154,7 @@ TEMPLATE_LIST_TEST_CASE("observer dynamic_cast copy from empty", "[cast][observe CHECK(optr1.get() == nullptr); CHECK(optr2.get() == nullptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); CHECK_INSTANCES(0, 1); }; @@ -171,12 +170,12 @@ TEMPLATE_LIST_TEST_CASE("observer dynamic_cast copy from empty", "[cast][observe } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer dynamic_cast copy from invalid", "[cast][observer]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr0 = make_pointer_deleter_1(); @@ -190,10 +189,10 @@ TEMPLATE_LIST_TEST_CASE( CHECK(optr1.get() == raw_ptr); CHECK(optr2.get() == nullptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); CHECK_INSTANCES(1, 1); } CHECK_NO_LEAKS; } -}; +} diff --git a/tests/runtime_tests_observer_cast_move.cpp b/tests/runtime_tests_observer_cast_move.cpp index 122763e..51c4cdd 100644 --- a/tests/runtime_tests_observer_cast_move.cpp +++ b/tests/runtime_tests_observer_cast_move.cpp @@ -1,9 +1,8 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE("observer static_cast move from valid", "[cast][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = [&]() { @@ -16,7 +15,7 @@ TEMPLATE_LIST_TEST_CASE("observer static_cast move from valid", "[cast][observer CHECK(optr1.get() == nullptr); CHECK(optr2.get() == raw_ptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); CHECK_INSTANCES(1, 1); }; @@ -28,10 +27,10 @@ TEMPLATE_LIST_TEST_CASE("observer static_cast move from valid", "[cast][observer } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer static_cast move from empty", "[cast][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = [&]() { @@ -43,7 +42,7 @@ TEMPLATE_LIST_TEST_CASE("observer static_cast move from empty", "[cast][observer CHECK(optr1.get() == nullptr); CHECK(optr2.get() == nullptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); CHECK_INSTANCES(0, 1); }; @@ -55,10 +54,10 @@ TEMPLATE_LIST_TEST_CASE("observer static_cast move from empty", "[cast][observer } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer const_cast move from valid", "[cast][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = [&]() { @@ -71,7 +70,7 @@ TEMPLATE_LIST_TEST_CASE("observer const_cast move from valid", "[cast][observer] CHECK(optr1.get() == nullptr); CHECK(optr2.get() == raw_ptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); CHECK_INSTANCES(1, 1); }; @@ -81,10 +80,10 @@ TEMPLATE_LIST_TEST_CASE("observer const_cast move from valid", "[cast][observer] } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer const_cast move from empty", "[cast][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = [&]() { @@ -96,7 +95,7 @@ TEMPLATE_LIST_TEST_CASE("observer const_cast move from empty", "[cast][observer] CHECK(optr1.get() == nullptr); CHECK(optr2.get() == nullptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); CHECK_INSTANCES(0, 1); }; @@ -106,10 +105,10 @@ TEMPLATE_LIST_TEST_CASE("observer const_cast move from empty", "[cast][observer] } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer dynamic_cast move from valid", "[cast][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = @@ -123,7 +122,7 @@ TEMPLATE_LIST_TEST_CASE("observer dynamic_cast move from valid", "[cast][observe CHECK(optr1.get() == nullptr); CHECK(optr2.get() == raw_ptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); CHECK_INSTANCES(1, 1); }; @@ -139,10 +138,10 @@ TEMPLATE_LIST_TEST_CASE("observer dynamic_cast move from valid", "[cast][observe } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer dynamic_cast move from empty", "[cast][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = @@ -155,7 +154,7 @@ TEMPLATE_LIST_TEST_CASE("observer dynamic_cast move from empty", "[cast][observe CHECK(optr1.get() == nullptr); CHECK(optr2.get() == nullptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); CHECK_INSTANCES(0, 1); }; @@ -171,12 +170,12 @@ TEMPLATE_LIST_TEST_CASE("observer dynamic_cast move from empty", "[cast][observe } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer dynamic_cast move from invalid", "[cast][observer]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr0 = make_pointer_deleter_1(); @@ -189,10 +188,10 @@ TEMPLATE_LIST_TEST_CASE( CHECK(optr1.get() == nullptr); CHECK(optr2.get() == nullptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); CHECK_INSTANCES(1, 1); } CHECK_NO_LEAKS; } -}; +} diff --git a/tests/runtime_tests_observer_comparison.cpp b/tests/runtime_tests_observer_comparison.cpp index a93d531..1d6d6ff 100644 --- a/tests/runtime_tests_observer_comparison.cpp +++ b/tests/runtime_tests_observer_comparison.cpp @@ -1,10 +1,9 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE( "observer comparison valid vs nullptr", "[comparison][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -17,11 +16,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer comparison empty vs nullptr", "[comparison][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr; @@ -33,11 +32,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer comparison empty vs empty", "[comparison][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr1; @@ -50,11 +49,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer comparison empty vs valid", "[comparison][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr1; @@ -68,13 +67,13 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer comparison valid vs valid different instance", "[comparison][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_pointer_deleter_1(); @@ -89,11 +88,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer comparison valid vs valid same instance", "[comparison][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -107,14 +106,14 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer comparison valid vs valid different instance derived", "[comparison][observer]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_pointer_deleter_1(); @@ -130,14 +129,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer comparison valid vs valid same instance derived", "[comparison][observer]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -152,4 +151,4 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} diff --git a/tests/runtime_tests_observer_construction.cpp b/tests/runtime_tests_observer_construction.cpp index f7499c5..6f1e856 100644 --- a/tests/runtime_tests_observer_construction.cpp +++ b/tests/runtime_tests_observer_construction.cpp @@ -1,9 +1,8 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE("observer default constructor", "[construction][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr ptr; @@ -14,10 +13,10 @@ TEMPLATE_LIST_TEST_CASE("observer default constructor", "[construction][observer } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer nullptr constructor", "[construction][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr ptr(nullptr); @@ -28,4 +27,4 @@ TEMPLATE_LIST_TEST_CASE("observer nullptr constructor", "[construction][observer } CHECK_NO_LEAKS; -}; +} diff --git a/tests/runtime_tests_observer_construction_copy.cpp b/tests/runtime_tests_observer_construction_copy.cpp index d72c681..d1e0859 100644 --- a/tests/runtime_tests_observer_construction_copy.cpp +++ b/tests/runtime_tests_observer_construction_copy.cpp @@ -1,10 +1,9 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE( "observer copy constructor valid", "[construction][observer][from_observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_owner = make_pointer_deleter_1(); @@ -23,11 +22,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer copy constructor empty", "[construction][observer][from_observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr ptr_orig; @@ -43,14 +42,14 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer copy from valid observer implicit conversion constructor", "[construction][observer][from_observer]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_owner = make_pointer_deleter_1(); @@ -70,14 +69,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer copy from empty observer implicit conversion constructor", "[construction][observer][from_observer]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr ptr_orig; @@ -96,14 +95,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer copy from valid observer explicit conversion constructor", "[construction][observer][from_observer]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { base_ptr ptr_owner = make_pointer_deleter_1(); @@ -124,14 +123,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer copy from empty observer explicit conversion constructor", "[construction][observer][from_observer]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { base_observer_ptr ptr_orig; @@ -150,14 +149,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer copy from valid observer explicit conversion constructor with null", "[construction][observer][from_observer]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { base_ptr ptr_owner = make_pointer_deleter_1(); @@ -177,13 +176,13 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer copy from valid observer explicit conversion constructor subobject", "[construction][observer][from_observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_owner = make_pointer_deleter_1(); @@ -202,4 +201,4 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} diff --git a/tests/runtime_tests_observer_construction_from_owner.cpp b/tests/runtime_tests_observer_construction_from_owner.cpp index 2782ab4..21f58c3 100644 --- a/tests/runtime_tests_observer_construction_from_owner.cpp +++ b/tests/runtime_tests_observer_construction_from_owner.cpp @@ -1,10 +1,9 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE( "observer from empty owner constructor", "[construction][observer][from_owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_owner; @@ -20,11 +19,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer from valid owner constructor", "[construction][observer][from_owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_owner = make_pointer_deleter_1(); @@ -40,14 +39,14 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer from empty owner conversion constructor", "[construction][observer][from_owner]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_owner; @@ -64,14 +63,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer from valid owner conversion constructor", "[construction][observer][from_owner]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_owner = make_pointer_deleter_1(); @@ -88,14 +87,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer from empty owner explicit conversion constructor", "[construction][observer][from_owner]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { base_ptr ptr_owner; @@ -112,14 +111,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer from valid owner explicit conversion constructor", "[construction][observer][from_owner]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { base_ptr ptr_owner = make_pointer_deleter_1(); @@ -137,4 +136,4 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} diff --git a/tests/runtime_tests_observer_construction_move.cpp b/tests/runtime_tests_observer_construction_move.cpp index be6b6cb..85ba7ed 100644 --- a/tests/runtime_tests_observer_construction_move.cpp +++ b/tests/runtime_tests_observer_construction_move.cpp @@ -1,12 +1,11 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE( "observer move from valid observer constructor", "[construction][observer][from_observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_owner = make_pointer_deleter_1(); @@ -24,13 +23,13 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer move from empty observer constructor", "[construction][observer][from_observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr ptr_orig; @@ -47,14 +46,14 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer move from valid observer implicit conversion constructor", "[construction][observer][from_observer]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_owner = make_pointer_deleter_1(); @@ -73,13 +72,13 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer move from empty observer implicit conversion constructor", "[construction][observer][from_observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr ptr_orig; @@ -97,7 +96,7 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer move from valid observer explicit conversion constructor", @@ -105,7 +104,7 @@ TEMPLATE_LIST_TEST_CASE( owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { base_ptr ptr_owner = make_pointer_deleter_1(); @@ -126,14 +125,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer move from empty observer explicit conversion constructor", "[construction][observer][from_observer]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { base_observer_ptr ptr_orig; @@ -153,14 +152,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer move from valid observer explicit conversion constructor with null", "[construction][observer][from_observer]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { base_ptr ptr_owner = make_pointer_deleter_1(); @@ -181,13 +180,13 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer move from valid observer explicit conversion constructor subobject", "[construction][observer][from_observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_owner = make_pointer_deleter_1(); @@ -206,4 +205,4 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} diff --git a/tests/runtime_tests_observer_from_this.cpp b/tests/runtime_tests_observer_from_this.cpp index 5f7295c..1ad2a77 100644 --- a/tests/runtime_tests_observer_from_this.cpp +++ b/tests/runtime_tests_observer_from_this.cpp @@ -1,10 +1,9 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE("observer from this", "[observer_from_this]", owner_types) { if constexpr (has_eoft) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -53,12 +52,12 @@ TEMPLATE_LIST_TEST_CASE("observer from this", "[observer_from_this]", owner_type CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer from this with no owner heap", "[observer_from_this]", owner_types) { if constexpr (has_eoft && !must_use_make_observable) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { get_object* orig_ptr = make_instance(); @@ -74,12 +73,12 @@ TEMPLATE_LIST_TEST_CASE( } else { REQUIRE_THROWS_MATCHES( (make_observer_from_this(orig_ptr)), oup::bad_observer_from_this, - snatch::matchers::with_what_contains{ + snitch::matchers::with_what_contains{ "observer_from_this() called with uninitialized control block"}); REQUIRE_THROWS_MATCHES( (make_const_observer_from_this(orig_ptr)), oup::bad_observer_from_this, - snatch::matchers::with_what_contains{ + snitch::matchers::with_what_contains{ "observer_from_this() called with uninitialized control block"}); } @@ -90,11 +89,11 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE("observer from this no owner stack", "[observer_from_this]", owner_types) { if constexpr (has_eoft && !eoft_constructor_takes_control_block) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { get_object obj; @@ -110,11 +109,11 @@ TEMPLATE_LIST_TEST_CASE("observer from this no owner stack", "[observer_from_thi } else { REQUIRE_THROWS_MATCHES( (make_observer_from_this(&obj)), oup::bad_observer_from_this, - snatch::matchers::with_what_contains{ + snitch::matchers::with_what_contains{ "observer_from_this() called with uninitialized control block"}); REQUIRE_THROWS_MATCHES( (make_const_observer_from_this(&obj)), oup::bad_observer_from_this, - snatch::matchers::with_what_contains{ + snitch::matchers::with_what_contains{ "observer_from_this() called with uninitialized control block"}); } @@ -123,12 +122,12 @@ TEMPLATE_LIST_TEST_CASE("observer from this no owner stack", "[observer_from_thi CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer from this acquired into base owner as base", "[observer_from_this]", owner_types) { if constexpr (has_eoft && !must_use_make_observable) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { get_object* orig_ptr = make_instance(); @@ -147,24 +146,24 @@ TEMPLATE_LIST_TEST_CASE( } else { REQUIRE_THROWS_MATCHES( (make_observer_from_this(orig_ptr)), oup::bad_observer_from_this, - snatch::matchers::with_what_contains{ + snitch::matchers::with_what_contains{ "observer_from_this() called with uninitialized control block"}); REQUIRE_THROWS_MATCHES( (make_const_observer_from_this(orig_ptr)), oup::bad_observer_from_this, - snatch::matchers::with_what_contains{ + snitch::matchers::with_what_contains{ "observer_from_this() called with uninitialized control block"}); } } CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer from this acquired into base owner as derived", "[observer_from_this]", owner_types) { if constexpr (has_eoft && has_base && !must_use_make_observable) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { get_object* orig_ptr = make_instance(); @@ -179,12 +178,12 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer from this after owner reset to empty", "[observer_from_this]", owner_types) { if constexpr (has_eoft) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -203,12 +202,12 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer from this after owner reset to valid", "[observer_from_this]", owner_types) { if constexpr (has_eoft && can_reset_to_new) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -227,12 +226,12 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer from this after owner release", "[observer_from_this]", owner_types) { if constexpr (has_eoft && can_release) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -257,14 +256,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer from this after owner release then reset to same", "[observer_from_this]", owner_types) { if constexpr (has_eoft && can_release && can_reset_to_new) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -295,12 +294,12 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer from this after owner move", "[observer_from_this]", owner_types) { if constexpr (has_eoft) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_pointer_deleter_1(); @@ -318,12 +317,12 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "observer from this after owner move assignment", "[observer_from_this]", owner_types) { if constexpr (has_eoft) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_pointer_deleter_1(); @@ -342,7 +341,7 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEST_CASE("observer from this multiple inheritance", "[observer_from_this]") { using base = test_object_observer_from_this_unique; @@ -353,7 +352,7 @@ TEST_CASE("observer from this multiple inheritance", "[observer_from_this]") { using eoft_deriv = oup::enable_observer_from_this_unique; using TestType = ptr_deriv; - memory_tracker mem_track; + volatile memory_tracker mem_track; { deriv* raw_ptr_deriv = new deriv; @@ -371,11 +370,11 @@ TEST_CASE("observer from this multiple inheritance", "[observer_from_this]") { } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer from this in constructor", "[observer_from_this]", owner_types) { if constexpr (has_eoft && has_eoft_self_member) { - memory_tracker mem_track; + volatile memory_tracker mem_track; if constexpr (eoft_always_has_block) { next_test_object_constructor_calls_observer_from_this = true; @@ -388,11 +387,11 @@ TEMPLATE_LIST_TEST_CASE("observer from this in constructor", "[observer_from_thi next_test_object_constructor_calls_observer_from_this = true; REQUIRE_THROWS_MATCHES( (make_pointer_deleter_1()), oup::bad_observer_from_this, - snatch::matchers::with_what_contains{ + snitch::matchers::with_what_contains{ "observer_from_this() called with uninitialized control block"}); next_test_object_constructor_calls_observer_from_this = false; } CHECK_NO_LEAKS; } -}; +} diff --git a/tests/runtime_tests_observer_misc.cpp b/tests/runtime_tests_observer_misc.cpp index 6ffa6ff..8d65e09 100644 --- a/tests/runtime_tests_observer_misc.cpp +++ b/tests/runtime_tests_observer_misc.cpp @@ -1,13 +1,12 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE("observer size", "[size][observer]", owner_types) { CHECK(sizeof(observer_ptr) == 2 * sizeof(void*)); -}; +} TEMPLATE_LIST_TEST_CASE("observer reset to null", "[reset][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -19,10 +18,10 @@ TEMPLATE_LIST_TEST_CASE("observer reset to null", "[reset][observer]", owner_typ } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer swap empty vs empty", "[swap][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr1; @@ -36,10 +35,10 @@ TEMPLATE_LIST_TEST_CASE("observer swap empty vs empty", "[swap][observer]", owne } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer swap valid vs empty", "[swap][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_pointer_deleter_1(); @@ -55,10 +54,10 @@ TEMPLATE_LIST_TEST_CASE("observer swap valid vs empty", "[swap][observer]", owne } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer swap empty vs valid", "[swap][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr2 = make_pointer_deleter_2(); @@ -74,10 +73,10 @@ TEMPLATE_LIST_TEST_CASE("observer swap empty vs valid", "[swap][observer]", owne } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer swap valid vs valid", "[swap][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_pointer_deleter_1(); @@ -95,11 +94,11 @@ TEMPLATE_LIST_TEST_CASE("observer swap valid vs valid", "[swap][observer]", owne } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "observer swap valid vs valid same instance", "[swap][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -114,10 +113,10 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer swap self vs self empty", "[swap][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr; @@ -128,10 +127,10 @@ TEMPLATE_LIST_TEST_CASE("observer swap self vs self empty", "[swap][observer]", } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer swap self vs self valid", "[swap][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -143,10 +142,10 @@ TEMPLATE_LIST_TEST_CASE("observer swap self vs self valid", "[swap][observer]", } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer dereference valid", "[dereference][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -156,10 +155,10 @@ TEMPLATE_LIST_TEST_CASE("observer dereference valid", "[dereference][observer]", } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer get valid", "[get][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -169,10 +168,10 @@ TEMPLATE_LIST_TEST_CASE("observer get valid", "[get][observer]", owner_types) { } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer get empty", "[get][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr; @@ -180,10 +179,10 @@ TEMPLATE_LIST_TEST_CASE("observer get empty", "[get][observer]", owner_types) { } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer raw_get valid", "[raw_get][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -193,10 +192,10 @@ TEMPLATE_LIST_TEST_CASE("observer raw_get valid", "[raw_get][observer]", owner_t } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer raw_get empty", "[raw_get][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr; @@ -204,10 +203,10 @@ TEMPLATE_LIST_TEST_CASE("observer raw_get empty", "[raw_get][observer]", owner_t } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer operator bool valid", "[bool][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -219,10 +218,10 @@ TEMPLATE_LIST_TEST_CASE("observer operator bool valid", "[bool][observer]", owne } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("observer operator bool empty", "[bool][observer]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { observer_ptr optr; @@ -232,4 +231,4 @@ TEMPLATE_LIST_TEST_CASE("observer operator bool empty", "[bool][observer]", owne } CHECK_NO_LEAKS; -}; +} diff --git a/tests/runtime_tests_owner_assignment_move.cpp b/tests/runtime_tests_owner_assignment_move.cpp index 0ac9c0d..375e9cd 100644 --- a/tests/runtime_tests_owner_assignment_move.cpp +++ b/tests/runtime_tests_owner_assignment_move.cpp @@ -1,10 +1,9 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE( "owner move assignment operator valid to empty", "[assignment][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_orig = make_pointer_deleter_1(); @@ -23,11 +22,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "owner move assignment operator empty to valid", "[assignment][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_orig = make_empty_pointer_deleter_1(); @@ -46,11 +45,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "owner move assignment operator empty to empty", "[assignment][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_orig = make_empty_pointer_deleter_1(); @@ -69,11 +68,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "owner move assignment operator valid to valid", "[assignment][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_orig = make_pointer_deleter_1(); @@ -93,13 +92,13 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "owner move assignment converting operator valid to empty", "[assignment][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_orig = make_pointer_deleter_1(); @@ -118,13 +117,13 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "owner move assignment converting operator empty to valid", "[assignment][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_orig = make_empty_pointer_deleter_1(); @@ -143,13 +142,13 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "owner move assignment converting operator empty to empty", "[assignment][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_orig = make_empty_pointer_deleter_1(); @@ -168,13 +167,13 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "owner move assignment converting operator valid to valid", "[assignment][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_orig = make_pointer_deleter_1(); @@ -194,11 +193,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "owner move assignment operator self to self valid", "[assignment][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -212,11 +211,11 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE( "owner move assignment operator self to self empty", "[assignment][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_empty_pointer_deleter_1(); @@ -230,4 +229,4 @@ TEMPLATE_LIST_TEST_CASE( } CHECK_NO_LEAKS; -}; +} diff --git a/tests/runtime_tests_owner_cast_move.cpp b/tests/runtime_tests_owner_cast_move.cpp index 2b36524..b4bcf42 100644 --- a/tests/runtime_tests_owner_cast_move.cpp +++ b/tests/runtime_tests_owner_cast_move.cpp @@ -1,12 +1,11 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" // For std::bad_cast #include TEMPLATE_LIST_TEST_CASE("owner static_cast move from valid", "[cast][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = [&]() { @@ -18,7 +17,7 @@ TEMPLATE_LIST_TEST_CASE("owner static_cast move from valid", "[cast][owner]", ow CHECK(ptr1.get() == nullptr); CHECK(ptr2.get() == raw_ptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); if constexpr (has_stateful_deleter) { CHECK(ptr2.get_deleter().state_ == test_deleter::state::special_init_1); } @@ -33,10 +32,10 @@ TEMPLATE_LIST_TEST_CASE("owner static_cast move from valid", "[cast][owner]", ow } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner static_cast move from empty", "[cast][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = [&]() { @@ -47,7 +46,7 @@ TEMPLATE_LIST_TEST_CASE("owner static_cast move from empty", "[cast][owner]", ow CHECK(ptr1.get() == nullptr); CHECK(ptr2.get() == nullptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); if constexpr (has_stateful_deleter) { CHECK(ptr2.get_deleter().state_ == test_deleter::state::special_init_1); } @@ -62,10 +61,10 @@ TEMPLATE_LIST_TEST_CASE("owner static_cast move from empty", "[cast][owner]", ow } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner const_cast move from valid", "[cast][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = [&]() { @@ -77,7 +76,7 @@ TEMPLATE_LIST_TEST_CASE("owner const_cast move from valid", "[cast][owner]", own CHECK(ptr1.get() == nullptr); CHECK(ptr2.get() == raw_ptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); if constexpr (has_stateful_deleter) { CHECK(ptr2.get_deleter().state_ == test_deleter::state::special_init_1); } @@ -90,10 +89,10 @@ TEMPLATE_LIST_TEST_CASE("owner const_cast move from valid", "[cast][owner]", own } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner const_cast move from empty", "[cast][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = [&]() { @@ -104,7 +103,7 @@ TEMPLATE_LIST_TEST_CASE("owner const_cast move from empty", "[cast][owner]", own CHECK(ptr1.get() == nullptr); CHECK(ptr2.get() == nullptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); if constexpr (has_stateful_deleter) { CHECK(ptr2.get_deleter().state_ == test_deleter::state::special_init_1); } @@ -117,10 +116,10 @@ TEMPLATE_LIST_TEST_CASE("owner const_cast move from empty", "[cast][owner]", own } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner dynamic_cast move from valid", "[cast][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = @@ -134,7 +133,7 @@ TEMPLATE_LIST_TEST_CASE("owner dynamic_cast move from valid", "[cast][owner]", o CHECK(ptr1.get() == nullptr); CHECK(ptr2.get() == raw_ptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); if constexpr (has_stateful_deleter) { CHECK(ptr2.get_deleter().state_ == test_deleter::state::special_init_1); } @@ -150,10 +149,10 @@ TEMPLATE_LIST_TEST_CASE("owner dynamic_cast move from valid", "[cast][owner]", o } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner dynamic_cast move from empty", "[cast][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto run_test = @@ -166,7 +165,7 @@ TEMPLATE_LIST_TEST_CASE("owner dynamic_cast move from empty", "[cast][owner]", o CHECK(ptr1.get() == nullptr); CHECK(ptr2.get() == nullptr); - CHECK(snatch::type_name == snatch::type_name); + CHECK(snitch::type_name == snitch::type_name); if constexpr (has_stateful_deleter) { CHECK(ptr2.get_deleter().state_ == test_deleter::state::special_init_1); } @@ -182,11 +181,11 @@ TEMPLATE_LIST_TEST_CASE("owner dynamic_cast move from empty", "[cast][owner]", o } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner dynamic_cast move from invalid", "[cast][owner]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr0 = make_pointer_deleter_1(); @@ -205,4 +204,4 @@ TEMPLATE_LIST_TEST_CASE("owner dynamic_cast move from invalid", "[cast][owner]", CHECK_NO_LEAKS; } -}; +} diff --git a/tests/runtime_tests_owner_comparison.cpp b/tests/runtime_tests_owner_comparison.cpp index 4f1903b..ca344cb 100644 --- a/tests/runtime_tests_owner_comparison.cpp +++ b/tests/runtime_tests_owner_comparison.cpp @@ -1,9 +1,8 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE("owner comparison valid vs nullptr", "[comparison][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -15,10 +14,10 @@ TEMPLATE_LIST_TEST_CASE("owner comparison valid vs nullptr", "[comparison][owner } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner comparison empty vs nullptr", "[comparison][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_empty_pointer_deleter_1(); @@ -30,10 +29,10 @@ TEMPLATE_LIST_TEST_CASE("owner comparison empty vs nullptr", "[comparison][owner } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner comparison empty vs empty", "[comparison][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_empty_pointer_deleter_1(); @@ -46,10 +45,10 @@ TEMPLATE_LIST_TEST_CASE("owner comparison empty vs empty", "[comparison][owner]" } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner comparison empty vs valid", "[comparison][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_empty_pointer_deleter_1(); @@ -62,10 +61,10 @@ TEMPLATE_LIST_TEST_CASE("owner comparison empty vs valid", "[comparison][owner]" } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner comparison valid vs valid", "[comparison][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_pointer_deleter_1(); @@ -78,4 +77,4 @@ TEMPLATE_LIST_TEST_CASE("owner comparison valid vs valid", "[comparison][owner]" } CHECK_NO_LEAKS; -}; +} diff --git a/tests/runtime_tests_owner_construction.cpp b/tests/runtime_tests_owner_construction.cpp index 5559823..180d4d4 100644 --- a/tests/runtime_tests_owner_construction.cpp +++ b/tests/runtime_tests_owner_construction.cpp @@ -1,9 +1,8 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE("owner default constructor", "[construction][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr; @@ -16,10 +15,10 @@ TEMPLATE_LIST_TEST_CASE("owner default constructor", "[construction][owner]", ow } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner nullptr constructor", "[construction][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr(nullptr); @@ -32,10 +31,10 @@ TEMPLATE_LIST_TEST_CASE("owner nullptr constructor", "[construction][owner]", ow } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner move constructor", "[construction][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_orig = make_pointer_deleter_1(); @@ -53,11 +52,11 @@ TEMPLATE_LIST_TEST_CASE("owner move constructor", "[construction][owner]", owner } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner acquiring constructor", "[construction][owner]", owner_types) { if constexpr (!must_use_make_observable) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr(make_instance()); @@ -71,12 +70,12 @@ TEMPLATE_LIST_TEST_CASE("owner acquiring constructor", "[construction][owner]", CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "owner acquiring constructor with deleter", "[construction][owner]", owner_types) { if constexpr (!must_use_make_observable && has_stateful_deleter) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr(make_instance(), make_deleter_instance_1()); @@ -90,12 +89,12 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "owner acquiring constructor bad alloc", "[construction][owner]", owner_types) { if constexpr (!must_use_make_observable) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto* raw_ptr = make_instance(); @@ -108,12 +107,12 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "owner acquiring constructor bad alloc with deleter", "[construction][owner]", owner_types) { if constexpr (!must_use_make_observable && has_stateful_deleter) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto* raw_ptr = make_instance(); @@ -128,11 +127,11 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE("owner acquiring constructor null", "[construction][owner]", owner_types) { if constexpr (!must_use_make_observable) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr(static_cast*>(nullptr)); @@ -146,12 +145,12 @@ TEMPLATE_LIST_TEST_CASE("owner acquiring constructor null", "[construction][owne CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "owner implicit conversion constructor", "[construction][owner]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr_orig = make_pointer_deleter_1(); @@ -171,12 +170,12 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "owner explicit conversion constructor", "[construction][owner]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { base_ptr ptr_orig = make_pointer_deleter_1(); @@ -197,14 +196,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "owner explicit conversion constructor with custom deleter", "[construction][owner]", owner_types) { if constexpr (has_base && has_stateful_deleter) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { base_ptr ptr_orig = make_pointer_deleter_1(); @@ -226,12 +225,12 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "owner explicit conversion constructor with null", "[construction][owner]", owner_types) { if constexpr (has_base) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { base_ptr ptr_orig = make_pointer_deleter_1(); @@ -251,14 +250,14 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE( "owner explicit conversion constructor with custom deleter with null", "[construction][owner]", owner_types) { if constexpr (has_base && has_stateful_deleter) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { base_ptr ptr_orig = make_pointer_deleter_1(); @@ -280,4 +279,4 @@ TEMPLATE_LIST_TEST_CASE( CHECK_NO_LEAKS; } -}; +} diff --git a/tests/runtime_tests_owner_misc.cpp b/tests/runtime_tests_owner_misc.cpp index 951e04d..d9f3b03 100644 --- a/tests/runtime_tests_owner_misc.cpp +++ b/tests/runtime_tests_owner_misc.cpp @@ -1,6 +1,5 @@ #include "memory_tracker.hpp" #include "testing.hpp" -#include "tests_common.hpp" TEMPLATE_LIST_TEST_CASE("owner size", "[size][owner]", owner_types) { using deleter_type = get_deleter; @@ -17,10 +16,10 @@ TEMPLATE_LIST_TEST_CASE("owner size", "[size][owner]", owner_types) { : round_up(sizeof(deleter_type), std::max(alignof(deleter_type), alignof(void*))); CHECK(sizeof(TestType) == 2 * sizeof(void*) + deleter_overhead); -}; +} TEMPLATE_LIST_TEST_CASE("owner reset to null", "[reset][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -34,11 +33,11 @@ TEMPLATE_LIST_TEST_CASE("owner reset to null", "[reset][owner]", owner_types) { } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner reset to new", "[reset][owner]", owner_types) { if constexpr (!must_use_make_observable) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -55,11 +54,11 @@ TEMPLATE_LIST_TEST_CASE("owner reset to new", "[reset][owner]", owner_types) { CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE("owner reset to new bad alloc", "[reset][owner]", owner_types) { if constexpr (!must_use_make_observable) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { auto* raw_ptr1 = make_instance(); @@ -92,10 +91,10 @@ TEMPLATE_LIST_TEST_CASE("owner reset to new bad alloc", "[reset][owner]", owner_ CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE("owner swap empty vs empty", "[swap][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_empty_pointer_deleter_1(); @@ -112,10 +111,10 @@ TEMPLATE_LIST_TEST_CASE("owner swap empty vs empty", "[swap][owner]", owner_type } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner swap valid vs empty", "[swap][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_pointer_deleter_1(); @@ -132,10 +131,10 @@ TEMPLATE_LIST_TEST_CASE("owner swap valid vs empty", "[swap][owner]", owner_type } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner swap empty vs valid", "[swap][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_empty_pointer_deleter_1(); @@ -152,10 +151,10 @@ TEMPLATE_LIST_TEST_CASE("owner swap empty vs valid", "[swap][owner]", owner_type } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner swap valid vs valid", "[swap][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr1 = make_pointer_deleter_1(); @@ -176,10 +175,10 @@ TEMPLATE_LIST_TEST_CASE("owner swap valid vs valid", "[swap][owner]", owner_type } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner swap self vs self empty", "[swap][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_empty_pointer_deleter_1(); @@ -193,10 +192,10 @@ TEMPLATE_LIST_TEST_CASE("owner swap self vs self empty", "[swap][owner]", owner_ } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner swap self vs self valid", "[swap][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -210,10 +209,10 @@ TEMPLATE_LIST_TEST_CASE("owner swap self vs self valid", "[swap][owner]", owner_ } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner dereference valid", "[dereference][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -223,10 +222,10 @@ TEMPLATE_LIST_TEST_CASE("owner dereference valid", "[dereference][owner]", owner } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner get valid", "[get][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -236,10 +235,10 @@ TEMPLATE_LIST_TEST_CASE("owner get valid", "[get][owner]", owner_types) { } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner get empty", "[get][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_empty_pointer_deleter_1(); @@ -248,10 +247,10 @@ TEMPLATE_LIST_TEST_CASE("owner get empty", "[get][owner]", owner_types) { } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner operator bool valid", "[bool][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -263,10 +262,10 @@ TEMPLATE_LIST_TEST_CASE("owner operator bool valid", "[bool][owner]", owner_type } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner operator bool empty", "[bool][owner]", owner_types) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_empty_pointer_deleter_1(); @@ -277,11 +276,11 @@ TEMPLATE_LIST_TEST_CASE("owner operator bool empty", "[bool][owner]", owner_type } CHECK_NO_LEAKS; -}; +} TEMPLATE_LIST_TEST_CASE("owner release valid", "[release][owner]", owner_types) { if constexpr (!is_sealed) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_pointer_deleter_1(); @@ -300,11 +299,11 @@ TEMPLATE_LIST_TEST_CASE("owner release valid", "[release][owner]", owner_types) CHECK_NO_LEAKS; } -}; +} TEMPLATE_LIST_TEST_CASE("owner release empty", "[release][owner]", owner_types) { if constexpr (!is_sealed) { - memory_tracker mem_track; + volatile memory_tracker mem_track; { TestType ptr = make_empty_pointer_deleter_1(); @@ -320,4 +319,4 @@ TEMPLATE_LIST_TEST_CASE("owner release empty", "[release][owner]", owner_types) CHECK_NO_LEAKS; } -}; +} diff --git a/tests/testing.hpp b/tests/testing.hpp index 3651ece..2259201 100644 --- a/tests/testing.hpp +++ b/tests/testing.hpp @@ -1 +1,78 @@ -#include "snatch/snatch.hpp" +#include "snitch/snitch.hpp" +#include "tests_common.hpp" + +// clang-format off +using owner_types = snitch::type_list< + oup::observable_unique_ptr, + oup::observable_sealed_ptr, + oup::observable_unique_ptr, + oup::observable_sealed_ptr, + oup::observable_unique_ptr, + oup::observable_sealed_ptr, + oup::observable_unique_ptr, + oup::observable_unique_ptr, + oup::observable_unique_ptr, + oup::observable_sealed_ptr, + oup::basic_observable_ptr, + oup::basic_observable_ptr, + oup::basic_observable_ptr, + oup::observable_unique_ptr, + oup::observable_sealed_ptr, + oup::observable_unique_ptr, + oup::observable_sealed_ptr, + oup::observable_unique_ptr, + oup::observable_sealed_ptr, + oup::observable_unique_ptr, + oup::observable_sealed_ptr, + oup::observable_unique_ptr, + oup::observable_sealed_ptr, + oup::observable_unique_ptr, + oup::observable_sealed_ptr + >; +// clang-format on + +#define CHECK_INSTANCES(TEST_OBJECTS, TEST_DELETER) \ + do { \ + CHECK(instances == (TEST_OBJECTS)); \ + if constexpr (has_stateful_deleter) { \ + CHECK(instances_deleter == (TEST_DELETER)); \ + } \ + } while (0) + +#define CHECK_INSTANCES_DERIVED(TEST_OBJECTS, TEST_DERIVED, TEST_DELETER) \ + do { \ + CHECK(instances == (TEST_OBJECTS)); \ + CHECK(instances_derived == (TEST_DERIVED)); \ + if constexpr (has_stateful_deleter) { \ + CHECK(instances_deleter == (TEST_DELETER)); \ + } \ + } while (0) + +#define CHECK_NO_LEAKS \ + do { \ + CHECK_INSTANCES_DERIVED(0, 0, 0); \ + CHECK(mem_track.allocated() == 0u); \ + CHECK(mem_track.double_delete() == 0u); \ + } while (0) + +#if defined(NDEBUG) +// When not in debug (hence, assuming optimisations are turned on), +// some compilers manage to optimise-out some heap allocations, so use a looser +// check. +# define CHECK_MAX_ALLOC(MAX_ALLOC) CHECK(mem_track.allocated() <= MAX_ALLOC) +#else +// In debug, allocations must be exactly as expected. +# define CHECK_MAX_ALLOC(MAX_ALLOC) CHECK(mem_track.allocated() == MAX_ALLOC) +#endif + +// clang-format off +#if defined(__clang__) +# define SNITCH_WARNING_DISABLE_SELF_ASSIGN _Pragma("clang diagnostic ignored \"-Wself-assign-overloaded\"") +#elif defined(__GNUC__) +# define SNITCH_WARNING_DISABLE_SELF_ASSIGN do {} while (0) +#elif defined(_MSC_VER) +# define SNITCH_WARNING_DISABLE_SELF_ASSIGN do {} while (0) +#else +# define SNITCH_WARNING_DISABLE_SELF_ASSIGN do {} while (0) +#endif +// clang-format on diff --git a/tests/tests_common.hpp b/tests/tests_common.hpp index 1b0b85c..ca98f66 100644 --- a/tests/tests_common.hpp +++ b/tests/tests_common.hpp @@ -574,69 +574,3 @@ auto make_const_observer_from_this(const get_object* ptr) { return ptr->observer_from_this(); } } - -// clang-format off -using owner_types = std::tuple< - oup::observable_unique_ptr, - oup::observable_sealed_ptr, - oup::observable_unique_ptr, - oup::observable_sealed_ptr, - oup::observable_unique_ptr, - oup::observable_sealed_ptr, - oup::observable_unique_ptr, - oup::observable_unique_ptr, - oup::observable_unique_ptr, - oup::observable_sealed_ptr, - oup::basic_observable_ptr, - oup::basic_observable_ptr, - oup::basic_observable_ptr, - oup::observable_unique_ptr, - oup::observable_sealed_ptr, - oup::observable_unique_ptr, - oup::observable_sealed_ptr, - oup::observable_unique_ptr, - oup::observable_sealed_ptr, - oup::observable_unique_ptr, - oup::observable_sealed_ptr, - oup::observable_unique_ptr, - oup::observable_sealed_ptr, - oup::observable_unique_ptr, - oup::observable_sealed_ptr - >; -// clang-format on - -#define CHECK_INSTANCES(TEST_OBJECTS, TEST_DELETER) \ - do { \ - CHECK(instances == (TEST_OBJECTS)); \ - if constexpr (has_stateful_deleter) { \ - CHECK(instances_deleter == (TEST_DELETER)); \ - } \ - } while (0) - -#define CHECK_INSTANCES_DERIVED(TEST_OBJECTS, TEST_DERIVED, TEST_DELETER) \ - do { \ - CHECK(instances == (TEST_OBJECTS)); \ - CHECK(instances_derived == (TEST_DERIVED)); \ - if constexpr (has_stateful_deleter) { \ - CHECK(instances_deleter == (TEST_DELETER)); \ - } \ - } while (0) - -#define CHECK_NO_LEAKS \ - do { \ - CHECK_INSTANCES_DERIVED(0, 0, 0); \ - CHECK(mem_track.allocated() == 0u); \ - CHECK(mem_track.double_delete() == 0u); \ - } while (0) - -// clang-format off -#if defined(__clang__) -# define SNATCH_WARNING_DISABLE_SELF_ASSIGN _Pragma("clang diagnostic ignored \"-Wself-assign-overloaded\"") -#elif defined(__GNUC__) -# define SNATCH_WARNING_DISABLE_SELF_ASSIGN do {} while (0) -#elif defined(_MSC_VER) -# define SNATCH_WARNING_DISABLE_SELF_ASSIGN do {} while (0) -#else -# define SNATCH_WARNING_DISABLE_SELF_ASSIGN do {} while (0) -#endif -// clang-format on