ATLAS Offline Software
Loading...
Searching...
No Matches
JetGroupReducerTest.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "gtest/gtest.h"
7#include <vector>
8#include <map>
9
10using res = std::pair<std::vector<unsigned int>, bool>;
11using vec = std::vector<unsigned int>;
12
13TEST(JetGroupReducerTester, empty) {
14 std::vector<std::size_t> siblings;
15 CondInd2JetGroupsInds satisfiedBy;
17
18 auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
19
20 JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
21
22 EXPECT_TRUE(jgr.valid());
23 EXPECT_TRUE(jgr.next(collector).empty());
24}
25
26TEST(JetGroupReducerTester, emptyCondition) {
27 std::vector<std::size_t> siblings{1, 2, 3};
28 CondInd2JetGroupsInds satisfiedBy;
29 satisfiedBy[0] = std::vector<std::size_t> {0, 1, 2};
30 satisfiedBy[1] = std::vector<std::size_t> {};
31 satisfiedBy[2] = std::vector<std::size_t> {3, 4, 5};
33
34
35
36 auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
37
38 JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
39
40 EXPECT_TRUE(jgr.valid());
41 EXPECT_TRUE(jgr.next(collector).empty());
42}
43
44
45TEST(JetGroupReducerTester, one_condition_elem) {
46
47 // condition is satisfied by an elementary jet group
48 std::vector<std::size_t> siblings{1};
49
50 CondInd2JetGroupsInds satisfiedBy;
51 satisfiedBy[1] = std::vector<std::size_t> {0};
53 jg2elem[0] = std::vector<std::size_t> {0};
54 jg2elem[1] = std::vector<std::size_t> {1};
55 jg2elem[2] = std::vector<std::size_t> {0, 1};
56
57
58 auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
59
60 JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
61
62 auto exp = std::vector<std::size_t>{0};
63 EXPECT_EQ(jgr.next(collector), exp);
64 EXPECT_TRUE(jgr.next(collector).empty());
65}
66
67
68TEST(JetGroupReducerTester, one_condition_non_elem) {
69
70 // condition is satisfied by an non-elementary jet group
71 std::vector<std::size_t> siblings{1};
72
73 CondInd2JetGroupsInds satisfiedBy;
74 satisfiedBy[1] = std::vector<std::size_t> {2};
76 jg2elem[0] = std::vector<std::size_t> {0};
77 jg2elem[1] = std::vector<std::size_t> {1};
78 jg2elem[2] = std::vector<std::size_t> {0, 1};
79
80
81 auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
82
83 JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
84
85 auto exp = std::vector<std::size_t>{0, 1};
86 EXPECT_EQ(jgr.next(collector), exp);
87 EXPECT_TRUE(jgr.next(collector).empty());
88}
89
90TEST(JetGroupReducerTester, two_conditions_nooverlap_elem_elem) {
91 std::vector<std::size_t> siblings{1, 2};
92
93 CondInd2JetGroupsInds satisfiedBy;
94 satisfiedBy[1] = std::vector<std::size_t> {0, 1};
95 satisfiedBy[2] = std::vector<std::size_t> {2};
96 auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
97
99
100 jg2elem[0] = std::vector<std::size_t> {0};
101 jg2elem[1] = std::vector<std::size_t> {1};
102 jg2elem[2] = std::vector<std::size_t> {2};
103 jg2elem[3] = std::vector<std::size_t> {3};
104 jg2elem[4] = std::vector<std::size_t> {4};
105 jg2elem[5] = std::vector<std::size_t> {5};
106 jg2elem[6] = std::vector<std::size_t> {0, 1};
107 jg2elem[7] = std::vector<std::size_t> {2, 3};
108 jg2elem[8] = std::vector<std::size_t> {4, 5};
109
110
111 JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
112
113 auto exp = std::vector<std::size_t>{0, 1, 2};
114 EXPECT_EQ(jgr.next(collector), exp);
115 EXPECT_TRUE(jgr.next(collector).empty());
116}
117
118TEST(JetGroupReducerTester, two_conditions_nooverlap_elem_non_elem) {
119 std::vector<std::size_t> siblings{1, 2};
120
121 CondInd2JetGroupsInds satisfiedBy;
122 satisfiedBy[1] = std::vector<std::size_t> {0, 1};
123 satisfiedBy[2] = std::vector<std::size_t> {7};
124 auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
125
126 JetGroupInd2ElemInds jg2elem;
127
128 jg2elem[0] = std::vector<std::size_t> {0};
129 jg2elem[1] = std::vector<std::size_t> {1};
130 jg2elem[2] = std::vector<std::size_t> {2};
131 jg2elem[3] = std::vector<std::size_t> {3};
132 jg2elem[4] = std::vector<std::size_t> {4};
133 jg2elem[5] = std::vector<std::size_t> {5};
134 jg2elem[6] = std::vector<std::size_t> {0, 1};
135 jg2elem[7] = std::vector<std::size_t> {2, 3};
136 jg2elem[8] = std::vector<std::size_t> {4, 5};
137
138
139 JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
140
141 auto exp = std::vector<std::size_t>{0, 1, 2, 3};
142 EXPECT_EQ(jgr.next(collector), exp);
143 EXPECT_TRUE(jgr.next(collector).empty());
144}
145
146TEST(JetGroupReducerTester, two_conditions_overlap_elem_non_elem) {
147 std::vector<std::size_t> siblings{1, 2};
148
149 CondInd2JetGroupsInds satisfiedBy;
150 satisfiedBy[1] = std::vector<std::size_t> {0, 1};
151 satisfiedBy[2] = std::vector<std::size_t> {6};
152 auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
153
154 JetGroupInd2ElemInds jg2elem;
155
156 jg2elem[0] = std::vector<std::size_t> {0};
157 jg2elem[1] = std::vector<std::size_t> {1};
158 jg2elem[2] = std::vector<std::size_t> {2};
159 jg2elem[3] = std::vector<std::size_t> {3};
160 jg2elem[4] = std::vector<std::size_t> {4};
161 jg2elem[5] = std::vector<std::size_t> {5};
162 jg2elem[6] = std::vector<std::size_t> {0, 1};
163 jg2elem[7] = std::vector<std::size_t> {2, 3};
164 jg2elem[8] = std::vector<std::size_t> {4, 5};
165
166
167 JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
168
169 auto exp = std::vector<std::size_t>{0, 1};
170 EXPECT_EQ(jgr.next(collector), exp);
171 EXPECT_TRUE(jgr.next(collector).empty());
172}
173
174TEST(JetGroupReducerTester, two_conditions_no_overlap_non_elem_non_elem) {
175 std::vector<std::size_t> siblings{1, 2};
176
177 CondInd2JetGroupsInds satisfiedBy;
178 satisfiedBy[1] = std::vector<std::size_t> {6, 7};
179 satisfiedBy[2] = std::vector<std::size_t> {8};
180 auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
181
182 JetGroupInd2ElemInds jg2elem;
183
184 jg2elem[0] = std::vector<std::size_t> {0};
185 jg2elem[1] = std::vector<std::size_t> {1};
186 jg2elem[2] = std::vector<std::size_t> {2};
187 jg2elem[3] = std::vector<std::size_t> {3};
188 jg2elem[4] = std::vector<std::size_t> {4};
189 jg2elem[5] = std::vector<std::size_t> {5};
190 jg2elem[6] = std::vector<std::size_t> {0, 1};
191 jg2elem[7] = std::vector<std::size_t> {2, 3};
192 jg2elem[8] = std::vector<std::size_t> {4, 5};
193
194
195 JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
196
197 auto exp = std::vector<std::size_t>{0, 1, 2, 3, 4, 5};
198 EXPECT_EQ(jgr.next(collector), exp);
199 EXPECT_TRUE(jgr.next(collector).empty());
200}
201
202TEST(JetGroupReducerTester, two_conditions_overlap_non_elem_non_elem) {
203 std::vector<std::size_t> siblings{1, 2};
204
205 CondInd2JetGroupsInds satisfiedBy;
206 satisfiedBy[1] = std::vector<std::size_t> {6, 7};
207 satisfiedBy[2] = std::vector<std::size_t> {9};
208 auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
209
210 JetGroupInd2ElemInds jg2elem;
211
212 jg2elem[0] = std::vector<std::size_t> {0};
213 jg2elem[1] = std::vector<std::size_t> {1};
214 jg2elem[2] = std::vector<std::size_t> {2};
215 jg2elem[3] = std::vector<std::size_t> {3};
216 jg2elem[4] = std::vector<std::size_t> {4};
217 jg2elem[5] = std::vector<std::size_t> {5};
218 jg2elem[6] = std::vector<std::size_t> {0, 1};
219 jg2elem[7] = std::vector<std::size_t> {2, 3};
220 jg2elem[8] = std::vector<std::size_t> {4, 5};
221 jg2elem[9] = std::vector<std::size_t> {1, 5};
222
223
224 JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
225
226 auto exp = std::vector<std::size_t>{0, 1, 2, 3, 5};
227 EXPECT_EQ(jgr.next(collector), exp);
228 EXPECT_TRUE(jgr.next(collector).empty());
229}
230
std::vector< size_t > vec
std::pair< std::vector< unsigned int >, bool > res
std::map< int, std::vector< std::size_t > > CondInd2JetGroupsInds
TEST(JetGroupReducerTester, empty)
static const Attributes_t empty
virtual bool valid() const override
virtual std::vector< std::size_t > next(const Collector &) override
std::map< int, std::vector< std::size_t > > JetGroupInd2ElemInds