INSTINCT Code Coverage Report


Directory: src/
File: Navigation/GNSS/SystemModel/Units.cpp
Date: 2025-02-07 16:54:41
Exec Total Coverage
Lines: 56 96 58.3%
Functions: 9 12 75.0%
Branches: 27 102 26.5%

Line Branch Exec Source
1 // This file is part of INSTINCT, the INS Toolkit for Integrated
2 // Navigation Concepts and Training by the Institute of Navigation of
3 // the University of Stuttgart, Germany.
4 //
5 // This Source Code Form is subject to the terms of the Mozilla Public
6 // License, v. 2.0. If a copy of the MPL was not distributed with this
7 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
8
9 #include "Units.hpp"
10
11 #include <cmath>
12 #include "util/Logger.hpp"
13
14 namespace NAV::Units
15 {
16
17 void to_json(json& j, const CovarianceAccelUnits& data)
18 {
19 j = to_string(data);
20 }
21 1 void from_json(const json& j, CovarianceAccelUnits& data)
22 {
23
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
1 if (!j.is_string())
24 {
25 LOG_WARN("Could not parse '{}' into CovarianceAccelUnits. Consider resaving the flow", j.dump());
26 1 return;
27 }
28
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::string str = j.get<std::string>();
29
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 for (size_t i = 0; i < static_cast<size_t>(CovarianceAccelUnits::COUNT); i++)
30 {
31 2 auto enumItem = static_cast<CovarianceAccelUnits>(i);
32
3/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 1 times.
2 if (str == to_string(enumItem))
33 {
34 1 data = enumItem;
35 1 return;
36 }
37 }
38 1 }
39
40 void to_json(json& j, const CovarianceClkPhaseDriftUnits& data)
41 {
42 j = to_string(data);
43 }
44 2 void from_json(const json& j, CovarianceClkPhaseDriftUnits& data)
45 {
46
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
2 if (!j.is_string())
47 {
48 LOG_WARN("Could not parse '{}' into CovarianceClkPhaseDriftUnits. Consider resaving the flow", j.dump());
49 2 return;
50 }
51
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 std::string str = j.get<std::string>();
52
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 for (size_t i = 0; i < static_cast<size_t>(CovarianceClkPhaseDriftUnits::COUNT); i++)
53 {
54 2 auto enumItem = static_cast<CovarianceClkPhaseDriftUnits>(i);
55
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 if (str == to_string(enumItem))
56 {
57 2 data = enumItem;
58 2 return;
59 }
60 }
61 2 }
62
63 void to_json(json& j, const CovarianceClkFrequencyDriftUnits& data)
64 {
65 j = to_string(data);
66 }
67 1 void from_json(const json& j, CovarianceClkFrequencyDriftUnits& data)
68 {
69
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
1 if (!j.is_string())
70 {
71 LOG_WARN("Could not parse '{}' into CovarianceClkFrequencyDriftUnits. Consider resaving the flow", j.dump());
72 1 return;
73 }
74
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::string str = j.get<std::string>();
75
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
1 for (size_t i = 0; i < static_cast<size_t>(CovarianceClkFrequencyDriftUnits::COUNT); i++)
76 {
77 1 auto enumItem = static_cast<CovarianceClkFrequencyDriftUnits>(i);
78
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
1 if (str == to_string(enumItem))
79 {
80 1 data = enumItem;
81 1 return;
82 }
83 }
84 1 }
85
86 } // namespace NAV::Units
87
88 48 double NAV::convertUnit(const double& value, Units::CovarianceAccelUnits unit)
89 {
90 // Covariance of the acceleration 𝜎_a due to user motion in horizontal and vertical component [m²/s³]
91
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
48 switch (unit)
92 {
93 case Units::CovarianceAccelUnits::m2_s3:
94 return value;
95 48 case Units::CovarianceAccelUnits::m_sqrts3:
96 48 return std::pow(value, 2);
97 case Units::CovarianceAccelUnits::COUNT:
98 break;
99 }
100 return value;
101 }
102
103 34 double NAV::convertUnit(const double& value, Units::CovarianceClkPhaseDriftUnits unit)
104 {
105 // Covariance of the clock phase drift [m²/s]
106
1/4
✓ Branch 0 taken 34 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
34 switch (unit)
107 {
108 34 case Units::CovarianceClkPhaseDriftUnits::m2_s:
109 34 return value;
110 case Units::CovarianceClkPhaseDriftUnits::m_sqrts:
111 return std::pow(value, 2);
112 case Units::CovarianceClkPhaseDriftUnits::COUNT:
113 break;
114 }
115 return value;
116 }
117
118 24 double NAV::convertUnit(const double& value, Units::CovarianceClkFrequencyDriftUnits unit)
119 {
120 // Covariance of the frequency phase drift [m²/s³]
121
1/4
✓ Branch 0 taken 24 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
24 switch (unit)
122 {
123 24 case Units::CovarianceClkFrequencyDriftUnits::m2_s3:
124 24 return value;
125 case Units::CovarianceClkFrequencyDriftUnits::m_sqrts3:
126 return std::pow(value, 2);
127 case Units::CovarianceClkFrequencyDriftUnits::COUNT:
128 break;
129 }
130 return value;
131 }
132
133 2 std::string NAV::to_string(Units::CovarianceAccelUnits unit)
134 {
135
2/4
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
2 switch (unit)
136 {
137 1 case Units::CovarianceAccelUnits::m2_s3:
138
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 return "m^2/s^3";
139 1 case Units::CovarianceAccelUnits::m_sqrts3:
140
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 return "m/√(s^3)";
141 case Units::CovarianceAccelUnits::COUNT:
142 break;
143 }
144 return "";
145 }
146
147 2 std::string NAV::to_string(Units::CovarianceClkPhaseDriftUnits unit)
148 {
149
1/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
2 switch (unit)
150 {
151 2 case Units::CovarianceClkPhaseDriftUnits::m2_s:
152
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
4 return "m^2/s";
153 case Units::CovarianceClkPhaseDriftUnits::m_sqrts:
154 return "m/√s";
155 case Units::CovarianceClkPhaseDriftUnits::COUNT:
156 break;
157 }
158 return "";
159 }
160
161 1 std::string NAV::to_string(Units::CovarianceClkFrequencyDriftUnits unit)
162 {
163
1/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1 switch (unit)
164 {
165 1 case Units::CovarianceClkFrequencyDriftUnits::m2_s3:
166
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 return "m^2/s^3";
167 case Units::CovarianceClkFrequencyDriftUnits::m_sqrts3:
168 return "m/√(s^3)";
169 case Units::CovarianceClkFrequencyDriftUnits::COUNT:
170 break;
171 }
172 return "";
173 }
174