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