Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2021-02-14 13:29:23

0001 #include <functional>
0002 #include "FWCore/Utilities/interface/EDGetToken.h"
0003 #include "catch.hpp"
0004 
0005 namespace edm {
0006   class TestEDGetToken {
0007   public:
0008     template <typename... Args>
0009     static edm::EDGetToken makeToken(Args&&... iArgs) {
0010       return edm::EDGetToken(std::forward<Args>(iArgs)...);
0011     }
0012 
0013     template <typename T, typename... Args>
0014     static edm::EDGetTokenT<T> makeTokenT(Args&&... iArgs) {
0015       return edm::EDGetTokenT<T>(std::forward<Args>(iArgs)...);
0016     }
0017 
0018     template <typename T, typename... Args>
0019     static const edm::EDGetTokenT<T> makeConstTokenT(Args&&... iArgs) {
0020       return edm::EDGetTokenT<T>(std::forward<Args>(iArgs)...);
0021     }
0022   };
0023 }  // namespace edm
0024 
0025 namespace {
0026   class Adapter {
0027   public:
0028     template <typename T>
0029     edm::EDGetTokenT<T> consumes() const {
0030       return edm::TestEDGetToken::makeTokenT<T>(11U);
0031     }
0032   };
0033 }  // namespace
0034 
0035 TEST_CASE("Test EDGetToken", "[EDGetToken]") {
0036   SECTION("EDGetTokenT") {
0037     SECTION("No argument ctr") {
0038       edm::EDGetTokenT<int> token1 = edm::TestEDGetToken::makeTokenT<int>();
0039       REQUIRE(token1.isUninitialized());
0040       REQUIRE((token1.index() == 0xFFFFFFFF));
0041     }
0042     SECTION("1 arg ctr") {
0043       edm::EDGetTokenT<int> token2 = edm::TestEDGetToken::makeTokenT<int>(11U);
0044       REQUIRE(!token2.isUninitialized());
0045       REQUIRE((token2.index() == 11));
0046     }
0047     SECTION("non const arg copy ctr") {
0048       edm::EDGetTokenT<int> token2 = edm::TestEDGetToken::makeTokenT<int>(11U);
0049       edm::EDGetTokenT<int> token3(token2);
0050       REQUIRE(!token3.isUninitialized());
0051       REQUIRE((token3.index() == 11));
0052     }
0053 
0054     SECTION("const arg copy ctr") {
0055       const edm::EDGetTokenT<int> cToken2 = edm::TestEDGetToken::makeTokenT<int>(11U);
0056       edm::EDGetTokenT<int> token4(cToken2);
0057       REQUIRE(!token4.isUninitialized());
0058       REQUIRE(token4.index() == 11);
0059     }
0060 
0061     SECTION("const arg copy ctr with move") {
0062       auto const t = edm::TestEDGetToken::makeConstTokenT<int>(11U);
0063       const edm::EDGetTokenT<int> cToken2{std::move(t)};
0064       REQUIRE(!cToken2.isUninitialized());
0065       REQUIRE(cToken2.index() == 11);
0066     }
0067 
0068     SECTION("Use Adapter") {
0069       Adapter a;
0070       const edm::EDGetTokenT<int> cToken2{a};
0071       REQUIRE(!cToken2.isUninitialized());
0072       REQUIRE(cToken2.index() == 11);
0073     }
0074   }
0075 
0076   SECTION("EDGetToken") {
0077     SECTION("No arg ctr") {
0078       edm::EDGetToken token10 = edm::TestEDGetToken::makeToken();
0079       REQUIRE(token10.isUninitialized());
0080       REQUIRE(token10.index() == 0xFFFFFFFF);
0081     }
0082 
0083     SECTION("1 arg ctr") {
0084       edm::EDGetToken token11 = edm::TestEDGetToken::makeToken(100);
0085       REQUIRE(!token11.isUninitialized());
0086       REQUIRE(token11.index() == 100);
0087     }
0088 
0089     SECTION("EDGetTokenT to EDGetToken ctr") {
0090       edm::EDGetTokenT<int> token2 = edm::TestEDGetToken::makeTokenT<int>(11U);
0091       edm::EDGetToken token12(token2);
0092       REQUIRE(!token12.isUninitialized());
0093       REQUIRE(token12.index() == 11);
0094     }
0095   }
0096 }