5 #include "gtest/gtest.h" 
   11 using res = std::pair<std::vector<unsigned int>, 
bool>;
 
   12 using vec = std::vector<unsigned int>;
 
   14 TEST(JetGroupProductTester, empty) {
 
   15   std::vector<std::size_t> siblings;
 
   17   std::vector<std::size_t> condMult;
 
   21   auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(
nullptr);
 
   23   EXPECT_FALSE(jgp.
valid());
 
   24   EXPECT_TRUE((jgp.
next(collector)).empty());
 
   28 TEST(JetGroupProductTester, onecondition) {
 
   29   std::vector<std::size_t> siblings{1};
 
   32   satisfiedBy[0] = std::vector<std::size_t>();
 
   33   satisfiedBy[1] = std::vector<std::size_t> {0, 1, 2};
 
   35   std::vector<std::size_t> condMult{0, 1};
 
   38   jg2elemjgs[0] = std::vector<std::size_t> {0};
 
   39   jg2elemjgs[1] = std::vector<std::size_t> {1};
 
   40   jg2elemjgs[2] = std::vector<std::size_t> {2};
 
   44   auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(
nullptr);
 
   46   EXPECT_TRUE(jgp.
valid());
 
   48   auto exp = std::vector<std::size_t>{0};
 
   49   EXPECT_EQ(jgp.
next(collector), 
exp);
 
   51   exp = std::vector<std::size_t>{1};
 
   52   EXPECT_EQ(jgp.
next(collector), 
exp);
 
   54   exp = std::vector<std::size_t>{2};
 
   55   EXPECT_EQ(jgp.
next(collector), 
exp);
 
   57   EXPECT_TRUE(jgp.
next(collector).empty());
 
   60 TEST(JetGroupProductTester, repeatedcond) {
 
   61   std::vector<std::size_t> siblings{1};
 
   64   satisfiedBy[0] = std::vector<std::size_t>();
 
   65   satisfiedBy[1] = std::vector<std::size_t> {0, 1, 2};
 
   67   std::vector<std::size_t> condMult{1, 2};
 
   70   jg2elemjgs[0] = std::vector<std::size_t> {0};
 
   71   jg2elemjgs[1] = std::vector<std::size_t> {1};
 
   72   jg2elemjgs[2] = std::vector<std::size_t> {2};
 
   76   auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(
nullptr);
 
   78   EXPECT_TRUE(jgp.
valid());
 
   80   auto exp = std::vector<std::size_t>{0, 1};
 
   81   EXPECT_EQ(jgp.
next(collector), 
exp);
 
   83   exp = std::vector<std::size_t>{0, 2};
 
   84   EXPECT_EQ(jgp.
next(collector), 
exp);
 
   87   exp = std::vector<std::size_t>{1, 2};
 
   88   EXPECT_EQ(jgp.
next(collector), 
exp);
 
   90   EXPECT_TRUE(jgp.
next(collector).empty());
 
   93 TEST(JetGroupProductTester, twocond) {
 
   94   std::vector<std::size_t> siblings{1, 2};
 
   97   satisfiedBy[0] = std::vector<std::size_t>();
 
   98   satisfiedBy[1] = std::vector<std::size_t> {0, 1, 2};
 
   99   satisfiedBy[2] = std::vector<std::size_t> {0, 1, 2};
 
  101   std::vector<std::size_t> condMult{1, 1, 1};
 
  104   jg2elemjgs[0] = std::vector<std::size_t> {0};
 
  105   jg2elemjgs[1] = std::vector<std::size_t> {1};
 
  106   jg2elemjgs[2] = std::vector<std::size_t> {2};
 
  110   auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(
nullptr);
 
  112   EXPECT_TRUE(jgp.
valid());
 
  114   auto exp = std::vector<std::size_t>{0, 1};
 
  115   EXPECT_EQ(jgp.
next(collector), 
exp);
 
  117   exp = std::vector<std::size_t>{0, 2};
 
  118   EXPECT_EQ(jgp.
next(collector), 
exp);
 
  120   exp = std::vector<std::size_t>{1, 2};
 
  121   EXPECT_EQ(jgp.
next(collector), 
exp);
 
  123   EXPECT_TRUE(jgp.
next(collector).empty());
 
  124   if(collector) {collector->write();}
 
  128 TEST(JetGroupProductTester, reallife) {
 
  129   std::vector<std::size_t> siblings{1, 2};
 
  132   satisfiedBy[0] = std::vector<std::size_t>();
 
  133   satisfiedBy[1] = std::vector<std::size_t> {0, 1, 2};
 
  134   satisfiedBy[2] = std::vector<std::size_t> {
 
  135     0, 1, 2, 3, 4, 6, 7, 9, 10, 11, 12, 13,
 
  136     14, 15, 17, 19, 21, 25, 26, 29, 33};
 
  138   std::vector<std::size_t> condMult{1, 1, 3};
 
  141   for (
const auto& 
i : satisfiedBy[2]){
 
  142     jg2elemjgs[
i] = std::vector<std::size_t> {
i};
 
  146   auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(
nullptr);
 
  148   EXPECT_TRUE(jgp.
valid());
 
  150   std::size_t ipass{0};
 
  159   EXPECT_EQ (ipass, 2925
u);