GCC Code Coverage Report


libs/base/src/base/
File: axisangle.cc
Date: 2025-03-19 20:55:25
Lines:
21/21
100.0%
Functions:
7/7
100.0%
Branches:
16/34
47.1%

Line Branch Exec Source
1 #include "base/axisangle.h"
2
3 #include "assert/assert.h"
4
5 #include "base/quat.h"
6
7 namespace eu
8 {
9 74 AA::AA(const n3 &ax, const An &ang)
10 74 : axis(ax), angle(ang)
11 {
12
1/4
✗ Branch 0 (3 → 4) not taken.
✓ Branch 1 (3 → 10) taken 74 times.
✗ Branch 2 (7 → 8) not taken.
✗ Branch 3 (7 → 11) not taken.
74 ASSERT(ax.is_valid());
13 74 }
14
15 [[nodiscard]] std::optional<AA>
16 6 AA::from(const Q& q)
17 {
18 6 const float cos_a = q.w;
19
2/4
✓ Branch 0 (2 → 3) taken 6 times.
✗ Branch 1 (2 → 18) not taken.
✓ Branch 2 (3 → 4) taken 6 times.
✗ Branch 3 (3 → 18) not taken.
6 const auto angle = acos(cos_a) * 2;
20 6 const auto sin_a = clamp_zero(std::sqrt(1.0f - cos_a * cos_a), 1, 0.0005f);
21 // todo(Gustav): do we need to normalize here?
22
3/6
✓ Branch 0 (6 → 7) taken 6 times.
✗ Branch 1 (6 → 19) not taken.
✓ Branch 2 (7 → 8) taken 6 times.
✗ Branch 3 (7 → 19) not taken.
✓ Branch 4 (8 → 9) taken 6 times.
✗ Branch 5 (8 → 19) not taken.
6 const auto axis = (q.get_vec_part() / sin_a).get_normalized();
23
2/2
✓ Branch 0 (10 → 11) taken 2 times.
✓ Branch 1 (10 → 12) taken 4 times.
6 if (!axis)
24 2 { return std::nullopt; }
25
1/2
✓ Branch 0 (13 → 14) taken 4 times.
✗ Branch 1 (13 → 21) not taken.
4 return rha(*axis, angle);
26 }
27
28 AA
29 72 rha(const n3 &axis, const An &angle)
30 {
31
1/4
✗ Branch 0 (3 → 4) not taken.
✓ Branch 1 (3 → 10) taken 72 times.
✗ Branch 2 (7 → 8) not taken.
✗ Branch 3 (7 → 16) not taken.
72 ASSERT(axis.is_valid());
32
2/4
✓ Branch 0 (11 → 12) taken 72 times.
✗ Branch 1 (11 → 19) not taken.
✓ Branch 2 (12 → 13) taken 72 times.
✗ Branch 3 (12 → 19) not taken.
72 return {axis, An::from_radians(angle.as_radians())};
33 }
34
35 std::string
36 4 string_from(const AA &aa)
37 {
38 8 return fmt::format("({} {})", aa.axis, aa.angle);
39 }
40
41 std::string
42 2 string_from(const Ypr& x)
43 {
44 4 return fmt::format("({}, {}, {})", x.yaw, x.pitch, x.roll);
45 }
46
47
2/4
✓ Branch 0 (2 → 3) taken 2 times.
✗ Branch 1 (2 → 10) not taken.
✓ Branch 2 (3 → 4) taken 2 times.
✗ Branch 3 (3 → 8) not taken.
2 ADD_CATCH_FORMATTER_IMPL(AA)
48
2/4
✓ Branch 0 (2 → 3) taken 1 times.
✗ Branch 1 (2 → 10) not taken.
✓ Branch 2 (3 → 4) taken 1 times.
✗ Branch 3 (3 → 8) not taken.
1 ADD_CATCH_FORMATTER_IMPL(Ypr)
49 }
50