INSTINCT Code Coverage Report


Directory: src/
File: Navigation/GNSS/SystemModel/Units.cpp
Date: 2025-11-25 23:34:18
Exec Total Coverage
Lines: 56 144 38.9%
Functions: 9 16 56.2%
Branches: 27 152 17.8%

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 #include "Navigation/Transformations/Units.hpp"
14
15 namespace NAV::Units
16 {
17
18 ✗ void to_json(json& j, const CovarianceAccelUnits& data)
19 {
20 ✗ j = to_string(data);
21 ✗ }
22 1 void from_json(const json& j, CovarianceAccelUnits& data)
23 {
24
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
1 if (!j.is_string())
25 {
26 ✗ LOG_WARN("Could not parse '{}' into CovarianceAccelUnits. Consider resaving the flow", j.dump());
27 1 return;
28 }
29
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::string str = j.get<std::string>();
30
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++)
31 {
32 2 auto enumItem = static_cast<CovarianceAccelUnits>(i);
33
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))
34 {
35 1 data = enumItem;
36 1 return;
37 }
38 }
39 1 }
40
41 ✗ void to_json(json& j, const CovarianceAngularVelocityUnits& data)
42 {
43 ✗ j = to_string(data);
44 ✗ }
45 ✗ void from_json(const json& j, CovarianceAngularVelocityUnits& data)
46 {
47 ✗ if (!j.is_string())
48 {
49 ✗ LOG_WARN("Could not parse '{}' into CovarianceAngularVelocityUnits. Consider resaving the flow", j.dump());
50 ✗ return;
51 }
52 ✗ std::string str = j.get<std::string>();
53 ✗ for (size_t i = 0; i < static_cast<size_t>(CovarianceAngularVelocityUnits::COUNT); i++)
54 {
55 ✗ auto enumItem = static_cast<CovarianceAngularVelocityUnits>(i);
56 ✗ if (str == to_string(enumItem))
57 {
58 ✗ data = enumItem;
59 ✗ return;
60 }
61 }
62 ✗ }
63
64 ✗ void to_json(json& j, const CovarianceClkPhaseDriftUnits& data)
65 {
66 ✗ j = to_string(data);
67 ✗ }
68 2 void from_json(const json& j, CovarianceClkPhaseDriftUnits& data)
69 {
70
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
2 if (!j.is_string())
71 {
72 ✗ LOG_WARN("Could not parse '{}' into CovarianceClkPhaseDriftUnits. Consider resaving the flow", j.dump());
73 2 return;
74 }
75
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 std::string str = j.get<std::string>();
76
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++)
77 {
78 2 auto enumItem = static_cast<CovarianceClkPhaseDriftUnits>(i);
79
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))
80 {
81 2 data = enumItem;
82 2 return;
83 }
84 }
85 2 }
86
87 ✗ void to_json(json& j, const CovarianceClkFrequencyDriftUnits& data)
88 {
89 ✗ j = to_string(data);
90 ✗ }
91 1 void from_json(const json& j, CovarianceClkFrequencyDriftUnits& data)
92 {
93
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
1 if (!j.is_string())
94 {
95 ✗ LOG_WARN("Could not parse '{}' into CovarianceClkFrequencyDriftUnits. Consider resaving the flow", j.dump());
96 1 return;
97 }
98
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
1 std::string str = j.get<std::string>();
99
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++)
100 {
101 1 auto enumItem = static_cast<CovarianceClkFrequencyDriftUnits>(i);
102
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))
103 {
104 1 data = enumItem;
105 1 return;
106 }
107 }
108 1 }
109
110 } // namespace NAV::Units
111
112 54 double NAV::convertUnit(const double& value, Units::CovarianceAccelUnits unit)
113 {
114
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 54 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
54 switch (unit)
115 {
116 ✗ case Units::CovarianceAccelUnits::m2_s3:
117 ✗ return value;
118 54 case Units::CovarianceAccelUnits::m_sqrts3:
119 54 return std::pow(value, 2);
120 ✗ case Units::CovarianceAccelUnits::COUNT:
121 ✗ break;
122 }
123 ✗ return value; // Covariance of the acceleration 𝜎_a due to user motion in horizontal and vertical component [m²/s³]
124 }
125
126 ✗ double NAV::convertUnit(const double& value, Units::CovarianceAngularVelocityUnits unit)
127 {
128 ✗ switch (unit)
129 {
130 ✗ case Units::CovarianceAngularVelocityUnits::rad2_s:
131 ✗ return value;
132 ✗ case Units::CovarianceAngularVelocityUnits::rad_sqrts:
133 ✗ return std::pow(value, 2);
134 ✗ case Units::CovarianceAngularVelocityUnits::deg2_s:
135 ✗ return deg2rad(deg2rad(value));
136 ✗ case Units::CovarianceAngularVelocityUnits::deg_sqrts:
137 ✗ return std::pow(deg2rad(value), 2);
138 ✗ case Units::CovarianceAngularVelocityUnits::deg2s_min2:
139 ✗ return deg2rad(deg2rad(value)) / 3600.0;
140 ✗ case Units::CovarianceAngularVelocityUnits::degsqrts_min:
141 ✗ return std::pow(deg2rad(value) / 60.0, 2);
142 ✗ case Units::CovarianceAngularVelocityUnits::COUNT:
143 ✗ break;
144 }
145 ✗ return value; // Covariance of the acceleration 𝜎_a due to user motion in horizontal and vertical component [m²/s³]
146 }
147
148 40 double NAV::convertUnit(const double& value, Units::CovarianceClkPhaseDriftUnits unit)
149 {
150
1/4
✓ Branch 0 taken 40 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
40 switch (unit)
151 {
152 40 case Units::CovarianceClkPhaseDriftUnits::m2_s:
153 40 return value;
154 ✗ case Units::CovarianceClkPhaseDriftUnits::m_sqrts:
155 ✗ return std::pow(value, 2);
156 ✗ case Units::CovarianceClkPhaseDriftUnits::COUNT:
157 ✗ break;
158 }
159 ✗ return value; // Covariance of the clock phase drift [m²/s]
160 }
161
162 27 double NAV::convertUnit(const double& value, Units::CovarianceClkFrequencyDriftUnits unit)
163 {
164
1/4
✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
27 switch (unit)
165 {
166 27 case Units::CovarianceClkFrequencyDriftUnits::m2_s3:
167 27 return value;
168 ✗ case Units::CovarianceClkFrequencyDriftUnits::m_sqrts3:
169 ✗ return std::pow(value, 2);
170 ✗ case Units::CovarianceClkFrequencyDriftUnits::COUNT:
171 ✗ break;
172 }
173 ✗ return value; // Covariance of the frequency phase drift [m²/s³]
174 }
175
176 2 std::string NAV::to_string(Units::CovarianceAccelUnits unit)
177 {
178
2/4
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
2 switch (unit)
179 {
180 1 case Units::CovarianceAccelUnits::m2_s3:
181
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 return "m^2/s^3";
182 1 case Units::CovarianceAccelUnits::m_sqrts3:
183
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 return "m/√(s^3)";
184 ✗ case Units::CovarianceAccelUnits::COUNT:
185 ✗ break;
186 }
187 ✗ return "";
188 }
189
190 ✗ std::string NAV::to_string(Units::CovarianceAngularVelocityUnits unit)
191 {
192 ✗ switch (unit)
193 {
194 ✗ case Units::CovarianceAngularVelocityUnits::rad2_s:
195 ✗ return "rad^2/s";
196 ✗ case Units::CovarianceAngularVelocityUnits::rad_sqrts:
197 ✗ return "rad/√(s)";
198 ✗ case Units::CovarianceAngularVelocityUnits::deg2_s:
199 ✗ return "deg^2/s";
200 ✗ case Units::CovarianceAngularVelocityUnits::deg_sqrts:
201 ✗ return "deg/√(s)";
202 ✗ case Units::CovarianceAngularVelocityUnits::deg2s_min2:
203 ✗ return "deg^2 s/min^2";
204 ✗ case Units::CovarianceAngularVelocityUnits::degsqrts_min:
205 ✗ return "deg √(s)/min";
206 ✗ case Units::CovarianceAngularVelocityUnits::COUNT:
207 ✗ break;
208 }
209 ✗ return "";
210 }
211
212 2 std::string NAV::to_string(Units::CovarianceClkPhaseDriftUnits unit)
213 {
214
1/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
2 switch (unit)
215 {
216 2 case Units::CovarianceClkPhaseDriftUnits::m2_s:
217
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
4 return "m^2/s";
218 ✗ case Units::CovarianceClkPhaseDriftUnits::m_sqrts:
219 ✗ return "m/√s";
220 ✗ case Units::CovarianceClkPhaseDriftUnits::COUNT:
221 ✗ break;
222 }
223 ✗ return "";
224 }
225
226 1 std::string NAV::to_string(Units::CovarianceClkFrequencyDriftUnits unit)
227 {
228
1/4
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1 switch (unit)
229 {
230 1 case Units::CovarianceClkFrequencyDriftUnits::m2_s3:
231
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 return "m^2/s^3";
232 ✗ case Units::CovarianceClkFrequencyDriftUnits::m_sqrts3:
233 ✗ return "m/√(s^3)";
234 ✗ case Units::CovarianceClkFrequencyDriftUnits::COUNT:
235 ✗ break;
236 }
237 ✗ return "";
238 }
239