| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include "na64util/transformations.hh" | ||
| 2 | |||
| 3 | #include <gtest/gtest.h> | ||
| 4 | |||
| 5 | namespace na64dp { | ||
| 6 | |||
| 7 | using util::Vec3; | ||
| 8 | using util::Matrix3; | ||
| 9 | using util::Float_t; | ||
| 10 | |||
| 11 | 8 | TEST(Transformation, simpleUzRotationIsValid) { | |
| 12 | 2 | Vec3 u{{1, 0, 0}}; | |
| 13 | |||
| 14 |
1/1✓ Branch 1 taken 1 times.
|
2 | util::Transformation t; |
| 15 |
1/1✓ Branch 1 taken 1 times.
|
2 | t.angle(0, M_PI/2); |
| 16 |
1/1✓ Branch 1 taken 1 times.
|
2 | t.apply(u); |
| 17 | |||
| 18 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR(u.c.x, 0, 1e-6); |
| 19 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR(u.c.y, 1, 1e-6); |
| 20 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR(u.c.z, 0, 1e-6); |
| 21 | 2 | } | |
| 22 | |||
| 23 | 8 | TEST(Transformation, sizedUzRotationIsValid) { | |
| 24 | 2 | Vec3 u{{10, 0, 0}}; | |
| 25 | |||
| 26 |
1/1✓ Branch 1 taken 1 times.
|
2 | util::Transformation t; |
| 27 |
1/1✓ Branch 1 taken 1 times.
|
2 | t.angle(0, M_PI/2); |
| 28 |
1/1✓ Branch 1 taken 1 times.
|
2 | t.apply(u); |
| 29 | |||
| 30 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR(u.c.x, 0, 1e-6); |
| 31 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR(u.c.y, 10, 1e-6); |
| 32 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR(u.c.z, 0, 1e-6); |
| 33 | 2 | } | |
| 34 | |||
| 35 | 8 | TEST(Transformation, simpleUvRotationIsValid) { | |
| 36 | 2 | Vec3 v{{0, 1, 0}}; | |
| 37 | |||
| 38 |
1/1✓ Branch 1 taken 1 times.
|
2 | util::Transformation t; |
| 39 |
1/1✓ Branch 1 taken 1 times.
|
2 | t.angle(0, M_PI/2); |
| 40 |
1/1✓ Branch 1 taken 1 times.
|
2 | t.apply(v); |
| 41 | |||
| 42 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR(v.c.x, -1, 1e-6); |
| 43 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR(v.c.y, 0, 1e-6); |
| 44 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR(v.c.z, 0, 1e-6); |
| 45 | 2 | } | |
| 46 | |||
| 47 | 8 | TEST(Transformation, sizedUvRotationIsValid) { | |
| 48 | 2 | Vec3 v{{0, 10, 0}}; | |
| 49 | |||
| 50 |
1/1✓ Branch 1 taken 1 times.
|
2 | util::Transformation t; |
| 51 |
1/1✓ Branch 1 taken 1 times.
|
2 | t.angle(0, M_PI/2); |
| 52 |
1/1✓ Branch 1 taken 1 times.
|
2 | t.apply(v); |
| 53 | |||
| 54 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR(v.c.x,-10, 1e-6); |
| 55 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR(v.c.y, 0, 1e-6); |
| 56 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR(v.c.z, 0, 1e-6); |
| 57 | 2 | } | |
| 58 | |||
| 59 | 8 | TEST(Transformation, arbitraryVectorRotation) { | |
| 60 | 2 | Vec3 v{{-2.12, 12.2, -3.87}}; | |
| 61 | // NOTE: x, y, z angles here, but internal rotation is applied in order z,y,x | ||
| 62 | //const Float_t rot[3] = {M_PI/3, -M_PI/16, 3*M_PI/4}; | ||
| 63 | //util::apply_std_rotation(v, rot); | ||
| 64 | |||
| 65 |
1/1✓ Branch 1 taken 1 times.
|
2 | util::Transformation t; |
| 66 |
1/1✓ Branch 1 taken 1 times.
|
2 | t.angle(0, 3*M_PI/4); |
| 67 |
1/1✓ Branch 1 taken 1 times.
|
2 | t.angle(1, -M_PI/16); |
| 68 |
1/1✓ Branch 1 taken 1 times.
|
2 | t.angle(2, M_PI/3); |
| 69 |
1/1✓ Branch 1 taken 1 times.
|
2 | t.apply(v); |
| 70 | |||
| 71 | // -4.02239429, -9.34407109, 8.05108562 | ||
| 72 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR(v.c.x, -4.02239429, 1e-6); |
| 73 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR(v.c.y, -9.34407109, 1e-6); |
| 74 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR(v.c.z, 8.05108562, 1e-6); |
| 75 | 2 | } | |
| 76 | |||
| 77 | |||
| 78 | 8 | TEST(Transformation, initialOffsetIsCorrect) { | |
| 79 |
1/1✓ Branch 1 taken 1 times.
|
2 | util::Transformation T; |
| 80 | |||
| 81 |
2/3✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
2 | EXPECT_NEAR( (Vec3{{0, 0, 0}} - T.o()).norm(), 0, 1e-6 ); |
| 82 | 2 | } | |
| 83 | |||
| 84 | 8 | TEST(Transformation, offsetGetSetWorks) { | |
| 85 |
1/1✓ Branch 1 taken 1 times.
|
2 | util::Transformation T; |
| 86 | 2 | T.o(Vec3{{1, 2, 3}}); | |
| 87 |
2/3✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
2 | EXPECT_NEAR( (Vec3{{1, 2, 3}} - T.o()).norm(), 0, 1e-6 ); |
| 88 | 2 | } | |
| 89 | |||
| 90 | 8 | TEST(Transformation, initialBasisIsCorrect) { | |
| 91 |
1/1✓ Branch 1 taken 1 times.
|
2 | util::Transformation T; |
| 92 | |||
| 93 |
2/3✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
2 | EXPECT_NEAR( (Vec3{{1, 0, 0}} - T.u()).norm(), 0, 1e-6 ); |
| 94 |
2/3✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
2 | EXPECT_NEAR( (Vec3{{0, 1, 0}} - T.v()).norm(), 0, 1e-6 ); |
| 95 |
2/3✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
2 | EXPECT_NEAR( (Vec3{{0, 0, 1}} - T.w()).norm(), 0, 1e-6 ); |
| 96 | 2 | } | |
| 97 | |||
| 98 | 8 | TEST(Transformation, basisGetSetWorks) { | |
| 99 |
1/1✓ Branch 1 taken 1 times.
|
2 | util::Transformation T; |
| 100 | |||
| 101 | 2 | T.u(Vec3{{0, 0, 1}}); | |
| 102 | 2 | T.v(Vec3{{1, 0, 1}}); | |
| 103 | 2 | T.w(Vec3{{1, 1, 1}}); | |
| 104 | |||
| 105 |
2/3✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
2 | EXPECT_NEAR( (Vec3{{0, 0, 1}} - T.u()).norm(), 0, 1e-6 ); |
| 106 |
2/3✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
2 | EXPECT_NEAR( (Vec3{{1, 0, 1}} - T.v()).norm(), 0, 1e-6 ); |
| 107 |
2/3✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
2 | EXPECT_NEAR( (Vec3{{1, 1, 1}} - T.w()).norm(), 0, 1e-6 ); |
| 108 | 2 | } | |
| 109 | |||
| 110 | 8 | TEST(Transformation, initialAnglesAreCorrect) { | |
| 111 |
1/1✓ Branch 1 taken 1 times.
|
2 | util::Transformation T; |
| 112 | |||
| 113 |
3/4✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
2 | EXPECT_NEAR( T.angle(0), 0, 1e-6 ); |
| 114 |
3/4✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
2 | EXPECT_NEAR( T.angle(1), 0, 1e-6 ); |
| 115 |
3/4✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
2 | EXPECT_NEAR( T.angle(2), 0, 1e-6 ); |
| 116 | 2 | } | |
| 117 | |||
| 118 | 8 | TEST(Transformation, anglesGetSetWorks) { | |
| 119 |
1/1✓ Branch 1 taken 1 times.
|
2 | util::Transformation T; |
| 120 | |||
| 121 |
1/1✓ Branch 1 taken 1 times.
|
2 | T.angle(2, 2.34); |
| 122 |
1/1✓ Branch 1 taken 1 times.
|
2 | T.angle(0, 0.12); |
| 123 |
1/1✓ Branch 1 taken 1 times.
|
2 | T.angle(1, 1.23); |
| 124 | |||
| 125 |
3/4✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
2 | EXPECT_NEAR( T.angle(0), 0.12, 1e-6 ); |
| 126 |
3/4✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
2 | EXPECT_NEAR( T.angle(1), 1.23, 1e-6 ); |
| 127 |
3/4✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
|
2 | EXPECT_NEAR( T.angle(2), 2.34, 1e-6 ); |
| 128 | 2 | } | |
| 129 | |||
| 130 | // these values were pre-calculated for sample given below | ||
| 131 | static Float_t _gTransformedVectorSamples[][2][3] = { | ||
| 132 | {{7.734556e+00, 1.062882e+01, 1.984666e+00}, {-4.492330e+01, 2.586341e+02, 3.246454e+01}}, | ||
| 133 | {{4.677710e+00, 8.355586e+00, 1.950938e+00}, {-2.818364e+01, 1.985020e+02, 3.786228e+01}}, | ||
| 134 | {{9.483337e+00, 9.465663e+00, 6.241140e+00}, {-8.540511e+01, 2.388219e+02, 2.319455e+01}}, | ||
| 135 | {{2.157431e+00, 6.181000e+00, 9.541237e+00}, {-5.366580e+01, 1.417398e+02, 6.257688e+01}}, | ||
| 136 | {{3.762719e+00, 9.179159e+00, 5.416733e+00}, {-3.462582e+01, 2.131077e+02, 6.119522e+01}}, | ||
| 137 | {{9.065874e+00, 2.088812e+00, 4.908827e+00}, {-1.043431e+02, 7.620484e+01, -3.369938e+01}}, | ||
| 138 | {{8.711467e+00, 8.200485e+00, 8.451773e+00}, {-9.500193e+01, 2.083453e+02, 2.587281e+01}}, | ||
| 139 | {{6.832368e-01, 7.340059e+00, 1.080566e+01}, {-4.310456e+01, 1.619517e+02, 8.611005e+01}}, | ||
| 140 | {{2.134734e+00, 1.008227e+01, 1.028308e+01}, {-4.180284e+01, 2.269067e+02, 9.458950e+01}}, | ||
| 141 | {{5.658832e-02, 2.580660e+00, 7.324582e+00}, {-3.922784e+01, 5.602782e+01, 4.430639e+01}} | ||
| 142 | }; | ||
| 143 | |||
| 144 | 8 | TEST(Transformation, arbitraryTransformWorks) { | |
| 145 | 2 | const Vec3 u = {{ 10.23, 0.34, 5.67}} | |
| 146 | 2 | , v = {{ -0.001, -23.45, -1.23}} | |
| 147 | 2 | , w = {{ -1.23, -0.34, 5.67}} | |
| 148 | 2 | , o = {{-12.3, 5e-7, 3.43783}} | |
| 149 | ; | ||
| 150 | 2 | const Float_t angles[] = {-M_PI/123, -2*M_PI/5, 7*M_PI/8}; | |
| 151 | util::Transformation T( o, u, v, w | ||
| 152 | 2 | , angles[0], angles[1], angles[2] | |
| 153 | , na64sw_Rotation_xyz | ||
| 154 |
1/1✓ Branch 1 taken 1 times.
|
2 | ); |
| 155 | // check general validity with getters | ||
| 156 |
2/3✓ Branch 5 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
2 | EXPECT_NEAR((T.u() - u).norm()/u.norm(), 0, 1e-6); |
| 157 |
2/3✓ Branch 5 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
2 | EXPECT_NEAR((T.v() - v).norm()/v.norm(), 0, 1e-6); |
| 158 |
2/3✓ Branch 5 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
2 | EXPECT_NEAR((T.w() - w).norm()/w.norm(), 0, 1e-6); |
| 159 |
2/3✓ Branch 5 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
2 | EXPECT_NEAR((T.o() - o).norm()/o.norm(), 0, 1e-6); |
| 160 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 1 times.
|
8 | for(int i = 0; i < 3; ++i) { |
| 161 |
3/4✓ Branch 1 taken 3 times.
✓ Branch 4 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 3 times.
|
6 | EXPECT_NEAR(T.angle(i), angles[i], 1e-6); |
| 162 | } | ||
| 163 | // check vs samples | ||
| 164 | 22 | for( size_t n = 0 | |
| 165 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
|
22 | ; n < sizeof(_gTransformedVectorSamples)/sizeof(*_gTransformedVectorSamples) |
| 166 | ; ++n ) { | ||
| 167 | 20 | Vec3 v{{ _gTransformedVectorSamples[n][0][0] | |
| 168 | 20 | , _gTransformedVectorSamples[n][0][1] | |
| 169 | 20 | , _gTransformedVectorSamples[n][0][2] | |
| 170 | 20 | }}; | |
| 171 | 20 | Vec3 ctrl {{ _gTransformedVectorSamples[n][1][0] | |
| 172 | 20 | , _gTransformedVectorSamples[n][1][1] | |
| 173 | 20 | , _gTransformedVectorSamples[n][1][2] | |
| 174 | 20 | }}; | |
| 175 |
1/1✓ Branch 1 taken 10 times.
|
20 | Vec3 t = T(v); |
| 176 | 20 | Vec3 r = t - ctrl; | |
| 177 |
2/3✓ Branch 3 taken 10 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 10 times.
|
20 | EXPECT_NEAR(r.norm()/ctrl.norm(), 0, 1e-6); |
| 178 | } | ||
| 179 | 2 | } | |
| 180 | |||
| 181 | // units | ||
| 182 | |||
| 183 | 8 | TEST(UnitsTransformation, simpleDegToRadUnitsConversionWorks) { | |
| 184 | 2 | float ctrl = 60.; // degrees | |
| 185 |
3/3✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 7 taken 1 times.
|
6 | ctrl *= util::Units::get_units_conversion_factor( "deg", "angle" ); |
| 186 | // ^^^ ctrl should now be in radians | ||
| 187 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR( ctrl |
| 188 | , M_PI/3 | ||
| 189 | 2 | , 1e-6 ); | |
| 190 | 2 | } | |
| 191 | |||
| 192 | 8 | TEST(UnitsTransformation, lengthUnitsConversionWorks) { | |
| 193 | 2 | float ctrl = 126; // 126 mm | |
| 194 |
3/3✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 7 taken 1 times.
|
6 | ctrl *= util::Units::get_units_conversion_factor( "mm", "m" ); |
| 195 |
2/3✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2 | EXPECT_NEAR( ctrl |
| 196 | , 0.126 // m | ||
| 197 | , 1e-6 | ||
| 198 | 2 | ); | |
| 199 | 2 | } | |
| 200 | |||
| 201 | } | ||
| 202 |