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 }