File indexing completed on 2025-06-17 01:30:10
0001 #include <cassert>
0002 #include <iostream>
0003 #include <memory>
0004 #include <vector>
0005
0006 #include <catch.hpp>
0007
0008 #include "DataFormats/Common/interface/Wrapper.h"
0009
0010 class CopyNoMove {
0011 public:
0012 CopyNoMove() = default;
0013 CopyNoMove(CopyNoMove const&) { }
0014 CopyNoMove& operator=(CopyNoMove const&) { return *this; }
0015 };
0016
0017 class MoveNoCopy {
0018 public:
0019 MoveNoCopy() = default;
0020 MoveNoCopy(MoveNoCopy const&) = delete;
0021 MoveNoCopy& operator=(MoveNoCopy const&) = delete;
0022 MoveNoCopy(MoveNoCopy&&) { }
0023 MoveNoCopy& operator=(MoveNoCopy&&) { return *this; }
0024 };
0025
0026 class NoDefaultCtor {
0027 public:
0028 NoDefaultCtor() = delete;
0029 NoDefaultCtor(edm::Uninitialized) {}
0030 };
0031
0032 TEST_CASE("test Wrapper", "[Wrapper]") {
0033 auto thing = std::make_unique<CopyNoMove>();
0034 edm::Wrapper<CopyNoMove> wrap(std::move(thing));
0035
0036 auto thing2 = std::make_unique<MoveNoCopy>();
0037 edm::Wrapper<MoveNoCopy> wrap2(std::move(thing2));
0038
0039 auto thing3 = std::make_unique<std::vector<double>>(10, 2.2);
0040 REQUIRE(thing3->size() == 10);
0041
0042 edm::Wrapper<std::vector<double>> wrap3(std::move(thing3));
0043 REQUIRE(wrap3->size() == 10);
0044 REQUIRE(thing3.get() == 0);
0045
0046 auto thing4 = std::make_unique<NoDefaultCtor>(edm::kUninitialized);
0047 edm::Wrapper<NoDefaultCtor> wrap4(std::move(thing4));
0048 }