46TEST_F(TestOpalDrift, CircleDefaultsMatchDefaultApertureBehaviour) {
47 auto noAperture = makeDrift(std::nullopt);
48 auto circle = makeDrift(
"CIRCLE(1)");
49 auto conicCircle = makeDrift(
"CIRCLE(1,1)");
51 ElementBase* noApertureElement = noAperture->getElement();
53 ElementBase* conicCircleElement = conicCircle->getElement();
55 ASSERT_NE(noApertureElement,
nullptr);
56 ASSERT_NE(circleElement,
nullptr);
57 ASSERT_NE(conicCircleElement,
nullptr);
59 const std::vector<Vector_t<double, 3>> probes = {
60 {0.00, 0.00, 0.20}, {0.20, 0.10, 1.00}, {0.49, 0.00, 0.20}, {0.49, 0.00, 1.00},
61 {0.49, 0.00, 1.80}, {0.50, 0.00, 1.00}, {0.00, 0.50, 1.00}, {0.36, 0.36, 1.00},
62 {0.40, 0.40, 1.00}, {0.00, 0.00, -0.10}, {0.00, 0.00, 2.00}};
67 <<
"Probe point (" << r[0] <<
", " << r[1] <<
", " << r[2] <<
")");
73TEST_F(TestOpalDrift, SquareAndRectangleEquivalentBehaviour) {
74 auto rectangle = makeDrift(
"RECTANGLE(1,1)");
75 auto conicRectangle = makeDrift(
"RECTANGLE(1,1,1)");
76 auto square = makeDrift(
"SQUARE(1)");
77 auto conicSquare = makeDrift(
"SQUARE(1,1)");
79 ElementBase* rectangleElement = rectangle->getElement();
80 ElementBase* conicRectangleElement = conicRectangle->getElement();
82 ElementBase* conicSquareElement = conicSquare->getElement();
84 ASSERT_NE(rectangleElement,
nullptr);
85 ASSERT_NE(conicRectangleElement,
nullptr);
86 ASSERT_NE(squareElement,
nullptr);
87 ASSERT_NE(conicSquareElement,
nullptr);
89 const std::vector<Vector_t<double, 3>> probes = {
90 {0.00, 0.00, 0.20}, {0.49, 0.49, 1.00}, {0.49, 0.10, 1.80}, {0.10, 0.49, 0.20},
91 {0.50, 0.10, 1.00}, {0.10, 0.50, 1.00}, {0.60, 0.40, 1.00}, {0.40, 0.60, 1.00},
92 {0.00, 0.00, -0.10}, {0.00, 0.00, 2.00}};
97 <<
"Probe point (" << r[0] <<
", " << r[1] <<
", " << r[2] <<
")");
98 const bool expected = rectangleElement->
isInside(r);
99 EXPECT_EQ(expected, conicRectangleElement->
isInside(r));
100 EXPECT_EQ(expected, squareElement->
isInside(r));
101 EXPECT_EQ(expected, conicSquareElement->
isInside(r));
105TEST_F(TestOpalDrift, ConicCircleOpeningBehaviour) {
106 auto conicCircle = makeDrift(
"CIRCLE(1,2)");
107 ElementBase* conicCircleElement = conicCircle->getElement();
109 ASSERT_NE(conicCircleElement,
nullptr);
112 EXPECT_TRUE(conicCircleElement->
isInside(centerline));
118 EXPECT_FALSE(conicCircleElement->
isInside(startProbe));
119 EXPECT_FALSE(conicCircleElement->
isInside(middleProbe));
120 EXPECT_TRUE(conicCircleElement->
isInside(endProbe));
123TEST_F(TestOpalDrift, ConicCircleClosingBehaviour) {
124 auto conicCircle = makeDrift(
"CIRCLE(1,0.5)");
125 ElementBase* conicCircleElement = conicCircle->getElement();
127 ASSERT_NE(conicCircleElement,
nullptr);
133 EXPECT_TRUE(conicCircleElement->
isInside(startProbe));
134 EXPECT_FALSE(conicCircleElement->
isInside(middleProbe));
135 EXPECT_FALSE(conicCircleElement->
isInside(endProbe));
138TEST_F(TestOpalDrift, CircleConstantAlongLengthAndLongitudinalBounds) {
139 auto circle = makeDrift(
"CIRCLE(1)");
142 ASSERT_NE(circleElement,
nullptr);
144 const std::vector<Vector_t<double, 3>> insideTransverseInsideLength = {
145 {0.49, 0.00, 0.10}, {0.49, 0.00, 1.00}, {0.49, 0.00, 1.90}};
147 EXPECT_TRUE(circleElement->
isInside(r));
150 const std::vector<Vector_t<double, 3>> outsideTransverseInsideLength = {
151 {0.51, 0.00, 0.10}, {0.51, 0.00, 1.00}, {0.51, 0.00, 1.90}};
153 EXPECT_FALSE(circleElement->
isInside(r));
171TEST_F(TestOpalDrift, ConicEllipseOpeningBehaviour) {
172 auto conicEllipse = makeDrift(
"ELLIPSE(1,1,2)");
173 ElementBase* conicEllipseElement = conicEllipse->getElement();
175 ASSERT_NE(conicEllipseElement,
nullptr);
181 EXPECT_FALSE(conicEllipseElement->
isInside(startProbe));
182 EXPECT_FALSE(conicEllipseElement->
isInside(middleProbe));
183 EXPECT_TRUE(conicEllipseElement->
isInside(endProbe));