GCC Code Coverage Report


Directory: ./
File: src/util/numerical/biplaneIntersection.test.cc
Date: 2025-09-01 06:19:01
Exec Total Coverage
Lines: 78 78 100.0%
Functions: 18 18 100.0%
Branches: 66 99 66.7%

Line Branch Exec Source
1 #include "na64util/numerical/biplaneIntersection.h"
2 #include "na64util/numerical/linalg.hh"
3
4 #include <gtest/gtest.h>
5
6 8 TEST(biplaneIntersection, findsEquidistantPointOnSkewAxesCaseZero) {
7 2 na64dp::util::Vec3 k1{{2, 0, 0}}, r01{{-1, 0, -1}}
8 2 , k2{{0, 2, 0}}, r02{{ 0, -1, 1}}
9 ;
10 na64dp::util::Float_t eqp[3];
11
1/1
✓ Branch 1 taken 1 times.
2 int rc = na64sw_projected_lines_intersection( k1.r, k2.r, NULL
12 , r01.r, r02.r
13 , eqp, NULL
14 2 );
15
3/5
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(rc, 0);
16
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(eqp[0], 0, 1e-6);
17
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(eqp[1], 0, 1e-6);
18
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(eqp[2], 0, 1e-6);
19 }
20
21 8 TEST(biplaneIntersection, findsQuasiIntersectingPointsOnSkewAxesCaseZero) {
22 2 na64dp::util::Vec3 k1{{1, 0, 0}}, r01{{-1, 0, -1}}
23 2 , k2{{0, 1, 0}}, r02{{ 0, -1, 1}}
24 2 , k3{{0, 0, 1}}
25 ;
26 na64dp::util::Float_t x1[3], x2[3];
27
1/1
✓ Branch 1 taken 1 times.
2 int rc = na64sw_projected_lines_intersection( k1.r, k2.r, k3.r
28 , r01.r, r02.r
29 , x1, x2
30 2 );
31
3/5
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(rc, 0);
32
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(x1[0], 0, 1e-6);
33
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(x1[1], 0, 1e-6);
34
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(x1[2],-1, 1e-6);
35
36
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(x2[0], 0, 1e-6);
37
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(x2[1], 0, 1e-6);
38
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(x2[2], 1, 1e-6);
39 }
40
41 8 TEST(biplaneIntersection, findsRealIntersectionAtZero) {
42 2 na64dp::util::Vec3 k1{{1, 0, 0}}, r01{{ 0, 0, 0}}
43 2 , k2{{0, 1, 0}}, r02{{ 0, 0, 0}}
44 2 , k3{{0, 0, 1}}
45 ;
46 na64dp::util::Float_t x1[3], x2[3];
47
1/1
✓ Branch 1 taken 1 times.
2 int rc = na64sw_projected_lines_intersection( k1.r, k2.r, k3.r
48 , r01.r, r02.r
49 , x1, x2
50 2 );
51
3/5
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(rc, 0);
52
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(x1[0], 0, 1e-6);
53
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(x1[1], 0, 1e-6);
54
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(x1[2], 0, 1e-6);
55
56
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(x2[0], 0, 1e-6);
57
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(x2[1], 0, 1e-6);
58
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(x2[2], 0, 1e-6);
59 }
60
61 8 TEST(biplaneIntersection, findsRealIntersectionNonZeroAlmostParallelLines) {
62 // this is really bad case as direction vectors differ slightly, so for
63 // the control we increase tolerance up to 10um
64 2 na64dp::util::Vec3 p0 = { 0.33, -0.24, 17.23}
65 2 , k1 = { -0.01, 123.45, 10}
66 2 , k2 = { +0.01, 123.12, 9.87}
67 2 , r01 = p0 + k1*2
68 2 , r02 = p0 + k2*0.123
69 ;
70 na64dp::util::Float_t eqp[3];
71
1/1
✓ Branch 1 taken 1 times.
2 int rc = na64sw_projected_lines_intersection( k1.r, k2.r, NULL
72 , r01.r, r02.r
73 , eqp, NULL
74 2 );
75
3/5
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(rc, 0);
76
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(eqp[0], p0.c.x, 1e-3);
77
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(eqp[1], p0.c.y, 1e-3);
78
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(eqp[2], p0.c.z, 1e-3);
79 }
80
81 8 TEST(biplaneIntersection, findsRealIntersectionNonZero) {
82 2 na64dp::util::Vec3 p0 = { 0.33, -0.24, 17.23}
83 2 , k1 = { -0.01, 123.45, 10}
84 2 , k2 = { 12, -2, 3.15}
85 2 , r01 = p0 + k1*2
86 2 , r02 = p0 + k2*0.123
87 ;
88 na64dp::util::Float_t eqp[3];
89
1/1
✓ Branch 1 taken 1 times.
2 int rc = na64sw_projected_lines_intersection( k1.r, k2.r, NULL
90 , r01.r, r02.r
91 , eqp, NULL
92 2 );
93
3/5
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_EQ(rc, 0);
94
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(eqp[0], p0.c.x, 1e-3);
95
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(eqp[1], p0.c.y, 1e-3);
96
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_NEAR(eqp[2], p0.c.z, 1e-3);
97 }
98
99 8 TEST(biplaneIntersection, detectsParallelLines) {
100 2 na64dp::util::Vec3 p0 = { 0.33, -0.24, 17.23}
101 2 , k1 = { -0.01, 123.45, 10}
102 2 , r01 = p0 + k1*2
103 2 , r02 = p0 + k1*0.123
104 ;
105 na64dp::util::Float_t eqp[3];
106
1/1
✓ Branch 1 taken 1 times.
2 int rc = na64sw_projected_lines_intersection( k1.r, k1.r, NULL
107 , r01.r, r02.r
108 , eqp, NULL
109 2 );
110
3/5
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 ASSERT_NE(rc, 0);
111 }
112
113 4 TEST(biplaneIntersection, genericCaseOne) {
114 // ...
115 1 na64dp::util::Vec3 r01{{-1.37063, -0.19879, 51.7479}}
116 1 , r02{{ 0.854195, 2.52535, 49.494 }}
117 1 , l1{{ 3.22572, 8.85461, 4.85289}}
118 1 , l2{{-10.5628, -0.699319, -0.54637}}
119 ;
120 na64dp::util::Float_t eqp[3];
121 1 int rc = na64sw_projected_lines_intersection( l1.r, l2.r, NULL
122 , r01.r, r02.r
123 , eqp, NULL
124 1 );
125 1 ASSERT_EQ(rc, 0);
126 1 EXPECT_NEAR(eqp[0], -0.973615, 1e-5);
127 1 EXPECT_NEAR(eqp[1], 1.61684, 1e-5);
128 1 EXPECT_NEAR(eqp[2], 50.8556, 1e-5);
129 }
130
131