File indexing completed on 2024-05-11 03:34:16
0001 #include "catch.hpp"
0002
0003 #include "FWCore/Framework/interface/InputProcessBlockCacheImpl.h"
0004 #include "FWCore/Framework/interface/global/EDProducerBase.h"
0005 #include "FWCore/Framework/interface/global/implementors.h"
0006 #include "FWCore/Utilities/interface/StreamID.h"
0007
0008 #include <iostream>
0009
0010 namespace edm {
0011 class Event;
0012 class EventSetup;
0013 }
0014
0015 namespace edmtest {
0016
0017 class TestProcessBlockCacheA {
0018 int x_;
0019 };
0020
0021 class TestProcessBlockCacheB {
0022 int x_;
0023 };
0024
0025 class TestProcessBlockCacheC {
0026 int x_;
0027 };
0028
0029 class TestProcessBlockCacheD {
0030 int x_;
0031 };
0032
0033 class TestInputBlockCacheHolder0
0034 : public edm::global::impl::InputProcessBlockCacheHolder<edm::global::EDProducerBase> {
0035 public:
0036 bool wantsProcessBlocks() const noexcept override { return true; }
0037 bool wantsInputProcessBlocks() const noexcept override { return true; }
0038 bool wantsGlobalRuns() const noexcept override { return true; }
0039 bool wantsGlobalLuminosityBlocks() const noexcept override { return true; }
0040 bool wantsStreamRuns() const noexcept override { return true; }
0041 bool wantsStreamLuminosityBlocks() const noexcept override { return true; }
0042 void produce(edm::StreamID, edm::Event&, edm::EventSetup const&) const override {}
0043 };
0044
0045 class TestInputBlockCacheHolder1
0046 : public edm::global::impl::InputProcessBlockCacheHolder<edm::global::EDProducerBase, TestProcessBlockCacheA> {
0047 public:
0048 bool wantsProcessBlocks() const noexcept override { return true; }
0049 bool wantsInputProcessBlocks() const noexcept override { return true; }
0050 bool wantsGlobalRuns() const noexcept override { return true; }
0051 bool wantsGlobalLuminosityBlocks() const noexcept override { return true; }
0052 bool wantsStreamRuns() const noexcept override { return true; }
0053 bool wantsStreamLuminosityBlocks() const noexcept override { return true; }
0054 void produce(edm::StreamID, edm::Event&, edm::EventSetup const&) const override {}
0055 };
0056
0057 class TestInputBlockCacheHolder2 : public edm::global::impl::InputProcessBlockCacheHolder<edm::global::EDProducerBase,
0058 TestProcessBlockCacheA,
0059 TestProcessBlockCacheB> {
0060 public:
0061 bool wantsProcessBlocks() const noexcept override { return true; }
0062 bool wantsInputProcessBlocks() const noexcept override { return true; }
0063 bool wantsGlobalRuns() const noexcept override { return true; }
0064 bool wantsGlobalLuminosityBlocks() const noexcept override { return true; }
0065 bool wantsStreamRuns() const noexcept override { return true; }
0066 bool wantsStreamLuminosityBlocks() const noexcept override { return true; }
0067 void produce(edm::StreamID, edm::Event&, edm::EventSetup const&) const override {}
0068 };
0069
0070 class TestInputBlockCacheHolder3 : public edm::global::impl::InputProcessBlockCacheHolder<edm::global::EDProducerBase,
0071 TestProcessBlockCacheA,
0072 TestProcessBlockCacheB,
0073 TestProcessBlockCacheC> {
0074 public:
0075 bool wantsProcessBlocks() const noexcept override { return true; }
0076 bool wantsInputProcessBlocks() const noexcept override { return true; }
0077 bool wantsGlobalRuns() const noexcept override { return true; }
0078 bool wantsGlobalLuminosityBlocks() const noexcept override { return true; }
0079 bool wantsStreamRuns() const noexcept override { return true; }
0080 bool wantsStreamLuminosityBlocks() const noexcept override { return true; }
0081 void produce(edm::StreamID, edm::Event&, edm::EventSetup const&) const override {}
0082 };
0083 }
0084
0085 TEST_CASE("test InputProcessBlockCacheHolder", "[InputProcessBlockCacheHolder]") {
0086 SECTION("test countTypeInParameterPack") {
0087 STATIC_REQUIRE(edm::impl::countTypeInParameterPack<edmtest::TestProcessBlockCacheA>() == 0);
0088 STATIC_REQUIRE(
0089 edm::impl::countTypeInParameterPack<edmtest::TestProcessBlockCacheA, edmtest::TestProcessBlockCacheA>() == 1);
0090 STATIC_REQUIRE(
0091 edm::impl::countTypeInParameterPack<edmtest::TestProcessBlockCacheA, edmtest::TestProcessBlockCacheB>() == 0);
0092 STATIC_REQUIRE(edm::impl::countTypeInParameterPack<edmtest::TestProcessBlockCacheA,
0093 edmtest::TestProcessBlockCacheA,
0094 edmtest::TestProcessBlockCacheB>() == 1);
0095 STATIC_REQUIRE(edm::impl::countTypeInParameterPack<edmtest::TestProcessBlockCacheA,
0096 edmtest::TestProcessBlockCacheB,
0097 edmtest::TestProcessBlockCacheA>() == 1);
0098 STATIC_REQUIRE(edm::impl::countTypeInParameterPack<edmtest::TestProcessBlockCacheA,
0099 edmtest::TestProcessBlockCacheA,
0100 edmtest::TestProcessBlockCacheA>() == 2);
0101 STATIC_REQUIRE(edm::impl::countTypeInParameterPack<edmtest::TestProcessBlockCacheA,
0102 edmtest::TestProcessBlockCacheB,
0103 edmtest::TestProcessBlockCacheB>() == 0);
0104
0105 STATIC_REQUIRE(edm::impl::countTypeInParameterPack<edmtest::TestProcessBlockCacheA,
0106 edmtest::TestProcessBlockCacheA,
0107 edmtest::TestProcessBlockCacheB,
0108 edmtest::TestProcessBlockCacheA>() == 2);
0109 STATIC_REQUIRE(edm::impl::countTypeInParameterPack<edmtest::TestProcessBlockCacheA,
0110 edmtest::TestProcessBlockCacheA,
0111 edmtest::TestProcessBlockCacheB,
0112 edmtest::TestProcessBlockCacheC>() == 1);
0113 STATIC_REQUIRE(edm::impl::countTypeInParameterPack<edmtest::TestProcessBlockCacheA,
0114 edmtest::TestProcessBlockCacheA,
0115 edmtest::TestProcessBlockCacheA,
0116 edmtest::TestProcessBlockCacheA>() == 3);
0117 STATIC_REQUIRE(edm::impl::countTypeInParameterPack<edmtest::TestProcessBlockCacheA,
0118 edmtest::TestProcessBlockCacheA,
0119 edmtest::TestProcessBlockCacheA,
0120 edmtest::TestProcessBlockCacheC>() == 2);
0121 STATIC_REQUIRE(edm::impl::countTypeInParameterPack<edmtest::TestProcessBlockCacheA,
0122 edmtest::TestProcessBlockCacheB,
0123 edmtest::TestProcessBlockCacheB,
0124 edmtest::TestProcessBlockCacheA>() == 1);
0125 STATIC_REQUIRE(edm::impl::countTypeInParameterPack<edmtest::TestProcessBlockCacheA,
0126 edmtest::TestProcessBlockCacheB,
0127 edmtest::TestProcessBlockCacheB,
0128 edmtest::TestProcessBlockCacheC>() == 0);
0129 STATIC_REQUIRE(edm::impl::countTypeInParameterPack<edmtest::TestProcessBlockCacheA,
0130 edmtest::TestProcessBlockCacheB,
0131 edmtest::TestProcessBlockCacheA,
0132 edmtest::TestProcessBlockCacheA>() == 2);
0133 STATIC_REQUIRE(edm::impl::countTypeInParameterPack<edmtest::TestProcessBlockCacheA,
0134 edmtest::TestProcessBlockCacheB,
0135 edmtest::TestProcessBlockCacheA,
0136 edmtest::TestProcessBlockCacheC>() == 1);
0137
0138
0139
0140 }
0141
0142 SECTION("test indexInputProcessBlockCache") {
0143 STATIC_REQUIRE(
0144 edm::impl::indexInputProcessBlockCache<edmtest::TestProcessBlockCacheA, edmtest::TestProcessBlockCacheA>() ==
0145 0);
0146 STATIC_REQUIRE(edm::impl::indexInputProcessBlockCache<edmtest::TestProcessBlockCacheA,
0147 edmtest::TestProcessBlockCacheA,
0148 edmtest::TestProcessBlockCacheB>() == 0);
0149 STATIC_REQUIRE(edm::impl::indexInputProcessBlockCache<edmtest::TestProcessBlockCacheA,
0150 edmtest::TestProcessBlockCacheB,
0151 edmtest::TestProcessBlockCacheA>() == 1);
0152 STATIC_REQUIRE(edm::impl::indexInputProcessBlockCache<edmtest::TestProcessBlockCacheD,
0153 edmtest::TestProcessBlockCacheA,
0154 edmtest::TestProcessBlockCacheB,
0155 edmtest::TestProcessBlockCacheC,
0156 edmtest::TestProcessBlockCacheD>() == 3);
0157
0158
0159
0160 }
0161
0162 SECTION("test constructor") {
0163 edmtest::TestInputBlockCacheHolder0 holder0;
0164 edmtest::TestInputBlockCacheHolder1 holder1;
0165 edmtest::TestInputBlockCacheHolder2 holder2;
0166 edmtest::TestInputBlockCacheHolder3 holder3;
0167 }
0168 }