File indexing completed on 2024-04-06 12:13:15
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 }
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 }
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 }