INSTINCT Code Coverage Report


Directory: src/
File: Navigation/GNSS/Core/Frequency.cpp
Date: 2025-02-07 16:54:41
Exec Total Coverage
Lines: 136 384 35.4%
Functions: 10 18 55.6%
Branches: 433 854 50.7%

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 "Frequency.hpp"
10
11 #include <algorithm>
12 #include <cmath>
13 #include <imgui.h>
14 #include <imgui_internal.h>
15
16 #include "util/Assert.h"
17 #include "util/Logger.hpp"
18
19 namespace NAV
20 {
21
22 402709 Frequency Frequency::fromString(const std::string& typeString)
23 {
24
7/8
✓ Branch 1 taken 402701 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 402701 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 14287 times.
✓ Branch 8 taken 388414 times.
✓ Branch 9 taken 14295 times.
✓ Branch 10 taken 388414 times.
402709 if (typeString == "B1" || typeString == "B01" || typeString == "C01") { return B01; }
25
7/8
✓ Branch 1 taken 388406 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 388406 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 5824 times.
✓ Branch 8 taken 382582 times.
✓ Branch 9 taken 5832 times.
✓ Branch 10 taken 382582 times.
388414 if (typeString == "B2" || typeString == "B08" || typeString == "C08") { return B08; }
26
7/8
✓ Branch 1 taken 382574 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 382574 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 15288 times.
✓ Branch 8 taken 367286 times.
✓ Branch 9 taken 15296 times.
✓ Branch 10 taken 367286 times.
382582 if (typeString == "B3" || typeString == "B06" || typeString == "C06") { return B06; }
27
7/8
✓ Branch 1 taken 367278 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 367278 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 15834 times.
✓ Branch 8 taken 351444 times.
✓ Branch 9 taken 15842 times.
✓ Branch 10 taken 351444 times.
367286 if (typeString == "B1-2" || typeString == "B02" || typeString == "C02") { return B02; }
28
7/8
✓ Branch 1 taken 351436 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 351436 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 7280 times.
✓ Branch 8 taken 344156 times.
✓ Branch 9 taken 7288 times.
✓ Branch 10 taken 344156 times.
351444 if (typeString == "B2a" || typeString == "B05" || typeString == "C05") { return B05; }
29
7/8
✓ Branch 1 taken 344148 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 344148 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 15470 times.
✓ Branch 8 taken 328678 times.
✓ Branch 9 taken 15478 times.
✓ Branch 10 taken 328678 times.
344156 if (typeString == "B2b" || typeString == "B07" || typeString == "C07") { return B07; }
30
6/6
✓ Branch 1 taken 328670 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 13468 times.
✓ Branch 5 taken 315202 times.
✓ Branch 6 taken 13476 times.
✓ Branch 7 taken 315202 times.
328678 if (typeString == "E1" || typeString == "E01") { return E01; }
31
6/6
✓ Branch 1 taken 315194 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 13104 times.
✓ Branch 5 taken 302090 times.
✓ Branch 6 taken 13112 times.
✓ Branch 7 taken 302090 times.
315202 if (typeString == "E5a" || typeString == "E05") { return E05; }
32
6/6
✓ Branch 1 taken 302082 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 12012 times.
✓ Branch 5 taken 290070 times.
✓ Branch 6 taken 12020 times.
✓ Branch 7 taken 290070 times.
302090 if (typeString == "E6" || typeString == "E06") { return E06; }
33
6/6
✓ Branch 1 taken 290062 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 12467 times.
✓ Branch 5 taken 277595 times.
✓ Branch 6 taken 12475 times.
✓ Branch 7 taken 277595 times.
290070 if (typeString == "E5b" || typeString == "E07") { return E07; }
34
6/6
✓ Branch 1 taken 277587 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 11739 times.
✓ Branch 5 taken 265848 times.
✓ Branch 6 taken 11747 times.
✓ Branch 7 taken 265848 times.
277595 if (typeString == "E5" || typeString == "E08") { return E08; }
35
6/6
✓ Branch 1 taken 265840 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 50414 times.
✓ Branch 5 taken 215426 times.
✓ Branch 6 taken 50422 times.
✓ Branch 7 taken 215426 times.
265848 if (typeString == "L1" || typeString == "G01") { return G01; }
36
6/6
✓ Branch 1 taken 215418 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 49595 times.
✓ Branch 5 taken 165823 times.
✓ Branch 6 taken 49603 times.
✓ Branch 7 taken 165823 times.
215426 if (typeString == "L2" || typeString == "G02") { return G02; }
37
6/6
✓ Branch 1 taken 165815 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 10829 times.
✓ Branch 5 taken 154986 times.
✓ Branch 6 taken 10837 times.
✓ Branch 7 taken 154986 times.
165823 if (typeString == "L5" || typeString == "G05") { return G05; }
38
6/6
✓ Branch 1 taken 154978 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 9100 times.
✓ Branch 5 taken 145878 times.
✓ Branch 6 taken 9108 times.
✓ Branch 7 taken 145878 times.
154986 if (typeString == "I5" || typeString == "I05") { return I05; }
39
6/6
✓ Branch 1 taken 145870 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 819 times.
✓ Branch 5 taken 145051 times.
✓ Branch 6 taken 827 times.
✓ Branch 7 taken 145051 times.
145878 if (typeString == "IS" || typeString == "I09") { return I09; }
40
6/6
✓ Branch 1 taken 145043 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 10738 times.
✓ Branch 5 taken 134305 times.
✓ Branch 6 taken 10746 times.
✓ Branch 7 taken 134305 times.
145051 if (typeString == "Q1" || typeString == "J01") { return J01; }
41
6/6
✓ Branch 1 taken 134297 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 10738 times.
✓ Branch 5 taken 123559 times.
✓ Branch 6 taken 10746 times.
✓ Branch 7 taken 123559 times.
134305 if (typeString == "Q2" || typeString == "J02") { return J02; }
42
6/6
✓ Branch 1 taken 123551 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 10374 times.
✓ Branch 5 taken 113177 times.
✓ Branch 6 taken 10382 times.
✓ Branch 7 taken 113177 times.
123559 if (typeString == "Q5" || typeString == "J05") { return J05; }
43
7/8
✓ Branch 1 taken 113169 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 113169 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8554 times.
✓ Branch 8 taken 104615 times.
✓ Branch 9 taken 8562 times.
✓ Branch 10 taken 104615 times.
113177 if (typeString == "Q6" || typeString == "QLEX" || typeString == "J06") { return J06; }
44
6/6
✓ Branch 1 taken 104607 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 37856 times.
✓ Branch 5 taken 66751 times.
✓ Branch 6 taken 37864 times.
✓ Branch 7 taken 66751 times.
104615 if (typeString == "G1" || typeString == "R01") { return R01; }
45
6/6
✓ Branch 1 taken 66743 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 37674 times.
✓ Branch 5 taken 29069 times.
✓ Branch 6 taken 37682 times.
✓ Branch 7 taken 29069 times.
66751 if (typeString == "G2" || typeString == "R02") { return R02; }
46
6/6
✓ Branch 1 taken 29061 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 546 times.
✓ Branch 5 taken 28515 times.
✓ Branch 6 taken 554 times.
✓ Branch 7 taken 28515 times.
29069 if (typeString == "G3" || typeString == "R03") { return R03; }
47
6/6
✓ Branch 1 taken 28507 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 4186 times.
✓ Branch 5 taken 24321 times.
✓ Branch 6 taken 4194 times.
✓ Branch 7 taken 24321 times.
28515 if (typeString == "G1a" || typeString == "R04") { return R04; }
48
6/6
✓ Branch 1 taken 24313 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 4186 times.
✓ Branch 5 taken 20127 times.
✓ Branch 6 taken 4194 times.
✓ Branch 7 taken 20127 times.
24321 if (typeString == "G2a" || typeString == "R06") { return R06; }
49
6/6
✓ Branch 1 taken 20119 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 10192 times.
✓ Branch 5 taken 9927 times.
✓ Branch 6 taken 10200 times.
✓ Branch 7 taken 9927 times.
20127 if (typeString == "S1" || typeString == "S01") { return S01; }
50
4/6
✓ Branch 1 taken 9919 times.
✓ Branch 2 taken 8 times.
✓ Branch 4 taken 9919 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 9927 times.
✗ Branch 7 not taken.
9927 if (typeString == "S5" || typeString == "S05") { return S05; }
51
52 return Freq_None;
53 }
54
55 Frequency Frequency::fromEnum(Frequency::Enum enumeration)
56 {
57 switch (enumeration)
58 {
59 case Frequency::Enum_G01:
60 return G01;
61 case Frequency::Enum_G02:
62 return G02;
63 case Frequency::Enum_G05:
64 return G05;
65 case Frequency::Enum_E01:
66 return E01;
67 case Frequency::Enum_E05:
68 return E05;
69 case Frequency::Enum_E06:
70 return E06;
71 case Frequency::Enum_E07:
72 return E07;
73 case Frequency::Enum_E08:
74 return E08;
75 case Frequency::Enum_R01:
76 return R01;
77 case Frequency::Enum_R02:
78 return R02;
79 case Frequency::Enum_R03:
80 return R03;
81 case Frequency::Enum_R04:
82 return R04;
83 case Frequency::Enum_R06:
84 return R06;
85 case Frequency::Enum_B01:
86 return B01;
87 case Frequency::Enum_B02:
88 return B02;
89 case Frequency::Enum_B05:
90 return B05;
91 case Frequency::Enum_B06:
92 return B06;
93 case Frequency::Enum_B07:
94 return B07;
95 case Frequency::Enum_B08:
96 return B08;
97 case Frequency::Enum_J01:
98 return J01;
99 case Frequency::Enum_J02:
100 return J02;
101 case Frequency::Enum_J05:
102 return J05;
103 case Frequency::Enum_J06:
104 return J06;
105 case Frequency::Enum_I05:
106 return I05;
107 case Frequency::Enum_I09:
108 return I09;
109 case Frequency::Enum_S01:
110 return S01;
111 case Frequency::Enum_S05:
112 return S05;
113 case Frequency::Enum_COUNT:
114 case Frequency::Enum_None:
115 return Freq_None;
116 }
117 return Freq_None;
118 }
119
120 173432 Frequency::operator std::string() const
121 {
122
1/2
✓ Branch 1 taken 173450 times.
✗ Branch 2 not taken.
173432 const std::string filler = " | ";
123 173450 std::string str;
124
2/2
✓ Branch 1 taken 59054 times.
✓ Branch 2 taken 114407 times.
173457 if (value & G01)
125 {
126
6/14
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 59053 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 59060 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 59058 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 59056 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 59057 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
177164 str += (!str.empty() ? filler : "") + "L1";
127 }
128
2/2
✓ Branch 1 taken 29542 times.
✓ Branch 2 taken 143924 times.
173464 if (value & G02)
129 {
130
8/14
✓ Branch 1 taken 29241 times.
✓ Branch 2 taken 296 times.
✓ Branch 4 taken 29242 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 298 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 29541 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 29541 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 299 times.
✓ Branch 18 taken 29242 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
30137 str += (!str.empty() ? filler : "") + "L2";
131 }
132
2/2
✓ Branch 1 taken 17268 times.
✓ Branch 2 taken 156194 times.
173465 if (value & G05)
133 {
134
8/14
✓ Branch 1 taken 17165 times.
✓ Branch 2 taken 103 times.
✓ Branch 4 taken 17166 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 102 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 17268 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 17268 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 103 times.
✓ Branch 18 taken 17166 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
17474 str += (!str.empty() ? filler : "") + "L5";
135 }
136
2/2
✓ Branch 1 taken 49877 times.
✓ Branch 2 taken 123589 times.
173463 if (value & E01)
137 {
138
6/14
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 49875 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 49876 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 49877 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 49877 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 49877 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
149629 str += (!str.empty() ? filler : "") + "E1";
139 }
140
2/2
✓ Branch 1 taken 16492 times.
✓ Branch 2 taken 156979 times.
173466 if (value & E05)
141 {
142
8/14
✓ Branch 1 taken 16377 times.
✓ Branch 2 taken 115 times.
✓ Branch 4 taken 16376 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 116 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 16493 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 16493 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 116 times.
✓ Branch 18 taken 16376 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
16723 str += (!str.empty() ? filler : "") + "E5a";
143 }
144
2/2
✓ Branch 1 taken 89 times.
✓ Branch 2 taken 173375 times.
173471 if (value & E06)
145 {
146
8/14
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 81 times.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 81 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 89 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 89 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 81 times.
✓ Branch 18 taken 8 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
251 str += (!str.empty() ? filler : "") + "E6";
147 }
148
2/2
✓ Branch 1 taken 29128 times.
✓ Branch 2 taken 144339 times.
173464 if (value & E07)
149 {
150
8/14
✓ Branch 1 taken 28956 times.
✓ Branch 2 taken 171 times.
✓ Branch 4 taken 28956 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 172 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 29128 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 29126 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 171 times.
✓ Branch 18 taken 28956 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
29470 str += (!str.empty() ? filler : "") + "E5b";
151 }
152
2/2
✓ Branch 1 taken 1793 times.
✓ Branch 2 taken 171671 times.
173466 if (value & E08)
153 {
154
8/14
✓ Branch 1 taken 1716 times.
✓ Branch 2 taken 77 times.
✓ Branch 4 taken 1716 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 76 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1792 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1792 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 76 times.
✓ Branch 18 taken 1716 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
1946 str += (!str.empty() ? filler : "") + "E5";
155 }
156
2/2
✓ Branch 1 taken 34244 times.
✓ Branch 2 taken 139217 times.
173463 if (value & R01)
157 {
158
5/14
✗ Branch 1 not taken.
✓ Branch 2 taken 34243 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 34243 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 34244 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 34243 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 34244 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
102731 str += (!str.empty() ? filler : "") + "G1";
159 }
160
2/2
✓ Branch 1 taken 30746 times.
✓ Branch 2 taken 142707 times.
173461 if (value & R02)
161 {
162
8/14
✓ Branch 1 taken 29786 times.
✓ Branch 2 taken 960 times.
✓ Branch 4 taken 29786 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 960 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 30748 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 30748 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 962 times.
✓ Branch 18 taken 29786 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
32668 str += (!str.empty() ? filler : "") + "G2";
163 }
164
2/2
✓ Branch 1 taken 89 times.
✓ Branch 2 taken 173366 times.
173455 if (value & R03)
165 {
166
8/14
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 81 times.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 81 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 89 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 89 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 81 times.
✓ Branch 18 taken 8 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
251 str += (!str.empty() ? filler : "") + "G3";
167 }
168
2/2
✓ Branch 1 taken 61 times.
✓ Branch 2 taken 173403 times.
173455 if (value & R04)
169 {
170
5/14
✗ Branch 1 not taken.
✓ Branch 2 taken 61 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 61 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 61 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 61 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 61 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
183 str += (!str.empty() ? filler : "") + "G1a";
171 }
172
2/2
✓ Branch 1 taken 21 times.
✓ Branch 2 taken 173441 times.
173464 if (value & R06)
173 {
174
5/14
✗ Branch 1 not taken.
✓ Branch 2 taken 21 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 21 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 21 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 21 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 21 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
63 str += (!str.empty() ? filler : "") + "G2a";
175 }
176
2/2
✓ Branch 1 taken 2859 times.
✓ Branch 2 taken 170605 times.
173462 if (value & B01)
177 {
178
5/14
✗ Branch 1 not taken.
✓ Branch 2 taken 2859 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 2859 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2859 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2859 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 2859 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
8577 str += (!str.empty() ? filler : "") + "B1";
179 }
180
2/2
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 173457 times.
173464 if (value & B08)
181 {
182
5/14
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
3 str += (!str.empty() ? filler : "") + "B2";
183 }
184
2/2
✓ Branch 1 taken 1041 times.
✓ Branch 2 taken 172417 times.
173458 if (value & B06)
185 {
186
8/14
✓ Branch 1 taken 690 times.
✓ Branch 2 taken 351 times.
✓ Branch 4 taken 690 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 351 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1041 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1041 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 351 times.
✓ Branch 18 taken 690 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
1743 str += (!str.empty() ? filler : "") + "B3";
187 }
188
2/2
✓ Branch 1 taken 25260 times.
✓ Branch 2 taken 148203 times.
173458 if (value & B02)
189 {
190
8/14
✓ Branch 1 taken 3116 times.
✓ Branch 2 taken 22144 times.
✓ Branch 4 taken 3116 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 22143 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 25260 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 25260 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 22143 times.
✓ Branch 18 taken 3116 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
69547 str += (!str.empty() ? filler : "") + "B1-2";
191 }
192
2/2
✓ Branch 1 taken 2859 times.
✓ Branch 2 taken 170602 times.
173462 if (value & B05)
193 {
194
8/14
✓ Branch 1 taken 2810 times.
✓ Branch 2 taken 49 times.
✓ Branch 4 taken 2810 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 49 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2859 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2859 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 49 times.
✓ Branch 18 taken 2810 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
2957 str += (!str.empty() ? filler : "") + "B2a";
195 }
196
2/2
✓ Branch 1 taken 3281 times.
✓ Branch 2 taken 170181 times.
173461 if (value & B07)
197 {
198
8/14
✓ Branch 1 taken 3124 times.
✓ Branch 2 taken 157 times.
✓ Branch 4 taken 3124 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 156 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 3281 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 3281 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 157 times.
✓ Branch 18 taken 3124 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
3595 str += (!str.empty() ? filler : "") + "B2b";
199 }
200
2/2
✓ Branch 1 taken 971 times.
✓ Branch 2 taken 172490 times.
173462 if (value & J01)
201 {
202
5/14
✗ Branch 1 not taken.
✓ Branch 2 taken 972 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 971 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 970 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 972 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 973 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
2916 str += (!str.empty() ? filler : "") + "Q1";
203 }
204
2/2
✓ Branch 1 taken 429 times.
✓ Branch 2 taken 173032 times.
173463 if (value & J02)
205 {
206
8/14
✓ Branch 1 taken 396 times.
✓ Branch 2 taken 33 times.
✓ Branch 4 taken 396 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 33 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 429 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 429 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 33 times.
✓ Branch 18 taken 396 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
495 str += (!str.empty() ? filler : "") + "Q2";
207 }
208
2/2
✓ Branch 1 taken 881 times.
✓ Branch 2 taken 172583 times.
173461 if (value & J05)
209 {
210
8/14
✓ Branch 1 taken 760 times.
✓ Branch 2 taken 121 times.
✓ Branch 4 taken 760 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 121 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 881 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 881 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 121 times.
✓ Branch 18 taken 760 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
1123 str += (!str.empty() ? filler : "") + "Q5";
211 }
212
2/2
✓ Branch 1 taken 21 times.
✓ Branch 2 taken 173445 times.
173464 if (value & J06)
213 {
214
5/14
✗ Branch 1 not taken.
✓ Branch 2 taken 21 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 21 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 21 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 21 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 21 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
63 str += (!str.empty() ? filler : "") + "Q6";
215 }
216
2/2
✓ Branch 1 taken 431 times.
✓ Branch 2 taken 173038 times.
173466 if (value & I05)
217 {
218
5/14
✗ Branch 1 not taken.
✓ Branch 2 taken 431 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 431 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 431 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 431 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 431 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
1293 str += (!str.empty() ? filler : "") + "I5";
219 }
220
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 173462 times.
173469 if (value & I09)
221 {
222
5/14
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
6 str += (!str.empty() ? filler : "") + "IS";
223 }
224
2/2
✓ Branch 1 taken 1151 times.
✓ Branch 2 taken 172313 times.
173464 if (value & S01)
225 {
226
5/14
✗ Branch 1 not taken.
✓ Branch 2 taken 1151 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 1151 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1151 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1151 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 1151 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
3453 str += (!str.empty() ? filler : "") + "S1";
227 }
228
2/2
✓ Branch 1 taken 1115 times.
✓ Branch 2 taken 172338 times.
173464 if (value & S05)
229 {
230
8/14
✓ Branch 1 taken 1082 times.
✓ Branch 2 taken 33 times.
✓ Branch 4 taken 1082 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 33 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1115 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1115 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 33 times.
✓ Branch 18 taken 1082 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
1181 str += (!str.empty() ? filler : "") + "S5";
231 }
232
233
1/2
✓ Branch 1 taken 173459 times.
✗ Branch 2 not taken.
173453 if (!str.empty())
234 {
235 173459 return str;
236 }
237 return "None";
238 173462 }
239
240 4049621 SatelliteSystem Frequency::GetSatelliteSystemForFrequency(Frequency freq)
241 {
242 4049621 SatelliteSystem retVal = SatSys_None;
243
3/4
✓ Branch 1 taken 4049134 times.
✗ Branch 2 not taken.
✓ Branch 8 taken 28300176 times.
✓ Branch 9 taken 4030135 times.
32333281 for (auto satSys : SatelliteSystem::GetAll())
244 {
245
2/2
✓ Branch 1 taken 4050152 times.
✓ Branch 2 taken 24233612 times.
28298334 if (freq & satSys) { retVal |= satSys; }
246 4030135 }
247 4048235 return retVal;
248 }
249
250 289990 double Frequency::GetFrequency(Frequency freq, int8_t num)
251 {
252
9/29
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 5610 times.
✓ Branch 8 taken 1586 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 752 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 170965 times.
✓ Branch 13 taken 85406 times.
✓ Branch 14 taken 24871 times.
✓ Branch 15 taken 100 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 600 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 100 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
289990 switch (Frequency_(freq))
253 {
254 case B01: // Beidou B1 (1575.42 MHz)
255 return 1575.42e6;
256 case B02: // Beidou B1-2 (1561.098 MHz)
257 return 1561.098e6;
258 case B05: // Beidou B2a (1176.45 MHz)
259 return 1176.45e6;
260 case B06: // Beidou B3 (1268.52 MHz)
261 return 1268.52e6;
262 case B07: // Beidou B2b (1207.14 MHz)
263 return 1207.14e6;
264 case B08: // Beidou B2 (B2a + B2b) (1191.795 MHz)
265 return 1191.795e6;
266 5610 case E01: // Galileo, "E1" (1575.42 MHz)
267 5610 return 1575.42e6;
268 1586 case E05: // Galileo E5a (1176.45 MHz)
269 1586 return 1176.45e6;
270 case E06: // Galileo E6 (1278.75 MHz)
271 return 1278.75e6;
272 752 case E07: // Galileo E5b (1207.14 MHz)
273 752 return 1207.14e6;
274 case E08: // Galileo E5 (E5a + E5b) (1191.795 MHz)
275 return 1191.795e6;
276 170965 case G01: // GPS L1 (1575.42 MHz)
277 170965 return 1575.42e6;
278 85406 case G02: // GPS L2 (1227.6 MHz)
279 85406 return 1227.6e6;
280 24871 case G05: // GPS L5 (1176.45 MHz)
281 24871 return 1176.45e6;
282 100 case I05: // IRNSS L5 (1176.45 MHz)
283 100 return 1176.45e6;
284 case I09: // IRNSS S (2492.028 MHz)
285 return 2492.028e6;
286 600 case J01: // QZSS L1 (1575.42 MHz)
287 600 return 1575.42e6;
288 case J02: // QZSS L2 (1227.6 MHz)
289 return 1227.6e6;
290 case J05: // QZSS L5 (1176.45 MHz)
291 return 1176.45e6;
292 case J06: // QZSS L6 / LEX (1278.75 MHz)
293 return 1278.75e6;
294 case R01: // GLONASS, "G1" (1602 MHZ)
295 INS_ASSERT_USER_ERROR(num >= -7 && num <= 6, "GLONASS G1 frequency numbers have to be in the range [-7, +6] (all satellites launched after 2005)");
296 return (1602.0 + num * 9.0 / 16.0) * 1e6;
297 case R02: // GLONASS, "G2" (1246 MHz)
298 INS_ASSERT_USER_ERROR(num >= -7 && num <= 6, "GLONASS G1 frequency numbers have to be in the range [-7, +6] (all satellites launched after 2005)");
299 return (1246.0 + num * 7.0 / 16.0) * 1e6;
300 case R03: // GLONASS, "G3" (1202.025 MHz)
301 return 1202.025e6;
302 case R04: // GLONASS, "G1a" (1600.995 MHZ)
303 return 1600.995e6;
304 case R06: // GLONASS, "G2a" (1248.06 MHz)
305 return 1248.06e6;
306 100 case S01: // SBAS L1 (1575.42 MHz)
307 100 return 1575.42e6;
308 case S05: // SBAS L5 (1176.45 MHz)
309 return 1176.45e6;
310 case Freq_None:
311 return std::nan("");
312 }
313
314 return std::nan("");
315 }
316
317 41798 Frequency Frequency::GetL1(Frequency freq)
318 {
319
1/9
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 41798 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
41798 switch (Frequency_(freq))
320 {
321 case B01: // Beidou B1 (1575.42 MHz)
322 case B02: // Beidou B1-2 (1561.098 MHz)
323 case B05: // Beidou B2a (1176.45 MHz)
324 case B06: // Beidou B3 (1268.52 MHz)
325 case B07: // Beidou B2b (1207.14 MHz)
326 case B08: // Beidou B2 (B2a + B2b) (1191.795 MHz)
327 return B01;
328 case E01: // Galileo, "E1" (1575.42 MHz)
329 case E05: // Galileo E5a (1176.45 MHz)
330 case E06: // Galileo E6 (1278.75 MHz)
331 case E07: // Galileo E5b (1207.14 MHz)
332 case E08: // Galileo E5 (E5a + E5b) (1191.795 MHz)
333 return E01;
334 41798 case G01: // GPS L1 (1575.42 MHz)
335 case G02: // GPS L2 (1227.6 MHz)
336 case G05: // GPS L5 (1176.45 MHz)
337 41798 return G01;
338 case I05: // IRNSS L5 (1176.45 MHz)
339 case I09: // IRNSS S (2492.028 MHz)
340 return I05;
341 case J01: // QZSS L1 (1575.42 MHz)
342 case J02: // QZSS L2 (1227.6 MHz)
343 case J05: // QZSS L5 (1176.45 MHz)
344 case J06: // QZSS L6 / LEX (1278.75 MHz)
345 return J01;
346 case R01: // GLONASS, "G1" (1602 MHZ)
347 case R02: // GLONASS, "G2" (1246 MHz)
348 case R03: // GLONASS, "G3" (1202.025 MHz)
349 case R04: // GLONASS, "G1a" (1600.995 MHZ)
350 case R06: // GLONASS, "G2a" (1248.06 MHz)
351 return R01;
352 case S01: // SBAS L1 (1575.42 MHz)
353 case S05: // SBAS L5 (1176.45 MHz)
354 return S01;
355 case Freq_None:
356 return Freq_None;
357 }
358
359 return Freq_None;
360 }
361
362 size_t Frequency::count() const
363 {
364 size_t num = 0;
365 if (value & G01) { num += 1; }
366 if (value & G02) { num += 1; }
367 if (value & G05) { num += 1; }
368 if (value & E01) { num += 1; }
369 if (value & E05) { num += 1; }
370 if (value & E06) { num += 1; }
371 if (value & E07) { num += 1; }
372 if (value & E08) { num += 1; }
373 if (value & R01) { num += 1; }
374 if (value & R02) { num += 1; }
375 if (value & R03) { num += 1; }
376 if (value & R04) { num += 1; }
377 if (value & R06) { num += 1; }
378 if (value & B01) { num += 1; }
379 if (value & B02) { num += 1; }
380 if (value & B05) { num += 1; }
381 if (value & B06) { num += 1; }
382 if (value & B07) { num += 1; }
383 if (value & B08) { num += 1; }
384 if (value & J01) { num += 1; }
385 if (value & J02) { num += 1; }
386 if (value & J05) { num += 1; }
387 if (value & J06) { num += 1; }
388 if (value & I05) { num += 1; }
389 if (value & I09) { num += 1; }
390 if (value & S01) { num += 1; }
391 if (value & S05) { num += 1; }
392
393 return num;
394 }
395
396 Frequency::Enum Frequency::ToEnumeration(Frequency freq)
397 {
398 switch (Frequency_(freq))
399 {
400 case Freq_None:
401 return Enum_None;
402 case G01:
403 return Enum_G01;
404 case G02:
405 return Enum_G02;
406 case G05:
407 return Enum_G05;
408 case E01:
409 return Enum_E01;
410 case E05:
411 return Enum_E05;
412 case E06:
413 return Enum_E06;
414 case E07:
415 return Enum_E07;
416 case E08:
417 return Enum_E08;
418 case R01:
419 return Enum_R01;
420 case R02:
421 return Enum_R02;
422 case R03:
423 return Enum_R03;
424 case R04:
425 return Enum_R04;
426 case R06:
427 return Enum_R06;
428 case B01:
429 return Enum_B01;
430 case B02:
431 return Enum_B02;
432 case B05:
433 return Enum_B05;
434 case B06:
435 return Enum_B06;
436 case B07:
437 return Enum_B07;
438 case B08:
439 return Enum_B08;
440 case J01:
441 return Enum_J01;
442 case J02:
443 return Enum_J02;
444 case J05:
445 return Enum_J05;
446 case J06:
447 return Enum_J06;
448 case I05:
449 return Enum_I05;
450 case I09:
451 return Enum_I09;
452 case S01:
453 return Enum_S01;
454 case S05:
455 return Enum_S05;
456 }
457 return Enum_None;
458 }
459
460 Frequency::Enum Frequency::toEnumeration() const
461 {
462 return ToEnumeration(*this);
463 }
464
465 1872 std::vector<Frequency> Frequency::ToVector(Frequency freq)
466 {
467 1872 std::vector<Frequency> v;
468
2/2
✓ Branch 0 taken 50544 times.
✓ Branch 1 taken 1872 times.
52416 for (const Frequency& f : GetAll())
469 {
470
3/4
✓ Branch 1 taken 3744 times.
✓ Branch 2 taken 46800 times.
✓ Branch 4 taken 3744 times.
✗ Branch 5 not taken.
50544 if (f.value & freq.value) { v.push_back(f); }
471 }
472 1872 return v;
473 }
474
475 1872 std::vector<Frequency> Frequency::toVector() const
476 {
477
1/2
✓ Branch 2 taken 1872 times.
✗ Branch 3 not taken.
1872 return ToVector(value);
478 }
479
480 bool Frequency::IsFirstFrequency(const Frequency& freq, const Frequency& filter)
481 {
482 return freq.isFirstFrequency(filter);
483 }
484
485 2178 bool Frequency::isFirstFrequency(const Frequency& filter) const
486 {
487
1/2
✓ Branch 1 taken 2178 times.
✗ Branch 2 not taken.
2178 Frequency_ f = filter & getSatSys();
488 2178 f = Frequency_(f ^ value);
489
490
2/2
✓ Branch 0 taken 306 times.
✓ Branch 1 taken 1872 times.
2178 if (f == Freq_None) { return true; }
491
492
1/2
✓ Branch 2 taken 1872 times.
✗ Branch 3 not taken.
1872 auto frequencies = Frequency(f).toVector();
493
1/2
✓ Branch 1 taken 1872 times.
✗ Branch 2 not taken.
1872 return std::ranges::all_of(frequencies,
494 4368 [&](const Frequency& freq) { return value < Frequency_(freq); });
495 1872 }
496
497 void to_json(json& j, const Frequency& data)
498 {
499 j = std::string(data);
500 }
501 216 void from_json(const json& j, Frequency& data)
502 {
503
2/4
✓ Branch 1 taken 216 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 216 times.
✗ Branch 5 not taken.
216 data = Frequency::fromString(j.get<std::string>());
504 216 }
505
506 bool ShowFrequencySelector(const char* label, Frequency& frequency, bool singleSelect)
507 {
508 bool valueChanged = false;
509 if (ImGui::BeginCombo(label, std::string(frequency).c_str(), ImGuiComboFlags_HeightLargest))
510 {
511 if (ImGui::BeginTable(fmt::format("{} Table", label).c_str(), 7, ImGuiTableFlags_BordersInnerV))
512 {
513 for (uint64_t satSys = 0xFF; satSys < 0xFFUL << (7 * 8); satSys = satSys << 8UL)
514 {
515 ImGui::TableSetupColumn(std::string(SatelliteSystem(SatelliteSystem_(satSys))).c_str());
516 }
517 ImGui::TableHeadersRow();
518 for (uint64_t f = 0; f < 8; f++)
519 {
520 ImGui::TableNextRow();
521 for (int c = 0; c < 7; c++)
522 {
523 uint64_t flag = (1UL << (f + static_cast<uint64_t>(c) * 8));
524 auto text = std::string(Frequency(Frequency_(flag)));
525 if (text == "None")
526 {
527 continue;
528 }
529 ImGui::TableSetColumnIndex(c);
530 if (c >= 5)
531 {
532 ImGui::BeginDisabled();
533 }
534 if (singleSelect)
535 {
536 bool selected = flag & Frequency_(frequency);
537 if (ImGui::Checkbox(text.c_str(), &selected) && frequency != Frequency_(flag))
538 {
539 frequency = Frequency_(flag);
540 valueChanged = true;
541 }
542 }
543 else
544 {
545 ImU64 value = Frequency_(frequency);
546 if (ImGui::CheckboxFlags(text.c_str(), &value, flag))
547 {
548 frequency = Frequency_(value);
549 valueChanged = true;
550 }
551 }
552 if (c >= 5)
553 {
554 ImGui::EndDisabled();
555 }
556 }
557 }
558 ImGui::EndTable();
559 }
560 ImGui::EndCombo();
561 }
562 return valueChanged;
563 }
564
565 } // namespace NAV
566
567 std::ostream& operator<<(std::ostream& os, const NAV::Frequency& obj)
568 {
569 return os << fmt::format("{}", obj);
570 }
571