Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-06-17 01:30:10

0001 #include "catch.hpp"
0002 
0003 #include "DataFormats/Common/interface/DetSetVectorNew.h"
0004 #include "DataFormats/Common/interface/ThinnedRefSet.h"
0005 
0006 #include "SimpleEDProductGetter.h"
0007 
0008 #include <memory>
0009 #include <vector>
0010 
0011 TEST_CASE("ThinnedRefSet", "[ThinnedRefSet]") {
0012   SECTION("Default constructor") { edm::ThinnedRefSet<int> set; }
0013 
0014   SECTION("std::vector<int>") {
0015     SimpleEDProductGetter getter;
0016 
0017     edm::ProductID id(1, 42U);
0018     REQUIRE(id.isValid());
0019 
0020     auto prod = std::make_unique<std::vector<int>>();
0021     for (int i = 0; i < 10; ++i) {
0022       prod->push_back(i);
0023     }
0024     getter.addProduct(id, std::move(prod));
0025 
0026     edm::ThinnedRefSet<std::vector<int>> refSet;
0027     edm::RefProd<std::vector<int>> refProd(id, &getter);
0028     auto filler = refSet.fill(refProd, getter);
0029 
0030     filler.insert(edm::Ref<std::vector<int>>(id, 0, &getter));
0031     filler.insert(edm::Ref<std::vector<int>>(id, 4, &getter));
0032     filler.insert(edm::Ref<std::vector<int>>(id, 9, &getter));
0033 
0034     REQUIRE(refSet.contains(0));
0035     REQUIRE(not refSet.contains(1));
0036     REQUIRE(not refSet.contains(2));
0037     REQUIRE(not refSet.contains(3));
0038     REQUIRE(refSet.contains(4));
0039     REQUIRE(not refSet.contains(5));
0040     REQUIRE(not refSet.contains(6));
0041     REQUIRE(not refSet.contains(7));
0042     REQUIRE(not refSet.contains(8));
0043     REQUIRE(refSet.contains(9));
0044     REQUIRE(not refSet.contains(10));
0045   }
0046 
0047   SECTION("edmNew::DetSetVector<int>") {
0048     SimpleEDProductGetter getter;
0049 
0050     edm::ProductID id(1, 75U);
0051     REQUIRE(id.isValid());
0052 
0053     {
0054       auto detsets = std::make_unique<edmNew::DetSetVector<int>>(2);
0055       {
0056         edmNew::DetSetVector<int>::FastFiller filler(*detsets, 1);
0057         filler.push_back(1);
0058         filler.push_back(2);
0059         filler.push_back(3);
0060       }
0061       {
0062         edmNew::DetSetVector<int>::FastFiller filler(*detsets, 2);
0063         filler.push_back(10);
0064         filler.push_back(20);
0065       }
0066       REQUIRE(detsets->size() == 2);
0067       REQUIRE(detsets->dataSize() == 5);
0068       REQUIRE(detsets->detsetSize(0) == 3);
0069       REQUIRE(detsets->detsetSize(1) == 2);
0070 
0071       auto ds = detsets->find(1);
0072       REQUIRE(ds != detsets->end());
0073       REQUIRE(ds->id() == 1);
0074       REQUIRE(detsets->find(3) == detsets->end());
0075 
0076       getter.addProduct(id, std::move(detsets));
0077     }
0078 
0079     edm::ThinnedRefSet<edmNew::DetSetVector<int>> refSet;
0080     edm::RefProd<edmNew::DetSetVector<int>> refProd(id, &getter);
0081     auto filler = refSet.fill(refProd, getter);
0082 
0083     REQUIRE(*(edm::Ref<edmNew::DetSetVector<int>, int>(id, 0, &getter)) == 1);
0084     REQUIRE(*(edm::Ref<edmNew::DetSetVector<int>, int>(id, 2, &getter)) == 3);
0085     REQUIRE(*(edm::Ref<edmNew::DetSetVector<int>, int>(id, 4, &getter)) == 20);
0086 
0087     filler.insert(edm::Ref<edmNew::DetSetVector<int>, int>(id, 0, &getter));
0088     filler.insert(edm::Ref<edmNew::DetSetVector<int>, int>(id, 2, &getter));
0089     filler.insert(edm::Ref<edmNew::DetSetVector<int>, int>(id, 4, &getter));
0090 
0091     REQUIRE(refSet.contains(0));
0092     REQUIRE(not refSet.contains(1));
0093     REQUIRE(refSet.contains(2));
0094     REQUIRE(not refSet.contains(3));
0095     REQUIRE(refSet.contains(4));
0096     REQUIRE(not refSet.contains(5));
0097   }
0098 }