11 #include <gtest/gtest.h>
14 #include <tracking/trackFindingVXD/filterMap/filterFramework/Shortcuts.h>
23 namespace VXDTFfilterTest {
29 spacePoint(
float x,
float y,
float z): tuple<float, float, float>(x, y, z)
42 static const std::string
name(
void) {
return "SquaredDistance3D"; };
48 pow(get<0>(p1) - get<0>(p2) , 2) +
49 pow(get<1>(p1) - get<1>(p2) , 2) +
50 pow(get<2>(p1) - get<2>(p2) , 2) ;
59 static const std::string
name(
void) {
return "SquaredDistance2Dxy"; };
65 pow(get<0>(p1) - get<0>(p2) , 2) +
66 pow(get<1>(p1) - get<1>(p2) , 2) ;
75 static const std::string
name(
void) {
return "SquaredDistance1Dx"; };
81 pow(get<0>(p1) - get<0>(p2) , 2);
90 static const std::string
name(
void) {
return "BooleanVariable"; };
96 get<0>(p1) - get<0>(p2) == 0.;
112 int counter< SquaredDistance3D >::N(0);
117 int counter< SquaredDistance2Dxy >::N(0);
122 int counter< SquaredDistance1Dx >::N(0);
129 template<
class Var,
typename ... otherTypes>
131 const otherTypes& ...)
150 EXPECT_TRUE(range.contains(0.5));
151 EXPECT_FALSE(range.contains(-1.));
152 EXPECT_FALSE(range.contains(0.));
153 EXPECT_FALSE(range.contains(1.));
154 EXPECT_FALSE(range.contains(2.));
155 EXPECT_EQ(0. , range.getInf());
156 EXPECT_EQ(1. , range.getSup());
164 EXPECT_TRUE(range.contains(0.5));
165 EXPECT_FALSE(range.contains(-1.));
166 EXPECT_TRUE(range.contains(0.));
167 EXPECT_TRUE(range.contains(1.));
168 EXPECT_FALSE(range.contains(2.));
169 EXPECT_EQ(0. , range.getInf());
170 EXPECT_EQ(1. , range.getSup());
179 EXPECT_TRUE(upperBoundedSet.contains(-1.));
180 EXPECT_FALSE(upperBoundedSet.contains(0.));
181 EXPECT_FALSE(upperBoundedSet.contains(1.));
182 EXPECT_EQ(0. , upperBoundedSet.getSup());
190 EXPECT_TRUE(upperBoundedSet.contains(-1.));
191 EXPECT_TRUE(upperBoundedSet.contains(0.));
192 EXPECT_FALSE(upperBoundedSet.contains(1.));
193 EXPECT_EQ(0. , upperBoundedSet.getSup());
202 EXPECT_TRUE(lowerBoundedSet.contains(1.));
203 EXPECT_FALSE(lowerBoundedSet.contains(0.));
204 EXPECT_FALSE(lowerBoundedSet.contains(-1.));
205 EXPECT_EQ(0. , lowerBoundedSet.getInf());
213 EXPECT_TRUE(lowerBoundedSet.contains(1.));
214 EXPECT_TRUE(lowerBoundedSet.contains(0.));
215 EXPECT_FALSE(lowerBoundedSet.contains(-1.));
216 EXPECT_EQ(0. , lowerBoundedSet.getInf());
221 TEST_F(FilterTest, SelectionVariableName)
224 EXPECT_EQ(
"SquaredDistance3D" , SquaredDistance3D().name());
229 TEST_F(FilterTest, BasicFilter)
234 spacePoint x1(0.0f , 0.0f, 0.0f);
235 spacePoint x2(0.5f , 0.0f, 0.0f);
236 spacePoint x3(2.0f , 0.0f, 0.0f);
238 EXPECT_TRUE(
filter.accept(x1, x2));
239 EXPECT_FALSE(
filter.accept(x1, x3));
245 TEST_F(FilterTest, ObservedFilter)
251 spacePoint x1(0.0f , 0.0f, 0.0f);
252 spacePoint x2(0.5f , 0.0f, 0.0f);
253 spacePoint x3(2.0f , 0.0f, 0.0f);
254 counter< SquaredDistance3D >::N = 0;
256 EXPECT_TRUE(
filter.accept(x1, x2));
257 EXPECT_FALSE(
filter.accept(x1, x3));
258 EXPECT_EQ(2 , counter< SquaredDistance3D >::N);
262 TEST_F(FilterTest, SwitchingObservers)
267 (-10. <= SquaredDistance3D() <= 10.) &&
269 ((-100. <= SquaredDistance2Dxy() <= -10.) ||
271 (-10. <= SquaredDistance1Dx() <= 10.)) &&
273 !(-10. <= SquaredDistance1Dx() <= -10.)
278 spacePoint x1(0.0f , 0.0f, 0.0f);
279 spacePoint x2(0.5f , 0.0f, 0.0f);
280 spacePoint x3(2.0f , 0.0f, 0.0f);
282 counter< SquaredDistance3D >::N = 0;
283 counter< SquaredDistance1Dx >::N = 0;
284 counter< SquaredDistance2Dxy >::N = 0;
286 dummyFilter.accept(x1, x2);
287 dummyFilter.accept(x1, x3);
290 EXPECT_EQ(0 , counter< SquaredDistance3D >::N);
291 EXPECT_EQ(0 , counter< SquaredDistance2Dxy >::N);
292 EXPECT_EQ(0 , counter< SquaredDistance1Dx >::N);
297 auto observedDummyFilter = dummyFilter.observe(
Observer());
298 observedDummyFilter.accept(x1, x2);
299 observedDummyFilter.accept(x1, x3);
301 EXPECT_EQ(2 , counter< SquaredDistance3D >::N);
302 EXPECT_EQ(2 , counter< SquaredDistance2Dxy >::N);
304 EXPECT_EQ(4 , counter< SquaredDistance1Dx >::N);
309 TEST_F(FilterTest, BypassableFilter)
311 bool bypassControl(
false);
314 auto filter = nonBypassableFilter.bypass(bypassControl);
315 spacePoint x1(0.0f , 0.0f, 0.0f);
316 spacePoint x2(2.0f , 0.0f, 0.0f);
317 counter< SquaredDistance3D >::N = 0;
319 EXPECT_FALSE(
filter.accept(x1, x2));
320 EXPECT_EQ(1 , counter< SquaredDistance3D >::N);
322 bypassControl =
true;
323 EXPECT_TRUE(
filter.accept(x1, x2));
324 EXPECT_EQ(2 , counter< SquaredDistance3D >::N);
330 TEST_F(FilterTest, Shortcuts)
333 spacePoint x1(0.0f , 0.0f, 0.0f);
334 spacePoint x2(0.5f , 0.0f, 0.0f);
335 spacePoint x3(2.0f , 0.0f, 0.0f);
336 spacePoint x4(1.0f , 0.0f, 0.0f);
338 auto filterSup = (SquaredDistance3D() < 1.) ;
339 EXPECT_TRUE(filterSup.accept(x1, x2));
340 EXPECT_FALSE(filterSup.accept(x1, x4));
341 EXPECT_FALSE(filterSup.accept(x1, x3));
343 auto filterMax = (SquaredDistance3D() <= 1.) ;
344 EXPECT_TRUE(filterMax.accept(x1, x2));
345 EXPECT_TRUE(filterMax.accept(x1, x4));
346 EXPECT_FALSE(filterMax.accept(x1, x3));
349 auto filterSup2 = (1 > SquaredDistance3D()) ;
350 EXPECT_TRUE(filterSup2.accept(x1, x2));
351 EXPECT_FALSE(filterSup2.accept(x1, x3));
352 EXPECT_FALSE(filterSup2.accept(x1, x4));
354 auto filterMax2 = (1 >= SquaredDistance3D()) ;
355 EXPECT_TRUE(filterMax2.accept(x1, x2));
356 EXPECT_FALSE(filterMax2.accept(x1, x3));
357 EXPECT_TRUE(filterMax2.accept(x1, x4));
359 auto filterInf = (SquaredDistance3D() > 1.) ;
360 EXPECT_TRUE(filterInf.accept(x1, x3));
361 EXPECT_FALSE(filterInf.accept(x1, x2));
362 EXPECT_FALSE(filterInf.accept(x1, x4));
364 auto filterMin = (SquaredDistance3D() >= 1.) ;
365 EXPECT_TRUE(filterMin.accept(x1, x3));
366 EXPECT_FALSE(filterMin.accept(x1, x2));
367 EXPECT_TRUE(filterMin.accept(x1, x4));
369 auto filterInf2 = (1 < SquaredDistance3D()) ;
370 EXPECT_TRUE(filterInf2.accept(x1, x3));
371 EXPECT_FALSE(filterInf2.accept(x1, x2));
372 EXPECT_FALSE(filterInf2.accept(x1, x4));
374 auto filterMin2 = (1 <= SquaredDistance3D()) ;
375 EXPECT_TRUE(filterMin2.accept(x1, x3));
376 EXPECT_FALSE(filterMin2.accept(x1, x2));
377 EXPECT_TRUE(filterMin2.accept(x1, x4));
379 auto filterRange = (0. < SquaredDistance3D() < 1);
380 EXPECT_FALSE(filterRange.accept(x1, x1));
381 EXPECT_TRUE(filterRange.accept(x1, x2));
382 EXPECT_FALSE(filterRange.accept(x1, x3));
383 EXPECT_FALSE(filterRange.accept(x1, x4));
386 auto filterClosedRange = (0. <= SquaredDistance3D() <= 1);
387 EXPECT_TRUE(filterClosedRange.accept(x1, x1));
388 EXPECT_TRUE(filterClosedRange.accept(x1, x2));
389 EXPECT_FALSE(filterClosedRange.accept(x1, x3));
390 EXPECT_TRUE(filterClosedRange.accept(x1, x4));
396 TEST_F(FilterTest, BooleanOperations)
400 spacePoint x1(0.0f , 0.0f, 0.0f);
401 spacePoint x2(1.0f , 0.0f, 0.0f);
402 spacePoint x3(2.0f , 0.0f, 0.0f);
404 auto filter = !(SquaredDistance3D() > 1.);
405 EXPECT_TRUE(
filter.accept(x1, x2));
406 EXPECT_TRUE(
filter.accept(x1, x1));
407 EXPECT_FALSE(
filter.accept(x1, x3));
410 !(SquaredDistance3D() > 1.) &&
411 !(SquaredDistance3D() < 1);
413 EXPECT_TRUE(filter2.accept(x1, x2));
414 EXPECT_FALSE(filter2.accept(x1, x1));
415 EXPECT_FALSE(filter2.accept(x1, x3));
419 (SquaredDistance3D() > 1.) ||
420 (SquaredDistance3D() < 1);
422 EXPECT_FALSE(filter3.accept(x1, x2));
423 EXPECT_TRUE(filter3.accept(x1, x1));
424 EXPECT_TRUE(filter3.accept(x1, x3));
431 TEST_F(FilterTest, ShortCircuitsEvaluation)
434 (SquaredDistance2Dxy() < 1).observeLeaf(
Observer()) &&
435 (SquaredDistance3D() < 1).observeLeaf(
Observer())
438 spacePoint x1(0.0f , 0.0f, 0.0f);
439 spacePoint x2(1.0f , 0.0f, 0.0f);
440 spacePoint x3(2.0f , 0.0f, 0.0f);
442 counter< SquaredDistance3D >::N = 0;
443 counter< SquaredDistance2Dxy >::N = 0;
445 EXPECT_FALSE(
filter.accept(x1, x3));
448 EXPECT_EQ(1 , counter< SquaredDistance2Dxy >::N);
450 EXPECT_EQ(0 , counter< SquaredDistance3D >::N);
452 EXPECT_TRUE(
filter.accept(x1, x1));
454 EXPECT_EQ(2 , counter< SquaredDistance2Dxy >::N);
456 EXPECT_EQ(1 , counter< SquaredDistance3D >::N);
462 TEST_F(FilterTest, BooleanVariableShortcuts)
464 auto filter1(BooleanVariable() ==
true);
465 auto filter2(
false == BooleanVariable());
466 spacePoint x1(0.0f , 0.0f, 0.0f);
467 spacePoint x2(1.0f , 0.0f, 0.0f);
469 EXPECT_TRUE(filter1.accept(x1, x1));
470 EXPECT_FALSE(filter1.accept(x1, x2));
473 EXPECT_FALSE(filter2.accept(x1, x1));
474 EXPECT_TRUE(filter2.accept(x1, x2));