CMS 3D CMS Logo

ESTestProducers.cc
Go to the documentation of this file.
15 
16 #include <memory>
17 #include <vector>
18 
19 namespace edmtest {
20 
22  public:
24  std::unique_ptr<ESTestDataA> produce(ESTestRecordA const&);
25 
26  private:
27  int value_;
28  };
29 
31 
32  std::unique_ptr<ESTestDataA> ESTestProducerA::produce(ESTestRecordA const& rec) {
33  ++value_;
34  return std::make_unique<ESTestDataA>(value_);
35  }
36 
37  // ---------------------------------------------------------------------
38 
40  public:
42  std::unique_ptr<ESTestDataB> produce(ESTestRecordB const&);
43 
44  private:
45  int value_;
46  };
47 
49 
50  std::unique_ptr<ESTestDataB> ESTestProducerB::produce(ESTestRecordB const& rec) {
51  ++value_;
52  return std::make_unique<ESTestDataB>(value_);
53  }
54 
55  // ---------------------------------------------------------------------
56 
57  // This class is used to test ESProductHost
59  public:
61  // Must use shared_ptr if using ReusableObjectHolder
62  std::shared_ptr<ESTestDataB> produce(ESTestRecordB const&);
63 
64  private:
72 
74  };
75 
77 
78  std::shared_ptr<ESTestDataB> ESTestProducerBUsingHost::produce(ESTestRecordB const& record) {
79  auto host = holder_.makeOrGet([]() { return new HostType(100, 1000); });
80 
81  // Test that the numberOfRecordTypes and index functions are working properly
82  if (host->numberOfRecordTypes() != 6 || host->index<ESTestRecordC>() != 0 || host->index<ESTestRecordD>() != 1 ||
83  host->index<ESTestRecordE>() != 2 || host->index<ESTestRecordF>() != 3 || host->index<ESTestRecordG>() != 4 ||
84  host->index<ESTestRecordH>() != 5) {
85  throw cms::Exception("TestError") << "Either function numberOfRecordTypes or index returns incorrect value";
86  }
87 
88  host->ifRecordChanges<ESTestRecordC>(record, [h = host.get()](auto const& rec) { ++h->value(); });
89 
90  ++host->value();
91  return host;
92  }
93 
94  // ---------------------------------------------------------------------
95 
97  public:
99  std::unique_ptr<ESTestDataC> produce(ESTestRecordC const&);
100 
101  private:
102  int value_;
103  };
104 
106 
107  std::unique_ptr<ESTestDataC> ESTestProducerC::produce(ESTestRecordC const& rec) {
108  ++value_;
109  return std::make_unique<ESTestDataC>(value_);
110  }
111 
112  // ---------------------------------------------------------------------
113 
115  public:
117  std::unique_ptr<ESTestDataD> produce(ESTestRecordD const&);
118 
119  private:
120  int value_;
121  };
122 
124 
125  std::unique_ptr<ESTestDataD> ESTestProducerD::produce(ESTestRecordD const& rec) {
126  ++value_;
127  return std::make_unique<ESTestDataD>(value_);
128  }
129 
130  // ---------------------------------------------------------------------
131 
133  public:
135  std::unique_ptr<ESTestDataE> produce(ESTestRecordE const&);
136 
137  private:
138  int value_;
139  };
140 
142 
143  std::unique_ptr<ESTestDataE> ESTestProducerE::produce(ESTestRecordE const& rec) {
144  ++value_;
145  return std::make_unique<ESTestDataE>(value_);
146  }
147 
148  // ---------------------------------------------------------------------
149 
151  public:
153  std::unique_ptr<ESTestDataF> produce(ESTestRecordF const&);
154 
155  private:
156  int value_;
157  };
158 
160 
161  std::unique_ptr<ESTestDataF> ESTestProducerF::produce(ESTestRecordF const& rec) {
162  ++value_;
163  return std::make_unique<ESTestDataF>(value_);
164  }
165 
166  // ---------------------------------------------------------------------
167 
169  public:
171  std::unique_ptr<ESTestDataG> produce(ESTestRecordG const&);
172 
173  private:
174  int value_;
175  };
176 
178 
179  std::unique_ptr<ESTestDataG> ESTestProducerG::produce(ESTestRecordG const& rec) {
180  ++value_;
181  return std::make_unique<ESTestDataG>(value_);
182  }
183 
184  // ---------------------------------------------------------------------
185 
187  public:
189  std::unique_ptr<ESTestDataH> produce(ESTestRecordH const&);
190 
191  private:
192  int value_;
193  };
194 
196 
197  std::unique_ptr<ESTestDataH> ESTestProducerH::produce(ESTestRecordH const& rec) {
198  ++value_;
199  return std::make_unique<ESTestDataH>(value_);
200  }
201 
202  // ---------------------------------------------------------------------
203 
205  public:
207  std::unique_ptr<ESTestDataI> produce(ESTestRecordI const&);
208 
209  private:
210  int value_;
211  };
212 
214 
215  std::unique_ptr<ESTestDataI> ESTestProducerI::produce(ESTestRecordI const& rec) {
216  ++value_;
217  return std::make_unique<ESTestDataI>(value_);
218  }
219 
220  // ---------------------------------------------------------------------
221 
223  public:
225  std::unique_ptr<ESTestDataJ> produce(ESTestRecordJ const&);
226 
227  private:
228  int value_;
229  };
230 
232 
233  std::unique_ptr<ESTestDataJ> ESTestProducerJ::produce(ESTestRecordJ const& rec) {
234  ++value_;
235  return std::make_unique<ESTestDataJ>(value_);
236  }
237 
238  // ---------------------------------------------------------------------
239 
241  public:
243  std::unique_ptr<ESTestDataK> produce(ESTestRecordK const&);
244 
245  private:
246  int value_;
247  };
248 
250 
251  std::unique_ptr<ESTestDataK> ESTestProducerK::produce(ESTestRecordK const& rec) {
252  ++value_;
253  return std::make_unique<ESTestDataK>(value_);
254  }
255 
256  // ---------------------------------------------------------------------
257 
259  public:
261  std::unique_ptr<ESTestDataA> produceA(ESTestRecordA const&);
262  std::unique_ptr<ESTestDataZ> produceZ(ESTestRecordZ const&);
263 
264  private:
265  int valueA_;
266  int valueZ_;
267  };
268 
269  ESTestProducerAZ::ESTestProducerAZ(edm::ParameterSet const&) : valueA_(0), valueZ_(0) {
272  }
273 
274  std::unique_ptr<ESTestDataA> ESTestProducerAZ::produceA(ESTestRecordA const& rec) {
275  ++valueA_;
276  return std::make_unique<ESTestDataA>(valueA_);
277  }
278 
279  std::unique_ptr<ESTestDataZ> ESTestProducerAZ::produceZ(ESTestRecordZ const& rec) {
280  ++valueZ_;
281  return std::make_unique<ESTestDataZ>(valueZ_);
282  }
283 
284  class TestDataProxyTemplateJ : public edm::eventsetup::DataProxyTemplate<ESTestRecordJ, ESTestDataJ> {
285  public:
286  TestDataProxyTemplateJ(std::vector<unsigned int> const* expectedCacheIds)
287  : testDataJ_(1), expectedCacheIds_(expectedCacheIds) {}
288 
289  private:
291  ESTestRecordK recordK = record.getRecord<ESTestRecordK>();
292  // Note that this test only reliably works when running with a
293  // single IOV at a time and a single stream. This test module
294  // should not be configured with expected values in other cases.
295  if (index_ < expectedCacheIds_->size() && recordK.cacheIdentifier() != expectedCacheIds_->at(index_)) {
296  throw cms::Exception("TestError") << "TestDataProxyTemplateJ::make, unexpected cacheIdentifier";
297  }
298  ++index_;
299  return &testDataJ_;
300  }
301 
302  void invalidateCache() override {}
303  void const* getAfterPrefetchImpl() const override { return &testDataJ_; }
304 
306  std::vector<unsigned> const* expectedCacheIds_;
307  unsigned int index_ = 0;
308  };
309 
311  public:
313 
315 
316  private:
317  KeyedProxiesVector registerProxies(const edm::eventsetup::EventSetupRecordKey&, unsigned int iovIndex) override;
318 
319  std::vector<std::shared_ptr<TestDataProxyTemplateJ>> proxies_;
320  std::vector<unsigned> expectedCacheIds_;
321  };
322 
324  : expectedCacheIds_(pset.getUntrackedParameter<std::vector<unsigned int>>("expectedCacheIds")) {
325  usingRecord<ESTestRecordJ>();
326  }
327 
330  std::vector<unsigned int> emptyDefaultVector;
331  desc.addUntracked<std::vector<unsigned int>>("expectedCacheIds", emptyDefaultVector);
332  descriptions.addDefault(desc);
333  }
334 
336  const edm::eventsetup::EventSetupRecordKey& iRecord, unsigned int iovIndex) {
337  KeyedProxiesVector keyedProxiesVector;
338  while (iovIndex >= proxies_.size()) {
339  proxies_.push_back(std::make_shared<TestDataProxyTemplateJ>(&expectedCacheIds_));
340  }
341  edm::eventsetup::DataKey dataKey(edm::eventsetup::DataKey::makeTypeTag<ESTestDataJ>(), "");
342  keyedProxiesVector.emplace_back(dataKey, proxies_[iovIndex]);
343  return keyedProxiesVector;
344  }
345 } // namespace edmtest
346 
347 namespace edm::test {
348  namespace other {
350  public:
351  ESTestProducerA(edm::ParameterSet const& pset) : value_(pset.getParameter<int>("valueOther")) {
352  setWhatProduced(this);
353  }
354  std::optional<edmtest::ESTestDataA> produce(ESTestRecordA const& rec) {
355  ++value_;
357  }
358 
359  private:
360  int value_;
361  };
362  } // namespace other
363  namespace cpu {
365  public:
366  ESTestProducerA(edm::ParameterSet const& pset) : value_(pset.getParameter<int>("valueCpu")) {
367  setWhatProduced(this);
368  }
369  std::optional<edmtest::ESTestDataA> produce(ESTestRecordA const& rec) {
370  ++value_;
372  }
373 
374  private:
375  int value_;
376  };
377  } // namespace cpu
378 } // namespace edm::test
379 
380 using namespace edmtest;
size
Write out results.
auto setWhatProduced(T *iThis, const es::Label &iLabel={})
Definition: ESProducer.h:163
ESTestProducerJ(edm::ParameterSet const &)
ESTestProducerE(edm::ParameterSet const &)
ESTestProducerAZ(edm::ParameterSet const &)
ESTestProducerF(edm::ParameterSet const &)
string host
Definition: query.py:115
ESTestProducerI(edm::ParameterSet const &)
std::unique_ptr< ESTestDataA > produceA(ESTestRecordA const &)
ESTestProducerB(edm::ParameterSet const &)
ESTestProducerH(edm::ParameterSet const &)
std::vector< unsigned > expectedCacheIds_
std::unique_ptr< ESTestDataD > produce(ESTestRecordD const &)
std::unique_ptr< ESTestDataA > produce(ESTestRecordA const &)
std::unique_ptr< ESTestDataJ > produce(ESTestRecordJ const &)
void const * getAfterPrefetchImpl() const override
KeyedProxiesVector registerProxies(const edm::eventsetup::EventSetupRecordKey &, unsigned int iovIndex) override
unsigned long long cacheIdentifier() const
edm::ReusableObjectHolder< HostType > holder_
std::unique_ptr< ESTestDataE > produce(ESTestRecordE const &)
ESTestProducerA(edm::ParameterSet const &pset)
std::unique_ptr< ESTestDataH > produce(ESTestRecordH const &)
static void fillDescriptions(edm::ConfigurationDescriptions &)
std::unique_ptr< ESTestDataG > produce(ESTestRecordG const &)
std::unique_ptr< ESTestDataK > produce(ESTestRecordK const &)
void addDefault(ParameterSetDescription const &psetDescription)
std::unique_ptr< ESTestDataF > produce(ESTestRecordF const &)
std::unique_ptr< ESTestDataZ > produceZ(ESTestRecordZ const &)
std::unique_ptr< ESTestDataI > produce(ESTestRecordI const &)
ESTestProducerBUsingHost(edm::ParameterSet const &)
ESTestProducerD(edm::ParameterSet const &)
#define DEFINE_FWK_EVENTSETUP_MODULE(type)
Definition: ModuleFactory.h:61
std::shared_ptr< T > makeOrGet(FM &&iMakeFunc)
Takes an object from the queue if one is available, or creates one using iMakeFunc.
std::vector< unsigned > const * expectedCacheIds_
std::vector< std::shared_ptr< TestDataProxyTemplateJ > > proxies_
std::vector< std::pair< DataKey, std::shared_ptr< DataProxy > >> KeyedProxiesVector
std::unique_ptr< ESTestDataB > produce(ESTestRecordB const &)
std::optional< edmtest::ESTestDataA > produce(ESTestRecordA const &rec)
TestDataProxyTemplateJ(std::vector< unsigned int > const *expectedCacheIds)
const ESTestDataJ * make(const ESTestRecordJ &record, const edm::eventsetup::DataKey &key) override
edm::ESProductHost< ESTestDataB, ESTestRecordC, ESTestRecordD, ESTestRecordE, ESTestRecordF, ESTestRecordG, ESTestRecordH > HostType
ESTestProducerA(edm::ParameterSet const &pset)
ESTestProducerC(edm::ParameterSet const &)
ESTestProducerG(edm::ParameterSet const &)
std::optional< edmtest::ESTestDataA > produce(ESTestRecordA const &rec)
ESTestProducerK(edm::ParameterSet const &)
std::shared_ptr< ESTestDataB > produce(ESTestRecordB const &)
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
std::unique_ptr< ESTestDataC > produce(ESTestRecordC const &)
ESTestDataProxyProviderJ(edm::ParameterSet const &)
ESTestProducerA(edm::ParameterSet const &)