File indexing completed on 2024-04-06 12:02:33
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include "catch.hpp"
0014 #include "CondFormats/SerializationHelper/interface/unique_void_ptr.h"
0015
0016 using namespace cond::serialization;
0017
0018 namespace {
0019 struct Counter {
0020 Counter(int& iCount) : count_(iCount) { ++count_; }
0021 ~Counter() { --count_; }
0022
0023 int& count_;
0024 };
0025
0026 }
0027
0028 TEST_CASE("Test unique_void_ptr", "[unique_void_ptr]") {
0029 SECTION("default constructor") {
0030 unique_void_ptr ptr;
0031 REQUIRE(ptr.get() == nullptr);
0032 }
0033
0034 SECTION("destructor") {
0035 int c = 0;
0036 std::unique_ptr<Counter> uptr = std::make_unique<Counter>(c);
0037 REQUIRE(c == 1);
0038 {
0039 auto value = uptr.get();
0040 unique_void_ptr ptr(uptr.release(), [](const void* v) { delete static_cast<const Counter*>(v); });
0041 REQUIRE(value == ptr.get());
0042 }
0043 REQUIRE(c == 0);
0044 }
0045
0046 SECTION("move constructor") {
0047 int c = 1;
0048 std::unique_ptr<Counter> uptr = std::make_unique<Counter>(c);
0049 REQUIRE(c == 2);
0050 {
0051 auto value = uptr.get();
0052 unique_void_ptr ptr(uptr.release(), [](const void* v) { delete static_cast<const Counter*>(v); });
0053 REQUIRE(value == ptr.get());
0054
0055 {
0056 unique_void_ptr cpyPtr{std::move(ptr)};
0057 REQUIRE(ptr.get() == nullptr);
0058 REQUIRE(cpyPtr.get() == value);
0059 REQUIRE(c == 2);
0060 }
0061 REQUIRE(c == 1);
0062 }
0063 REQUIRE(c == 1);
0064 }
0065
0066 SECTION("move operator=") {
0067 int c = 1;
0068 std::unique_ptr<Counter> uptr = std::make_unique<Counter>(c);
0069 REQUIRE(c == 2);
0070 {
0071 auto value = uptr.get();
0072 unique_void_ptr ptr(uptr.release(), [](const void* v) { delete static_cast<const Counter*>(v); });
0073 REQUIRE(value == ptr.get());
0074
0075 {
0076 int c2 = 0;
0077 std::unique_ptr<Counter> uptr2 = std::make_unique<Counter>(c2);
0078 unique_void_ptr cpyPtr(uptr2.release(), [](const void* v) { delete static_cast<const Counter*>(v); });
0079 REQUIRE(c2 == 1);
0080 cpyPtr = std::move(ptr);
0081
0082 REQUIRE(ptr.get() == nullptr);
0083 REQUIRE(cpyPtr.get() == value);
0084 REQUIRE(c == 2);
0085 REQUIRE(c2 == 0);
0086 }
0087 REQUIRE(c == 1);
0088 }
0089 REQUIRE(c == 1);
0090 }
0091 }