11 #include <hlt/softwaretrigger/core/SoftwareTriggerCut.h>
12 #include <gtest/gtest.h>
22 namespace SoftwareTrigger {
30 SoftwareTriggerObject object;
32 auto cut = SoftwareTriggerCut::compile(
"1 == 1", 1,
false);
33 EXPECT_EQ(SoftwareTriggerCutResult::c_accept, cut->checkPreScaled(
object));
35 cut = SoftwareTriggerCut::compile(
"1 == 1", 1,
true);
36 EXPECT_EQ(SoftwareTriggerCutResult::c_reject, cut->checkPreScaled(
object));
38 cut = SoftwareTriggerCut::compile(
"-1 == 1", 1,
false);
39 EXPECT_EQ(SoftwareTriggerCutResult::c_noResult, cut->checkPreScaled(
object));
41 cut = SoftwareTriggerCut::compile(
"-1 == 1", 1,
true);
42 EXPECT_EQ(SoftwareTriggerCutResult::c_noResult, cut->checkPreScaled(
object));
46 TEST_F(SoftwareTriggerCutTest, prescalingRandom)
49 SoftwareTriggerObject object;
52 auto cut = SoftwareTriggerCut::compile(
"1 == 1", 0,
false);
53 for (
unsigned int i = 0; i < 1e3; i++) {
54 EXPECT_EQ(SoftwareTriggerCutResult::c_noResult, cut->checkPreScaled(
object));
58 cut = SoftwareTriggerCut::compile(
"1 == 1", 0,
true);
59 for (
unsigned int i = 0; i < 1e3; i++) {
60 EXPECT_EQ(SoftwareTriggerCutResult::c_reject, cut->checkPreScaled(
object));
63 cut = SoftwareTriggerCut::compile(
"1 == 1", 1,
true);
64 for (
unsigned int i = 0; i < 1e3; i++) {
65 EXPECT_EQ(SoftwareTriggerCutResult::c_reject, cut->checkPreScaled(
object));
68 cut = SoftwareTriggerCut::compile(
"1 == 1", 1);
69 for (
unsigned int i = 0; i < 1e3; i++) {
70 EXPECT_EQ(SoftwareTriggerCutResult::c_accept, cut->checkPreScaled(
object));
73 cut = SoftwareTriggerCut::compile(
"1 == 1", 10);
75 unsigned int numberOfYes = 0;
76 unsigned int numberOfNo = 0;
77 for (
unsigned int i = 0; i < 1e4; i++) {
78 const auto cutResult = cut->checkPreScaled(
object);
79 EXPECT_NE(SoftwareTriggerCutResult::c_reject, cutResult);
81 if (cutResult == SoftwareTriggerCutResult::c_accept) {
83 }
else if (cutResult == SoftwareTriggerCutResult::c_noResult) {
89 EXPECT_EQ(numberOfYes, 1022);
90 EXPECT_EQ(numberOfNo, 1e4 - 1022);
94 TEST_F(SoftwareTriggerCutTest, prescalingCounter)
97 SoftwareTriggerObject object;
100 auto cut = SoftwareTriggerCut::compile(
"1 == 1", 0,
false);
101 for (uint32_t i = 0; i < 1e3; i++) {
102 EXPECT_EQ(SoftwareTriggerCutResult::c_noResult, cut->check(
object).first);
106 cut = SoftwareTriggerCut::compile(
"1 == 1", 0,
true);
107 for (uint32_t i = 0; i < 1e3; i++) {
108 EXPECT_EQ(SoftwareTriggerCutResult::c_reject, cut->check(
object).first);
111 cut = SoftwareTriggerCut::compile(
"1 == 1", 1,
true);
112 for (uint32_t i = 0; i < 1e3; i++) {
113 EXPECT_EQ(SoftwareTriggerCutResult::c_reject, cut->check(
object).first);
116 cut = SoftwareTriggerCut::compile(
"1 == 1", 1);
117 for (uint32_t i = 0; i < 1e3; i++) {
118 EXPECT_EQ(SoftwareTriggerCutResult::c_accept, cut->check(
object).first);
122 cut = SoftwareTriggerCut::compile(
"1 == 1", 10);
123 uint32_t counter = 0;
124 uint32_t numberOfYes = 0;
125 uint32_t numberOfNo = 0;
127 for (uint32_t i = 0; i < 729; i++) {
128 const auto cutResult = cut->check(
object, &counter).first;
129 EXPECT_NE(SoftwareTriggerCutResult::c_reject, cutResult);
130 if (cutResult == SoftwareTriggerCutResult::c_accept) {
132 }
else if (cutResult == SoftwareTriggerCutResult::c_noResult) {
136 uint32_t expectedYes = (729 / 10) + 1;
137 EXPECT_EQ(numberOfYes, expectedYes);
138 EXPECT_EQ(numberOfNo, 729 - expectedYes);
140 cut = SoftwareTriggerCut::compile(
"1 == 1", 7);
145 for (uint32_t i = 1; i <= 544; i++) {
146 const auto cutResult = cut->check(
object, &counter).first;
147 EXPECT_NE(SoftwareTriggerCutResult::c_reject, cutResult);
148 if (cutResult == SoftwareTriggerCutResult::c_accept) {
150 }
else if (cutResult == SoftwareTriggerCutResult::c_noResult) {
154 expectedYes = (544 / 7);
155 EXPECT_EQ(numberOfYes, expectedYes);
156 EXPECT_EQ(numberOfNo, 544 - expectedYes);