INSTINCT Code Coverage Report


Directory: src/
File: Navigation/GNSS/Core/Frequency.cpp
Date: 2025-11-25 23:34:18
Exec Total Coverage
Lines: 140 384 36.5%
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 414306 Frequency Frequency::fromString(const std::string& typeString)
23 {
24
7/8
✓ Branch 1 taken 414296 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 414296 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 14694 times.
✓ Branch 8 taken 399602 times.
✓ Branch 9 taken 14704 times.
✓ Branch 10 taken 399602 times.
414306 if (typeString == "B1" || typeString == "B01" || typeString == "C01") { return B01; }
25
7/8
✓ Branch 1 taken 399592 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 399592 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6045 times.
✓ Branch 8 taken 393547 times.
✓ Branch 9 taken 6055 times.
✓ Branch 10 taken 393547 times.
399602 if (typeString == "B2" || typeString == "B08" || typeString == "C08") { return B08; }
26
7/8
✓ Branch 1 taken 393537 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 393537 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 15717 times.
✓ Branch 8 taken 377820 times.
✓ Branch 9 taken 15727 times.
✓ Branch 10 taken 377820 times.
393547 if (typeString == "B3" || typeString == "B06" || typeString == "C06") { return B06; }
27
7/8
✓ Branch 1 taken 377810 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 377810 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 16275 times.
✓ Branch 8 taken 361535 times.
✓ Branch 9 taken 16285 times.
✓ Branch 10 taken 361535 times.
377820 if (typeString == "B1-2" || typeString == "B02" || typeString == "C02") { return B02; }
28
7/8
✓ Branch 1 taken 361525 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 361525 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 7533 times.
✓ Branch 8 taken 353992 times.
✓ Branch 9 taken 7543 times.
✓ Branch 10 taken 353992 times.
361535 if (typeString == "B2a" || typeString == "B05" || typeString == "C05") { return B05; }
29
7/8
✓ Branch 1 taken 353982 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 353982 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 15903 times.
✓ Branch 8 taken 338079 times.
✓ Branch 9 taken 15913 times.
✓ Branch 10 taken 338079 times.
353992 if (typeString == "B2b" || typeString == "B07" || typeString == "C07") { return B07; }
30
6/6
✓ Branch 1 taken 338069 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 13857 times.
✓ Branch 5 taken 324212 times.
✓ Branch 6 taken 13867 times.
✓ Branch 7 taken 324212 times.
338079 if (typeString == "E1" || typeString == "E01") { return E01; }
31
6/6
✓ Branch 1 taken 324202 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 13485 times.
✓ Branch 5 taken 310717 times.
✓ Branch 6 taken 13495 times.
✓ Branch 7 taken 310717 times.
324212 if (typeString == "E5a" || typeString == "E05") { return E05; }
32
6/6
✓ Branch 1 taken 310707 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 12369 times.
✓ Branch 5 taken 298338 times.
✓ Branch 6 taken 12379 times.
✓ Branch 7 taken 298338 times.
310717 if (typeString == "E6" || typeString == "E06") { return E06; }
33
6/6
✓ Branch 1 taken 298328 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 12834 times.
✓ Branch 5 taken 285494 times.
✓ Branch 6 taken 12844 times.
✓ Branch 7 taken 285494 times.
298338 if (typeString == "E5b" || typeString == "E07") { return E07; }
34
6/6
✓ Branch 1 taken 285484 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 12090 times.
✓ Branch 5 taken 273394 times.
✓ Branch 6 taken 12100 times.
✓ Branch 7 taken 273394 times.
285494 if (typeString == "E5" || typeString == "E08") { return E08; }
35
6/6
✓ Branch 1 taken 273384 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 51708 times.
✓ Branch 5 taken 221676 times.
✓ Branch 6 taken 51718 times.
✓ Branch 7 taken 221676 times.
273394 if (typeString == "L1" || typeString == "G01") { return G01; }
36
6/6
✓ Branch 1 taken 221666 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 50871 times.
✓ Branch 5 taken 170795 times.
✓ Branch 6 taken 50881 times.
✓ Branch 7 taken 170795 times.
221676 if (typeString == "L2" || typeString == "G02") { return G02; }
37
6/6
✓ Branch 1 taken 170785 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 11160 times.
✓ Branch 5 taken 159625 times.
✓ Branch 6 taken 11170 times.
✓ Branch 7 taken 159625 times.
170795 if (typeString == "L5" || typeString == "G05") { return G05; }
38
6/6
✓ Branch 1 taken 159615 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 9393 times.
✓ Branch 5 taken 150222 times.
✓ Branch 6 taken 9403 times.
✓ Branch 7 taken 150222 times.
159625 if (typeString == "I5" || typeString == "I05") { return I05; }
39
6/6
✓ Branch 1 taken 150212 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 837 times.
✓ Branch 5 taken 149375 times.
✓ Branch 6 taken 847 times.
✓ Branch 7 taken 149375 times.
150222 if (typeString == "IS" || typeString == "I09") { return I09; }
40
6/6
✓ Branch 1 taken 149365 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 11067 times.
✓ Branch 5 taken 138298 times.
✓ Branch 6 taken 11077 times.
✓ Branch 7 taken 138298 times.
149375 if (typeString == "Q1" || typeString == "J01") { return J01; }
41
6/6
✓ Branch 1 taken 138288 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 11067 times.
✓ Branch 5 taken 127221 times.
✓ Branch 6 taken 11077 times.
✓ Branch 7 taken 127221 times.
138298 if (typeString == "Q2" || typeString == "J02") { return J02; }
42
6/6
✓ Branch 1 taken 127211 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 10695 times.
✓ Branch 5 taken 116516 times.
✓ Branch 6 taken 10705 times.
✓ Branch 7 taken 116516 times.
127221 if (typeString == "Q5" || typeString == "J05") { return J05; }
43
7/8
✓ Branch 1 taken 116506 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 116506 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8835 times.
✓ Branch 8 taken 107671 times.
✓ Branch 9 taken 8845 times.
✓ Branch 10 taken 107671 times.
116516 if (typeString == "Q6" || typeString == "QLEX" || typeString == "J06") { return J06; }
44
6/6
✓ Branch 1 taken 107661 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 38874 times.
✓ Branch 5 taken 68787 times.
✓ Branch 6 taken 38884 times.
✓ Branch 7 taken 68787 times.
107671 if (typeString == "G1" || typeString == "R01") { return R01; }
45
6/6
✓ Branch 1 taken 68777 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 38688 times.
✓ Branch 5 taken 30089 times.
✓ Branch 6 taken 38698 times.
✓ Branch 7 taken 30089 times.
68787 if (typeString == "G2" || typeString == "R02") { return R02; }
46
6/6
✓ Branch 1 taken 30079 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 558 times.
✓ Branch 5 taken 29521 times.
✓ Branch 6 taken 568 times.
✓ Branch 7 taken 29521 times.
30089 if (typeString == "G3" || typeString == "R03") { return R03; }
47
6/6
✓ Branch 1 taken 29511 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 4371 times.
✓ Branch 5 taken 25140 times.
✓ Branch 6 taken 4381 times.
✓ Branch 7 taken 25140 times.
29521 if (typeString == "G1a" || typeString == "R04") { return R04; }
48
6/6
✓ Branch 1 taken 25130 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 4371 times.
✓ Branch 5 taken 20759 times.
✓ Branch 6 taken 4381 times.
✓ Branch 7 taken 20759 times.
25140 if (typeString == "G2a" || typeString == "R06") { return R06; }
49
6/6
✓ Branch 1 taken 20749 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 10509 times.
✓ Branch 5 taken 10240 times.
✓ Branch 6 taken 10519 times.
✓ Branch 7 taken 10240 times.
20759 if (typeString == "S1" || typeString == "S01") { return S01; }
50
4/6
✓ Branch 1 taken 10230 times.
✓ Branch 2 taken 10 times.
✓ Branch 4 taken 10230 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 10240 times.
✗ Branch 7 not taken.
10240 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 227619 Frequency::operator std::string() const
121 {
122
1/2
✓ Branch 1 taken 227626 times.
✗ Branch 2 not taken.
227619 const std::string filler = " | ";
123 227626 std::string str;
124
2/2
✓ Branch 1 taken 59054 times.
✓ Branch 2 taken 168572 times.
227626 if (value & G01)
125 {
126
5/14
✗ Branch 1 not taken.
✓ Branch 2 taken 59054 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 59055 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 59051 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 59054 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 59053 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
177161 str += (!str.empty() ? filler : "") + "L1";
127 }
128
2/2
✓ Branch 1 taken 40357 times.
✓ Branch 2 taken 187271 times.
227625 if (value & G02)
129 {
130
8/14
✓ Branch 1 taken 29241 times.
✓ Branch 2 taken 11115 times.
✓ Branch 4 taken 29242 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 11114 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 40355 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 40356 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 11115 times.
✓ Branch 18 taken 29242 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
62587 str += (!str.empty() ? filler : "") + "L2";
131 }
132
2/2
✓ Branch 1 taken 28091 times.
✓ Branch 2 taken 199531 times.
227628 if (value & G05)
133 {
134
8/14
✓ Branch 1 taken 17166 times.
✓ Branch 2 taken 10925 times.
✓ Branch 4 taken 17166 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10925 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 28091 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 28091 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 10925 times.
✓ Branch 18 taken 17166 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
49941 str += (!str.empty() ? filler : "") + "L5";
135 }
136
2/2
✓ Branch 1 taken 49894 times.
✓ Branch 2 taken 177731 times.
227622 if (value & E01)
137 {
138
5/14
✗ Branch 1 not taken.
✓ Branch 2 taken 49892 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 7 taken 49894 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 49894 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 49894 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 49894 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
149680 str += (!str.empty() ? filler : "") + "E1";
139 }
140
2/2
✓ Branch 1 taken 27327 times.
✓ Branch 2 taken 200300 times.
227625 if (value & E05)
141 {
142
8/14
✓ Branch 1 taken 16376 times.
✓ Branch 2 taken 10951 times.
✓ Branch 4 taken 16376 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10951 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 27327 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 27327 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 10951 times.
✓ Branch 18 taken 16376 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
49229 str += (!str.empty() ? filler : "") + "E5a";
143 }
144
2/2
✓ Branch 1 taken 89 times.
✓ Branch 2 taken 227536 times.
227627 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 39962 times.
✓ Branch 2 taken 187663 times.
227625 if (value & E07)
149 {
150
8/14
✓ Branch 1 taken 28956 times.
✓ Branch 2 taken 11006 times.
✓ Branch 4 taken 28956 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 11006 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 39962 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 39962 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 11006 times.
✓ Branch 18 taken 28956 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
61974 str += (!str.empty() ? filler : "") + "E5b";
151 }
152
2/2
✓ Branch 1 taken 12627 times.
✓ Branch 2 taken 214998 times.
227625 if (value & E08)
153 {
154
8/14
✓ Branch 1 taken 1716 times.
✓ Branch 2 taken 10911 times.
✓ Branch 4 taken 1716 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10911 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 12627 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 12627 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 10911 times.
✓ Branch 18 taken 1716 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
34449 str += (!str.empty() ? filler : "") + "E5";
155 }
156
2/2
✓ Branch 1 taken 34244 times.
✓ Branch 2 taken 193382 times.
227625 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 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.
102731 str += (!str.empty() ? filler : "") + "G1";
159 }
160
2/2
✓ Branch 1 taken 30747 times.
✓ Branch 2 taken 196878 times.
227626 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 962 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.
32669 str += (!str.empty() ? filler : "") + "G2";
163 }
164
2/2
✓ Branch 1 taken 89 times.
✓ Branch 2 taken 227531 times.
227626 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 227559 times.
227620 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 227601 times.
227620 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 224766 times.
227622 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 227621 times.
227625 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 226584 times.
227622 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 202366 times.
227625 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 22143 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 25259 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 25258 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 22142 times.
✓ Branch 18 taken 3116 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
69543 str += (!str.empty() ? filler : "") + "B1-2";
191 }
192
2/2
✓ Branch 1 taken 2859 times.
✓ Branch 2 taken 224765 times.
227624 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 224342 times.
227624 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 226653 times.
227623 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 972 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 973 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.
2919 str += (!str.empty() ? filler : "") + "Q1";
203 }
204
2/2
✓ Branch 1 taken 429 times.
✓ Branch 2 taken 227195 times.
227626 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 226742 times.
227624 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 227603 times.
227623 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 227194 times.
227624 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 227622 times.
227625 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 226472 times.
227624 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 226511 times.
227623 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 227624 times.
✗ Branch 2 not taken.
227626 if (!str.empty())
234 {
235 227624 return str;
236 }
237 return "None";
238 227618 }
239
240 12258409 SatelliteSystem Frequency::GetSatelliteSystemForFrequency(Frequency freq)
241 {
242 12258409 SatelliteSystem retVal = SatSys_None;
243
3/4
✓ Branch 1 taken 12258303 times.
✗ Branch 2 not taken.
✓ Branch 8 taken 85757248 times.
✓ Branch 9 taken 12236482 times.
97998506 for (auto satSys : SatelliteSystem::GetAll())
244 {
245
2/2
✓ Branch 1 taken 12259933 times.
✓ Branch 2 taken 73480448 times.
85757673 if (freq & satSys) { retVal |= satSys; }
246 12236482 }
247 12256991 return retVal;
248 }
249
250 2068384 double Frequency::GetFrequency(Frequency freq, int8_t num)
251 {
252
10/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 490921 times.
✓ Branch 8 taken 181001 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 180170 times.
✓ Branch 11 taken 179416 times.
✓ Branch 12 taken 556419 times.
✓ Branch 13 taken 307674 times.
✓ Branch 14 taken 172080 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.
2068384 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 490921 case E01: // Galileo, "E1" (1575.42 MHz)
267 490921 return 1575.42e6;
268 181001 case E05: // Galileo E5a (1176.45 MHz)
269 181001 return 1176.45e6;
270 case E06: // Galileo E6 (1278.75 MHz)
271 return 1278.75e6;
272 180170 case E07: // Galileo E5b (1207.14 MHz)
273 180170 return 1207.14e6;
274 179416 case E08: // Galileo E5 (E5a + E5b) (1191.795 MHz)
275 179416 return 1191.795e6;
276 556419 case G01: // GPS L1 (1575.42 MHz)
277 556419 return 1575.42e6;
278 307674 case G02: // GPS L2 (1227.6 MHz)
279 307674 return 1227.6e6;
280 172080 case G05: // GPS L5 (1176.45 MHz)
281 172080 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 104891 Frequency Frequency::GetL1(Frequency freq)
318 {
319
2/9
✗ Branch 1 not taken.
✓ Branch 2 taken 36304 times.
✓ Branch 3 taken 68587 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.
104891 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 36304 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 36304 return E01;
334 68587 case G01: // GPS L1 (1575.42 MHz)
335 case G02: // GPS L2 (1227.6 MHz)
336 case G05: // GPS L5 (1176.45 MHz)
337 68587 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 11800 std::vector<Frequency> Frequency::ToVector(Frequency freq)
466 {
467 11800 std::vector<Frequency> v;
468
2/2
✓ Branch 0 taken 318600 times.
✓ Branch 1 taken 11800 times.
330400 for (const Frequency& f : GetAll())
469 {
470
3/4
✓ Branch 1 taken 29604 times.
✓ Branch 2 taken 288996 times.
✓ Branch 4 taken 29604 times.
✗ Branch 5 not taken.
318600 if (f.value & freq.value) { v.push_back(f); }
471 }
472 11800 return v;
473 }
474
475 11800 std::vector<Frequency> Frequency::toVector() const
476 {
477
1/2
✓ Branch 2 taken 11800 times.
✗ Branch 3 not taken.
11800 return ToVector(value);
478 }
479
480 bool Frequency::IsFirstFrequency(const Frequency& freq, const Frequency& filter)
481 {
482 return freq.isFirstFrequency(filter);
483 }
484
485 12106 bool Frequency::isFirstFrequency(const Frequency& filter) const
486 {
487
1/2
✓ Branch 1 taken 12106 times.
✗ Branch 2 not taken.
12106 Frequency_ f = filter & getSatSys();
488 12106 f = Frequency_(f ^ value);
489
490
2/2
✓ Branch 0 taken 306 times.
✓ Branch 1 taken 11800 times.
12106 if (f == Freq_None) { return true; }
491
492
1/2
✓ Branch 2 taken 11800 times.
✗ Branch 3 not taken.
11800 auto frequencies = Frequency(f).toVector();
493
1/2
✓ Branch 1 taken 11800 times.
✗ Branch 2 not taken.
11800 return std::ranges::all_of(frequencies,
494 28534 [&](const Frequency& freq) { return value < Frequency_(freq); });
495 11800 }
496
497 void to_json(json& j, const Frequency& data)
498 {
499 j = std::string(data);
500 }
501 270 void from_json(const json& j, Frequency& data)
502 {
503
2/4
✓ Branch 1 taken 270 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 270 times.
✗ Branch 5 not taken.
270 data = Frequency::fromString(j.get<std::string>());
504 270 }
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 < static_cast<uint64_t>(0xFF) << (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 = (static_cast<uint64_t>(1) << (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