Back to home page

Project CMSSW displayed by LXR

 
 

    


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&) { /* std::cout << "copied\n"; */ }
0014   CopyNoMove& operator=(CopyNoMove const&) { /*std::cout << "assigned\n";*/ 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&&) { /* std::cout << "moved\n";*/ }
0023   MoveNoCopy& operator=(MoveNoCopy&&) { /* std::cout << "moved\n";*/ 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 }