INSTINCT Code Coverage Report


Directory: src/
File: Navigation/GNSS/Core/Frequency.cpp
Date: 2025-06-02 15:19:59
Exec Total Coverage
Lines: 136 384 35.4%
Functions: 10 18 55.6%
Branches: 431 854 50.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 "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 402682 Frequency Frequency::fromString(const std::string& typeString)
23 {
24
7/8
✓ Branch 1 taken 402675 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 402675 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 14287 times.
✓ Branch 8 taken 388388 times.
✓ Branch 9 taken 14294 times.
✓ Branch 10 taken 388388 times.
402682 if (typeString == "B1" || typeString == "B01" || typeString == "C01") { return B01; }
25
7/8
✓ Branch 1 taken 388381 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 388381 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 5824 times.
✓ Branch 8 taken 382557 times.
✓ Branch 9 taken 5831 times.
✓ Branch 10 taken 382557 times.
388388 if (typeString == "B2" || typeString == "B08" || typeString == "C08") { return B08; }
26
7/8
✓ Branch 1 taken 382550 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 382550 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 15288 times.
✓ Branch 8 taken 367262 times.
✓ Branch 9 taken 15295 times.
✓ Branch 10 taken 367262 times.
382557 if (typeString == "B3" || typeString == "B06" || typeString == "C06") { return B06; }
27
7/8
✓ Branch 1 taken 367255 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 367255 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 15834 times.
✓ Branch 8 taken 351421 times.
✓ Branch 9 taken 15841 times.
✓ Branch 10 taken 351421 times.
367262 if (typeString == "B1-2" || typeString == "B02" || typeString == "C02") { return B02; }
28
7/8
✓ Branch 1 taken 351414 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 351414 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 7280 times.
✓ Branch 8 taken 344134 times.
✓ Branch 9 taken 7287 times.
✓ Branch 10 taken 344134 times.
351421 if (typeString == "B2a" || typeString == "B05" || typeString == "C05") { return B05; }
29
7/8
✓ Branch 1 taken 344127 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 344127 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 15470 times.
✓ Branch 8 taken 328657 times.
✓ Branch 9 taken 15477 times.
✓ Branch 10 taken 328657 times.
344134 if (typeString == "B2b" || typeString == "B07" || typeString == "C07") { return B07; }
30
6/6
✓ Branch 1 taken 328650 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 13468 times.
✓ Branch 5 taken 315182 times.
✓ Branch 6 taken 13475 times.
✓ Branch 7 taken 315182 times.
328657 if (typeString == "E1" || typeString == "E01") { return E01; }
31
6/6
✓ Branch 1 taken 315175 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 13104 times.
✓ Branch 5 taken 302071 times.
✓ Branch 6 taken 13111 times.
✓ Branch 7 taken 302071 times.
315182 if (typeString == "E5a" || typeString == "E05") { return E05; }
32
6/6
✓ Branch 1 taken 302064 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 12012 times.
✓ Branch 5 taken 290052 times.
✓ Branch 6 taken 12019 times.
✓ Branch 7 taken 290052 times.
302071 if (typeString == "E6" || typeString == "E06") { return E06; }
33
6/6
✓ Branch 1 taken 290045 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 12467 times.
✓ Branch 5 taken 277578 times.
✓ Branch 6 taken 12474 times.
✓ Branch 7 taken 277578 times.
290052 if (typeString == "E5b" || typeString == "E07") { return E07; }
34
6/6
✓ Branch 1 taken 277571 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 11739 times.
✓ Branch 5 taken 265832 times.
✓ Branch 6 taken 11746 times.
✓ Branch 7 taken 265832 times.
277578 if (typeString == "E5" || typeString == "E08") { return E08; }
35
6/6
✓ Branch 1 taken 265825 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 50414 times.
✓ Branch 5 taken 215411 times.
✓ Branch 6 taken 50421 times.
✓ Branch 7 taken 215411 times.
265832 if (typeString == "L1" || typeString == "G01") { return G01; }
36
6/6
✓ Branch 1 taken 215404 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 49595 times.
✓ Branch 5 taken 165809 times.
✓ Branch 6 taken 49602 times.
✓ Branch 7 taken 165809 times.
215411 if (typeString == "L2" || typeString == "G02") { return G02; }
37
6/6
✓ Branch 1 taken 165802 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 10829 times.
✓ Branch 5 taken 154973 times.
✓ Branch 6 taken 10836 times.
✓ Branch 7 taken 154973 times.
165809 if (typeString == "L5" || typeString == "G05") { return G05; }
38
6/6
✓ Branch 1 taken 154966 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 9100 times.
✓ Branch 5 taken 145866 times.
✓ Branch 6 taken 9107 times.
✓ Branch 7 taken 145866 times.
154973 if (typeString == "I5" || typeString == "I05") { return I05; }
39
6/6
✓ Branch 1 taken 145859 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 819 times.
✓ Branch 5 taken 145040 times.
✓ Branch 6 taken 826 times.
✓ Branch 7 taken 145040 times.
145866 if (typeString == "IS" || typeString == "I09") { return I09; }
40
6/6
✓ Branch 1 taken 145033 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 10738 times.
✓ Branch 5 taken 134295 times.
✓ Branch 6 taken 10745 times.
✓ Branch 7 taken 134295 times.
145040 if (typeString == "Q1" || typeString == "J01") { return J01; }
41
6/6
✓ Branch 1 taken 134288 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 10738 times.
✓ Branch 5 taken 123550 times.
✓ Branch 6 taken 10745 times.
✓ Branch 7 taken 123550 times.
134295 if (typeString == "Q2" || typeString == "J02") { return J02; }
42
6/6
✓ Branch 1 taken 123543 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 10374 times.
✓ Branch 5 taken 113169 times.
✓ Branch 6 taken 10381 times.
✓ Branch 7 taken 113169 times.
123550 if (typeString == "Q5" || typeString == "J05") { return J05; }
43
7/8
✓ Branch 1 taken 113162 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 113162 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8554 times.
✓ Branch 8 taken 104608 times.
✓ Branch 9 taken 8561 times.
✓ Branch 10 taken 104608 times.
113169 if (typeString == "Q6" || typeString == "QLEX" || typeString == "J06") { return J06; }
44
6/6
✓ Branch 1 taken 104601 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 37856 times.
✓ Branch 5 taken 66745 times.
✓ Branch 6 taken 37863 times.
✓ Branch 7 taken 66745 times.
104608 if (typeString == "G1" || typeString == "R01") { return R01; }
45
6/6
✓ Branch 1 taken 66738 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 37674 times.
✓ Branch 5 taken 29064 times.
✓ Branch 6 taken 37681 times.
✓ Branch 7 taken 29064 times.
66745 if (typeString == "G2" || typeString == "R02") { return R02; }
46
6/6
✓ Branch 1 taken 29057 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 546 times.
✓ Branch 5 taken 28511 times.
✓ Branch 6 taken 553 times.
✓ Branch 7 taken 28511 times.
29064 if (typeString == "G3" || typeString == "R03") { return R03; }
47
6/6
✓ Branch 1 taken 28504 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 4186 times.
✓ Branch 5 taken 24318 times.
✓ Branch 6 taken 4193 times.
✓ Branch 7 taken 24318 times.
28511 if (typeString == "G1a" || typeString == "R04") { return R04; }
48
6/6
✓ Branch 1 taken 24311 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 4186 times.
✓ Branch 5 taken 20125 times.
✓ Branch 6 taken 4193 times.
✓ Branch 7 taken 20125 times.
24318 if (typeString == "G2a" || typeString == "R06") { return R06; }
49
6/6
✓ Branch 1 taken 20118 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 10192 times.
✓ Branch 5 taken 9926 times.
✓ Branch 6 taken 10199 times.
✓ Branch 7 taken 9926 times.
20125 if (typeString == "S1" || typeString == "S01") { return S01; }
50
4/6
✓ Branch 1 taken 9919 times.
✓ Branch 2 taken 7 times.
✓ Branch 4 taken 9919 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 9926 times.
✗ Branch 7 not taken.
9926 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 173421 Frequency::operator std::string() const
121 {
122
1/2
✓ Branch 1 taken 173439 times.
✗ Branch 2 not taken.
173421 const std::string filler = " | ";
123 173439 std::string str;
124
2/2
✓ Branch 1 taken 59048 times.
✓ Branch 2 taken 114396 times.
173444 if (value & G01)
125 {
126
5/14
✗ Branch 1 not taken.
✓ Branch 2 taken 59046 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 59046 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 59047 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 59046 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 59047 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
177141 str += (!str.empty() ? filler : "") + "L1";
127 }
128
2/2
✓ Branch 1 taken 29528 times.
✓ Branch 2 taken 143914 times.
173443 if (value & G02)
129 {
130
8/14
✓ Branch 1 taken 29242 times.
✓ Branch 2 taken 284 times.
✓ Branch 4 taken 29242 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 286 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 29524 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 29526 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 285 times.
✓ Branch 18 taken 29242 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
30097 str += (!str.empty() ? filler : "") + "L2";
131 }
132
2/2
✓ Branch 1 taken 17265 times.
✓ Branch 2 taken 156177 times.
173441 if (value & G05)
133 {
134
8/14
✓ Branch 1 taken 17166 times.
✓ Branch 2 taken 99 times.
✓ Branch 4 taken 17166 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 98 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 17265 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 17263 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 99 times.
✓ Branch 18 taken 17166 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
17463 str += (!str.empty() ? filler : "") + "L5";
135 }
136
2/2
✓ Branch 1 taken 49877 times.
✓ Branch 2 taken 123568 times.
173442 if (value & E01)
137 {
138
5/14
✗ Branch 1 not taken.
✓ Branch 2 taken 49877 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 49875 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 49876 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 49875 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 49876 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
149630 str += (!str.empty() ? filler : "") + "E1";
139 }
140
2/2
✓ Branch 1 taken 16493 times.
✓ Branch 2 taken 156952 times.
173444 if (value & E05)
141 {
142
8/14
✓ Branch 1 taken 16376 times.
✓ Branch 2 taken 117 times.
✓ Branch 4 taken 16376 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 117 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 117 times.
✓ Branch 18 taken 16376 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
16727 str += (!str.empty() ? filler : "") + "E5a";
143 }
144
2/2
✓ Branch 1 taken 89 times.
✓ Branch 2 taken 173356 times.
173445 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 144315 times.
173445 if (value & E07)
149 {
150
8/14
✓ Branch 1 taken 28956 times.
✓ Branch 2 taken 172 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 29128 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 172 times.
✓ Branch 18 taken 28956 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
29472 str += (!str.empty() ? filler : "") + "E5b";
151 }
152
2/2
✓ Branch 1 taken 1792 times.
✓ Branch 2 taken 171653 times.
173443 if (value & E08)
153 {
154
8/14
✓ Branch 1 taken 1716 times.
✓ Branch 2 taken 76 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 1793 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 77 times.
✓ Branch 18 taken 1716 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
1945 str += (!str.empty() ? filler : "") + "E5";
155 }
156
2/2
✓ Branch 1 taken 34244 times.
✓ Branch 2 taken 139202 times.
173446 if (value & R01)
157 {
158
5/14
✗ Branch 1 not taken.
✓ Branch 2 taken 34244 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 34244 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 34244 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 34244 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 34244 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
102732 str += (!str.empty() ? filler : "") + "G1";
159 }
160
2/2
✓ Branch 1 taken 30748 times.
✓ Branch 2 taken 142698 times.
173446 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 961 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.
32670 str += (!str.empty() ? filler : "") + "G2";
163 }
164
2/2
✓ Branch 1 taken 89 times.
✓ Branch 2 taken 173350 times.
173446 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 173382 times.
173439 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 173424 times.
173443 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 170586 times.
173445 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 173443 times.
173445 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 172402 times.
173444 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 25259 times.
✓ Branch 2 taken 148187 times.
173443 if (value & B02)
189 {
190
8/14
✓ Branch 1 taken 3116 times.
✓ Branch 2 taken 22142 times.
✓ Branch 4 taken 3116 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 22144 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 22144 times.
✓ Branch 18 taken 3116 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
69545 str += (!str.empty() ? filler : "") + "B1-2";
191 }
192
2/2
✓ Branch 1 taken 2859 times.
✓ Branch 2 taken 170585 times.
173447 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 170161 times.
173444 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 157 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 973 times.
✓ Branch 2 taken 172468 times.
173442 if (value & J01)
201 {
202
5/14
✗ Branch 1 not taken.
✓ Branch 2 taken 973 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 973 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 973 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 973 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 973 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
2919 str += (!str.empty() ? filler : "") + "Q1";
203 }
204
2/2
✓ Branch 1 taken 429 times.
✓ Branch 2 taken 173016 times.
173441 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 172567 times.
173445 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 880 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 880 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 120 times.
✓ Branch 18 taken 760 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
1122 str += (!str.empty() ? filler : "") + "Q5";
211 }
212
2/2
✓ Branch 1 taken 21 times.
✓ Branch 2 taken 173422 times.
173447 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 173010 times.
173443 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 173433 times.
173441 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 172287 times.
173435 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 172318 times.
173438 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 173434 times.
✗ Branch 2 not taken.
173433 if (!str.empty())
234 {
235 173434 return str;
236 }
237 return "None";
238 173439 }
239
240 3990108 SatelliteSystem Frequency::GetSatelliteSystemForFrequency(Frequency freq)
241 {
242 3990108 SatelliteSystem retVal = SatSys_None;
243
3/4
✓ Branch 1 taken 3989011 times.
✗ Branch 2 not taken.
✓ Branch 8 taken 27889436 times.
✓ Branch 9 taken 3973761 times.
31867480 for (auto satSys : SatelliteSystem::GetAll())
244 {
245
2/2
✓ Branch 1 taken 3990748 times.
✓ Branch 2 taken 23886681 times.
27888280 if (freq & satSys) { retVal |= satSys; }
246 3973761 }
247 3988745 return retVal;
248 }
249
250 233114 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 138412 times.
✓ Branch 13 taken 66588 times.
✓ Branch 14 taken 19366 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.
233114 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 138412 case G01: // GPS L1 (1575.42 MHz)
277 138412 return 1575.42e6;
278 66588 case G02: // GPS L2 (1227.6 MHz)
279 66588 return 1227.6e6;
280 19366 case G05: // GPS L5 (1176.45 MHz)
281 19366 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 34903 Frequency Frequency::GetL1(Frequency freq)
318 {
319
1/9
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 34903 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.
34903 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 34903 case G01: // GPS L1 (1575.42 MHz)
335 case G02: // GPS L2 (1227.6 MHz)
336 case G05: // GPS L5 (1176.45 MHz)
337 34903 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 1293 std::vector<Frequency> Frequency::ToVector(Frequency freq)
466 {
467 1293 std::vector<Frequency> v;
468
2/2
✓ Branch 0 taken 34911 times.
✓ Branch 1 taken 1293 times.
36204 for (const Frequency& f : GetAll())
469 {
470
3/4
✓ Branch 1 taken 2586 times.
✓ Branch 2 taken 32325 times.
✓ Branch 4 taken 2586 times.
✗ Branch 5 not taken.
34911 if (f.value & freq.value) { v.push_back(f); }
471 }
472 1293 return v;
473 }
474
475 1293 std::vector<Frequency> Frequency::toVector() const
476 {
477
1/2
✓ Branch 2 taken 1293 times.
✗ Branch 3 not taken.
1293 return ToVector(value);
478 }
479
480 bool Frequency::IsFirstFrequency(const Frequency& freq, const Frequency& filter)
481 {
482 return freq.isFirstFrequency(filter);
483 }
484
485 1599 bool Frequency::isFirstFrequency(const Frequency& filter) const
486 {
487
1/2
✓ Branch 1 taken 1599 times.
✗ Branch 2 not taken.
1599 Frequency_ f = filter & getSatSys();
488 1599 f = Frequency_(f ^ value);
489
490
2/2
✓ Branch 0 taken 306 times.
✓ Branch 1 taken 1293 times.
1599 if (f == Freq_None) { return true; }
491
492
1/2
✓ Branch 2 taken 1293 times.
✗ Branch 3 not taken.
1293 auto frequencies = Frequency(f).toVector();
493
1/2
✓ Branch 1 taken 1293 times.
✗ Branch 2 not taken.
1293 return std::ranges::all_of(frequencies,
494 3017 [&](const Frequency& freq) { return value < Frequency_(freq); });
495 1293 }
496
497 void to_json(json& j, const Frequency& data)
498 {
499 j = std::string(data);
500 }
501 189 void from_json(const json& j, Frequency& data)
502 {
503
2/4
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 189 times.
✗ Branch 5 not taken.
189 data = Frequency::fromString(j.get<std::string>());
504 189 }
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