8 #include <framework/utilities/GeneralCut.h>
9 #include <gtest/gtest.h>
14 struct MockObjectType {
24 class MockVariableType {
27 double function(
const MockObjectType* object)
const
33 const std::string name =
"mocking_variable";
40 class MockVariableManager {
43 using Object = MockObjectType;
45 using Var = MockVariableType;
48 static MockVariableManager& Instance()
50 static MockVariableManager instance;
55 Var* getVariable(
const std::string& name)
57 if (name ==
"mocking_variable") {
58 return &m_mocking_variable;
65 Var m_mocking_variable;
72 TEST(GeneralCutTest, cutCheck)
74 MockObjectType testObject;
76 std::unique_ptr<MockGeneralCut> a = MockGeneralCut::compile(
"1.2 < 1.5 ");
77 EXPECT_TRUE(a->check(&testObject));
78 a = MockGeneralCut::compile(
" 1.5<1.2");
79 EXPECT_FALSE(a->check(&testObject));
83 a = MockGeneralCut::compile(
"-1 == 1");
84 EXPECT_FALSE(a->check(&testObject));
85 a = MockGeneralCut::compile(
"-1 != 1");
86 EXPECT_TRUE(a->check(&testObject));
88 a = MockGeneralCut::compile(
" 12.3 >1.5 ");
89 EXPECT_TRUE(a->check(&testObject));
90 a = MockGeneralCut::compile(
"12 > 15");
91 EXPECT_FALSE(a->check(&testObject));
93 a = MockGeneralCut::compile(
"1.2 == 1.2");
94 EXPECT_TRUE(a->check(&testObject));
95 a = MockGeneralCut::compile(
" 1.5!=1.2");
96 EXPECT_TRUE(a->check(&testObject));
98 a = MockGeneralCut::compile(
"1.2 == 1.2 == 1.2");
99 EXPECT_TRUE(a->check(&testObject));
100 a = MockGeneralCut::compile(
" 1.5 == 1.5!=1.2");
101 EXPECT_TRUE(a->check(&testObject));
102 a = MockGeneralCut::compile(
" 1.5 == 1.5!=1.5");
103 EXPECT_FALSE(a->check(&testObject));
105 a = MockGeneralCut::compile(
"1.0 < 1.2 == 1.2");
106 EXPECT_TRUE(a->check(&testObject));
107 a = MockGeneralCut::compile(
" 1.5 < 1.6 != 1.6");
108 EXPECT_FALSE(a->check(&testObject));
109 a = MockGeneralCut::compile(
" 1.5 < 1.6 != 1.7");
110 EXPECT_TRUE(a->check(&testObject));
112 a = MockGeneralCut::compile(
" [12 >= 12 ]");
113 EXPECT_TRUE(a->check(&testObject));
114 a = MockGeneralCut::compile(
"[ 15>= 16 ]");
115 EXPECT_FALSE(a->check(&testObject));
117 a = MockGeneralCut::compile(
" [12 <= 12 ]");
118 EXPECT_TRUE(a->check(&testObject));
119 a = MockGeneralCut::compile(
" [ 17<= 16.7 ]");
120 EXPECT_FALSE(a->check(&testObject));
122 a = MockGeneralCut::compile(
" [12 <= 12 < 13]");
123 EXPECT_TRUE(a->check(&testObject));
124 a = MockGeneralCut::compile(
" [ 17<= 16.7 < 18 ]");
125 EXPECT_FALSE(a->check(&testObject));
127 a = MockGeneralCut::compile(
" [12 >= 12 < 13]");
128 EXPECT_TRUE(a->check(&testObject));
129 a = MockGeneralCut::compile(
" [ 15> 16.7 <= 18 ]");
130 EXPECT_FALSE(a->check(&testObject));
132 a = MockGeneralCut::compile(
"mocking_variable > 1.0");
133 EXPECT_TRUE(a->check(&testObject));
134 a = MockGeneralCut::compile(
"1.0 < mocking_variable <= mocking_variable");
135 EXPECT_TRUE(a->check(&testObject));
137 a = MockGeneralCut::compile(
"mocking_variable < 100.0");
138 EXPECT_TRUE(a->check(&testObject));
139 a = MockGeneralCut::compile(
"mocking_variable <= mocking_variable <= mocking_variable");
140 EXPECT_TRUE(a->check(&testObject));
142 a = MockGeneralCut::compile(
"1 < 2 and 3 < 4");
143 EXPECT_TRUE(a->check(&testObject));
144 a = MockGeneralCut::compile(
"1 < 2 and 4 < 3");
145 EXPECT_FALSE(a->check(&testObject));
146 a = MockGeneralCut::compile(
"2 < 1 and 4 < 3");
147 EXPECT_FALSE(a->check(&testObject));
148 a = MockGeneralCut::compile(
"2 < 1 and 3 < 4");
149 EXPECT_FALSE(a->check(&testObject));
151 a = MockGeneralCut::compile(
"1 < 2 or 3 < 4");
152 EXPECT_TRUE(a->check(&testObject));
153 a = MockGeneralCut::compile(
"1 < 2 or 4 < 3");
154 EXPECT_TRUE(a->check(&testObject));
155 a = MockGeneralCut::compile(
"2 < 1 or 4 < 3");
156 EXPECT_FALSE(a->check(&testObject));
157 a = MockGeneralCut::compile(
"2 < 1 or 3 < 4");
158 EXPECT_TRUE(a->check(&testObject));
160 a = MockGeneralCut::compile(
"1 < 2 and 3 < 4 and [ 5 < 6 or 7 > 6 ]");
161 EXPECT_TRUE(a->check(&testObject));
162 a = MockGeneralCut::compile(
"[1 < 2 < 3 or 3 > 4 ] and [ 5 < 6 or 7 > 6 ]");
163 EXPECT_TRUE(a->check(&testObject));
164 a = MockGeneralCut::compile(
"[1 < 2 < 3 or 3 > 4 ] or [ 5 < 6 and 7 > 6 ]");
165 EXPECT_TRUE(a->check(&testObject));
167 a = MockGeneralCut::compile(
"1 < 2 and 3 < 4 or 5 > 6");
168 EXPECT_TRUE(a->check(&testObject));
169 a = MockGeneralCut::compile(
"1 < 2 or 3 < 4 and 5 > 6");
170 EXPECT_TRUE(a->check(&testObject));
171 a = MockGeneralCut::compile(
"1 < 2 and 4 < 3 or 6 > 5");
172 EXPECT_TRUE(a->check(&testObject));
173 a = MockGeneralCut::compile(
"1 < 2 or 4 < 3 and 6 > 5");
174 EXPECT_TRUE(a->check(&testObject));
176 a = MockGeneralCut::compile(
"1 != 2 and 3 < 4 or 5 > 6");
177 EXPECT_TRUE(a->check(&testObject));
178 a = MockGeneralCut::compile(
"1 < 2 or 3 != 4 and 5 > 6");
179 EXPECT_TRUE(a->check(&testObject));
181 a = MockGeneralCut::compile(
"1 != 2 and 3 == 4 or 5 > 6");
182 EXPECT_FALSE(a->check(&testObject));
183 a = MockGeneralCut::compile(
"1 < 2 or 3 == 4 and 5 > 6");
184 EXPECT_TRUE(a->check(&testObject));
186 a = MockGeneralCut::compile(
"15 != 0x15");
187 EXPECT_TRUE(a->check(&testObject));
189 a = MockGeneralCut::compile(
"15 == 0xF");
190 EXPECT_TRUE(a->check(&testObject));
193 EXPECT_THROW(a = MockGeneralCut::compile(
"15 == 15.0 bla"), std::runtime_error);
194 EXPECT_TRUE(a->check(&testObject));
195 EXPECT_THROW(a = MockGeneralCut::compile(
"15 == other_var"), std::runtime_error);
196 EXPECT_TRUE(a->check(&testObject));
197 EXPECT_THROW(a = MockGeneralCut::compile(
"15 == 15e1000"), std::out_of_range);
198 EXPECT_TRUE(a->check(&testObject));
200 a = MockGeneralCut::compile(
"1e-3 < 1e3");
201 EXPECT_TRUE(a->check(&testObject));
203 a = MockGeneralCut::compile(
"1e-3 == 0.001");
204 EXPECT_TRUE(a->check(&testObject));
206 a = MockGeneralCut::compile(
"1000 < infinity");
207 EXPECT_TRUE(a->check(&testObject));
209 a = MockGeneralCut::compile(
"1000 > infinity");
210 EXPECT_FALSE(a->check(&testObject));
212 a = MockGeneralCut::compile(
"1000 < nan");
213 EXPECT_FALSE(a->check(&testObject));
215 a = MockGeneralCut::compile(
"1000 > nan");
216 EXPECT_FALSE(a->check(&testObject));
219 a = MockGeneralCut::compile(
"3.141592653589793 == 3.141592653589792");
220 EXPECT_FALSE(a->check(&testObject));
222 a = MockGeneralCut::compile(
"3.1415926535897931234567890 == 3.1415926535897931234567891");
223 EXPECT_TRUE(a->check(&testObject));
225 a = MockGeneralCut::compile(
"3141592653589 != 3141592653588");
226 EXPECT_TRUE(a->check(&testObject));
228 a = MockGeneralCut::compile(
"");
229 EXPECT_TRUE(a->check(&testObject));
231 a = MockGeneralCut::compile(
" ");
232 EXPECT_TRUE(a->check(&testObject));
234 a = MockGeneralCut::compile(
"[ ]");
235 EXPECT_TRUE(a->check(&testObject));
237 a = MockGeneralCut::compile(
"[ ] and []");
238 EXPECT_TRUE(a->check(&testObject));
242 TEST(GeneralCutTest, compileAndDecompile)
245 std::unique_ptr<MockGeneralCut> a = MockGeneralCut::compile(
"1 < 2");
246 EXPECT_EQ(a->decompile(),
"[1 < 2]");
248 a = MockGeneralCut::compile(
"[1 < 2]");
249 EXPECT_EQ(a->decompile(),
"[1 < 2]");
251 a = MockGeneralCut::compile(
"1 < 2 < 3");
252 EXPECT_EQ(a->decompile(),
"[[1 < 2] and [2 < 3]]");
254 a = MockGeneralCut::compile(
"[1 < 2 < 3] or [[ 2 < 4] and [ mocking_variable < 4.4231 and [1 < 3 and 4 < mocking_variable]]]");
255 EXPECT_EQ(a->decompile(),
256 "[[[1 < 2] and [2 < 3]] or [[2 < 4] and [[mocking_variable < 4.4231] and [[1 < 3] and [4 < mocking_variable]]]]]");
This class implements a common way to implement cut/selection functionality for arbitrary objects.
TEST(TestgetDetectorRegion, TestgetDetectorRegion)
Test Constructors.
Abstract base class for different kinds of events.