NavID_T.cpp
Go to the documentation of this file.
1 //==============================================================================
2 //
3 // This file is part of GNSSTk, the ARL:UT GNSS Toolkit.
4 //
5 // The GNSSTk is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU Lesser General Public License as published
7 // by the Free Software Foundation; either version 3.0 of the License, or
8 // any later version.
9 //
10 // The GNSSTk is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU Lesser General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public
16 // License along with GNSSTk; if not, write to the Free Software Foundation,
17 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
18 //
19 // This software was developed by Applied Research Laboratories at the
20 // University of Texas at Austin.
21 // Copyright 2004-2022, The Board of Regents of The University of Texas System
22 //
23 //==============================================================================
24 
25 //==============================================================================
26 //
27 // This software was developed by Applied Research Laboratories at the
28 // University of Texas at Austin, under contract to an agency or agencies
29 // within the U.S. Department of Defense. The U.S. Government retains all
30 // rights to use, duplicate, distribute, disclose, or release this software.
31 //
32 // Pursuant to DoD Directive 523024
33 //
34 // DISTRIBUTION STATEMENT A: This software has been approved for public
35 // release, distribution is unlimited.
36 //
37 //==============================================================================
38 
39 #include "NavID.hpp"
40 
41 #include "TestUtil.hpp"
42 #include <iostream>
43 #include <string>
44 #include <sstream>
45 #include <set>
46 
47 using namespace std;
48 using namespace gnsstk;
49 
50 namespace gnsstk
51 {
52  // define some stream operators so that test failures involving
53  // enums are a bit more readable.
54 
55  std::ostream& operator<<(std::ostream& s, gnsstk::NavType e)
56  {
57  s << (long)e << " (" << gnsstk::StringUtils::asString(e) << ")";
58  return s;
59  }
60 }
61 
62 class NavID_T
63 {
64 public:
65  NavID_T();
68  unsigned constructorTest();
71  unsigned streamOutputTest();
76  unsigned stringConstructorTest();
77  unsigned inequalityTest();
78  unsigned asStringEnumTest();
79 
80  NavID testIDLNAV, testIDCNAVL2, testIDCNAVL5, testIDCNAV2, testIDMNAV,
81  testIDBD1, testIDBD2, testIDGloF, testIDGloC, testIDGalOS, testIDGalOS_2,
82  testIDGalOS_F, testID_IRNSS_SPS, testIDUnkwn, testIDAny;
83  stringstream ln, l2, l5, cnav2, mn, d1, d2, gf, gc, ginv, ginv_2, gfnv, is,
84  un, any;
85 };
86 
87 
90  : testIDLNAV(SatID(1, SatelliteSystem::GPS),
92  TrackingCode::CA)),
93  testIDCNAVL2(SatID(1, SatelliteSystem::GPS),
96  testIDCNAVL5(SatID(1, SatelliteSystem::GPS),
98  TrackingCode::L5I)),
99  testIDCNAV2(SatID(1, SatelliteSystem::GPS),
101  TrackingCode::L1CDP)),
102  testIDMNAV(SatID(1, SatelliteSystem::GPS),
104  TrackingCode::MDP)),
105  testIDBD1(SatID(6, SatelliteSystem::BeiDou),
107  TrackingCode::B1I)),
108  testIDBD2(SatID(5, SatelliteSystem::BeiDou),
110  TrackingCode::B1I)),
111  testIDGloF(SatID(2, SatelliteSystem::Glonass),
114  testIDGloC(SatID(2, SatelliteSystem::Glonass),
116  TrackingCode::L3OCDP)),
117  testIDGalOS(SatID(2, SatelliteSystem::Galileo),
119  TrackingCode::E1B)),
120  testIDGalOS_2(SatID(2, SatelliteSystem::Galileo),
122  TrackingCode::E5bI)),
123  testIDGalOS_F(SatID(2, SatelliteSystem::Galileo),
125  TrackingCode::E5aI)),
126  testID_IRNSS_SPS(SatID(2, SatelliteSystem::IRNSS),
128  TrackingCode::SPSL5)),
129  testIDAny(gnsstk::NavType::Any),
130  testIDUnkwn(SatID(1, SatelliteSystem::GPS),
132  TrackingCode::MDP))
133 {
134 }
135 
136 
137 unsigned NavID_T ::
139 {
140  TUDEF("NavID", "NavID()");
141 
142  NavID dfltTest;
143  TUASSERTE(gnsstk::NavType, NavType::Unknown, dfltTest.navType);
144 
145  //GPS LNAV
146  TUCSM("NavID(SatID,ObsID)");
147  TUASSERTE(gnsstk::NavType, NavType::GPSLNAV, testIDLNAV.navType);
148 
149  //GPS CNAV L2
150  TUASSERTE(gnsstk::NavType, NavType::GPSCNAVL2, testIDCNAVL2.navType);
151 
152  //GPS CNAV L5
153  TUASSERTE(gnsstk::NavType, NavType::GPSCNAVL5, testIDCNAVL5.navType);
154 
155  //GPS CNAV2
156  TUASSERTE(gnsstk::NavType, NavType::GPSCNAV2, testIDCNAV2.navType);
157 
158  //GPS MNAV
159  TUASSERTE(gnsstk::NavType, NavType::GPSMNAV, testIDMNAV.navType);
160 
161  //Beidou D1
162  TUASSERTE(gnsstk::NavType, NavType::BeiDou_D1, testIDBD1.navType);
163 
164  //Beidou D2
165  TUASSERTE(gnsstk::NavType, NavType::BeiDou_D2, testIDBD2.navType);
166 
167  //Glonass Civil F
168  TUASSERTE(gnsstk::NavType, NavType::GloCivilF, testIDGloF.navType);
169 
170  //Glonass Civil C
171  TUASSERTE(gnsstk::NavType, NavType::GloCivilC, testIDGloC.navType);
172 
173  //Galileo Open Sys
174  TUASSERTE(gnsstk::NavType, NavType::GalINAV, testIDGalOS.navType);
175 
176  TUASSERTE(gnsstk::NavType, NavType::GalINAV, testIDGalOS_2.navType);
177 
178  TUASSERTE(gnsstk::NavType, NavType::GalFNAV, testIDGalOS_F.navType);
179 
180  //IRNSS L5 SPS
181  TUASSERTE(gnsstk::NavType, NavType::IRNSS_SPS, testID_IRNSS_SPS.navType);
182 
183  //Any
184  TUASSERTE(gnsstk::NavType, NavType::Any, testIDAny.navType);
185 
186  //Unknown
187  TUASSERTE(gnsstk::NavType, NavType::Unknown, testIDUnkwn.navType);
188 
189  TURETURN();
190 }
191 
192 
193 unsigned NavID_T ::
195 {
196  TUDEF("NavID", "operator<<");
197 
198  ln << testIDLNAV;
199  TUASSERTE(std::string, "GPS_LNAV", ln.str());
200 
201  l2 << testIDCNAVL2;
202  TUASSERTE(std::string, "GPS_CNAV_L2", l2.str());
203 
204  l5 << testIDCNAVL5;
205  TUASSERTE(std::string, "GPS_CNAV_L5", l5.str());
206 
207  cnav2 << testIDCNAV2;
208  TUASSERTE(std::string, "GPS_CNAV2", cnav2.str());
209 
210  mn << testIDMNAV;
211  TUASSERTE(std::string, "GPS_MNAV", mn.str());
212 
213  d1 << testIDBD1;
214  TUASSERTE(std::string, "Beidou_D1", d1.str());
215 
216  d2 << testIDBD2;
217  TUASSERTE(std::string, "Beidou_D2", d2.str());
218 
219  gf << testIDGloF;
220  TUASSERTE(std::string, "GloCivilF", gf.str());
221 
222  gc << testIDGloC;
223  TUASSERTE(std::string, "GloCivilC", gc.str());
224 
225  ginv << testIDGalOS;
226  TUASSERTE(std::string, "GalINAV", ginv.str());
227 
229  TUASSERTE(std::string, "GalINAV", ginv_2.str());
230 
231  gfnv << testIDGalOS_F;
232  TUASSERTE(std::string, "GalFNAV", gfnv.str());
233 
234  is << testID_IRNSS_SPS;
235  TUASSERTE(std::string, "IRNSS_SPS", is.str());
236 
237  any << testIDAny;
238  TUASSERTE(std::string, "Any", any.str());
239 
240  un << testIDUnkwn;
241  TUASSERTE(std::string, "Unknown", un.str());
242 
243  TURETURN();
244 }
245 
246 
247 unsigned NavID_T ::
249 {
250  TUDEF("NavID", "NavID(string)");
251 
252  NavID testIDLNAVString(ln.str());
253  TUASSERTE(gnsstk::NavType, NavType::GPSLNAV, testIDLNAVString.navType);
254 
255  NavID testIDCNAVL2String(l2.str());
256  TUASSERTE(gnsstk::NavType, NavType::GPSCNAVL2, testIDCNAVL2String.navType);
257 
258  NavID testIDCNAVL5String(l5.str());
259  TUASSERTE(gnsstk::NavType, NavType::GPSCNAVL5, testIDCNAVL5String.navType);
260 
261  NavID testIDCNAV2String(cnav2.str());
262  TUASSERTE(gnsstk::NavType, NavType::GPSCNAV2, testIDCNAV2String.navType);
263 
264  NavID testIDMNAVString(mn.str());
265  TUASSERTE(gnsstk::NavType, NavType::GPSMNAV, testIDMNAVString.navType);
266 
267  NavID testIDBD1String(d1.str());
268  TUASSERTE(gnsstk::NavType, NavType::BeiDou_D1, testIDBD1String.navType);
269 
270  NavID testIDBD2String(d2.str());
271  TUASSERTE(gnsstk::NavType, NavType::BeiDou_D2, testIDBD2String.navType);
272 
273  NavID testIDGloFString(gf.str());
274  TUASSERTE(gnsstk::NavType, NavType::GloCivilF, testIDGloFString.navType);
275 
276  NavID testIDGloCString(gc.str());
277  TUASSERTE(gnsstk::NavType, NavType::GloCivilC, testIDGloCString.navType);
278 
279  NavID testIDGalOSStringI(ginv.str());
280  TUASSERTE(gnsstk::NavType, NavType::GalINAV, testIDGalOSStringI.navType);
281 
282  NavID testIDGalOSStringF(gfnv.str());
283  TUASSERTE(gnsstk::NavType, NavType::GalFNAV, testIDGalOSStringF.navType);
284 
285  NavID testID_IRNSS_SPS_String(is.str());
286  TUASSERTE(gnsstk::NavType,NavType::IRNSS_SPS,testID_IRNSS_SPS_String.navType);
287 
288  NavID testIDAnyString(any.str());
289  TUASSERTE(gnsstk::NavType, NavType::Any, testIDAnyString.navType);
290 
291  NavID testIDUnkwnString(un.str());
292  TUASSERTE(gnsstk::NavType, NavType::Unknown, testIDUnkwnString.navType);
293 
294  TURETURN();
295 }
296 
297 
298 unsigned NavID_T ::
300 {
301  TUDEF("NavID", "operator!=");
302 
303  set<NavID> testSet;
304  //Insert NavTypes into set in backward order.
305  // This implicitly tests operator<
306  testSet.insert(testID_IRNSS_SPS);
307  testSet.insert(testIDGalOS);
308  testSet.insert(testIDGalOS_F);
309  testSet.insert(testIDGloC);
310  testSet.insert(testIDGloF);
311  testSet.insert(testIDBD2);
312  testSet.insert(testIDBD1);
313  testSet.insert(testIDMNAV);
314  testSet.insert(testIDCNAV2);
315  testSet.insert(testIDCNAVL5);
316  testSet.insert(testIDCNAVL2);
317  testSet.insert(testIDLNAV);
318  testSet.insert(testIDAny);
319  testSet.insert(testIDUnkwn);
320 
321  // Instantiate currTest to the first value in the enums
322  NavID currTest;
323  currTest.navType = NavType::Unknown;
324 
325  //Set nid equal to dereferenced NavID set iterator; should
326  //initially correspond to first location in set (@ value GPS_LNAV).
327  //Compare to currTest which initially corresponds to NavID for first
328  //location in NavType enum (ntGPSLNAV).
329  for (const auto& nid : testSet)
330  {
331  TUASSERTE(gnsstk::NavID, currTest, nid);
332  currTest.navType = static_cast<gnsstk::NavType>((int)currTest.navType + 1);
333  }
334 
335  TURETURN();
336 }
337 
338 
339 unsigned NavID_T ::
341 {
342  TUDEF("NavID", "asString");
343  // These tests verify that every enum has a string
344  // representation and every string has a corresponding enum.
345  // It also implicitly verifies that the string
346  // representations aren't duplicated, since if two enums
347  // translated to string "XXX", the attempt to reverse the
348  // translation would fail.
349  for (gnsstk::NavType nt : NavTypeIterator())
350  {
351  std::string s;
353  TUASSERT(!s.empty());
354  if (nt != gnsstk::NavType::Unknown)
355  TUASSERT(s != "Unknown");
356  gnsstk::NavType nt2;
358  TUASSERTE(gnsstk::NavType, nt, nt2);
359  }
360  TURETURN();
361 }
362 
363 int main()
364 {
365  unsigned errorTotal = 0;
366  NavID_T testClass;
367 
368  errorTotal += testClass.constructorTest();
369  errorTotal += testClass.streamOutputTest();
370  errorTotal += testClass.stringConstructorTest();
371  errorTotal += testClass.inequalityTest();
372 
373  std::cout << "Total Failures for " << __FILE__ << ": " << errorTotal
374  << std::endl;
375 
376  return errorTotal;
377 }
378 
gnsstk::SatelliteSystem::IRNSS
@ IRNSS
Official name changed from IRNSS to NavIC.
gnsstk::NavType::Unknown
@ Unknown
Uninitialized value.
TUCSM
#define TUCSM(METHOD)
Definition: TestUtil.hpp:59
NavID_T::testIDCNAVL5
NavID testIDCNAVL5
Definition: NavID_T.cpp:80
NavID_T::testID_IRNSS_SPS
NavID testID_IRNSS_SPS
Definition: NavID_T.cpp:82
gnsstk::StringUtils::asNavType
NavType asNavType(const std::string &s) noexcept
Convert a string name to an NavType.
Definition: NavType.cpp:75
gnsstk::CarrierBand::G1
@ G1
GLONASS G1.
TUCATCH
#define TUCATCH(STATEMENT)
Definition: TestUtil.hpp:193
L1
gnsstk::Matrix< double > L1
Definition: Matrix_LUDecomp_T.cpp:46
NavID_T::any
stringstream any
Definition: NavID_T.cpp:84
NavID_T::gc
stringstream gc
Definition: NavID_T.cpp:83
gnsstk::TrackingCode::E1B
@ E1B
Galileo E1-B signal, supporting OS/HAS/SoL.
gnsstk::CarrierBand::E5b
@ E5b
Galileo E5b.
NavID_T::gf
stringstream gf
Definition: NavID_T.cpp:83
TUASSERTE
#define TUASSERTE(TYPE, EXP, GOT)
Definition: TestUtil.hpp:81
gnsstk::CarrierBand
CarrierBand
Definition: CarrierBand.hpp:54
gnsstk::SatelliteSystem
SatelliteSystem
Supported satellite systems.
Definition: SatelliteSystem.hpp:55
gnsstk::CarrierBand::Any
@ Any
Used to match any carrier band.
NavID_T::testIDLNAV
NavID testIDLNAV
Definition: NavID_T.cpp:80
gnsstk::SatID
Definition: SatID.hpp:89
gnsstk::TrackingCode::L5I
@ L5I
Modernized GPS L5 civil in-phase.
gnsstk::StringUtils::asString
std::string asString(IonexStoreStrategy e)
Convert a IonexStoreStrategy to a whitespace-free string name.
Definition: IonexStoreStrategy.cpp:46
NavID_T::testIDGalOS_F
NavID testIDGalOS_F
Definition: NavID_T.cpp:82
NavID_T::un
stringstream un
Definition: NavID_T.cpp:84
gnsstk::TrackingCode::MDP
@ MDP
Modernized GPS military unique code.
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
NavID_T::testIDUnkwn
NavID testIDUnkwn
Definition: NavID_T.cpp:82
gnsstk::TrackingCode::Standard
@ Standard
Legacy Glonass civil signal.
NavID_T::d1
stringstream d1
Definition: NavID_T.cpp:83
gnsstk::ObservationType::NavMsg
@ NavMsg
Navigation Message data.
gnsstk::TrackingCode::E5aI
@ E5aI
Galileo E5a I code.
gnsstk::SatelliteSystem::GPS
@ GPS
gnsstk::TrackingCode::CA
@ CA
Legacy GPS civil code.
NavID_T::testIDCNAV2
NavID testIDCNAV2
Definition: NavID_T.cpp:80
TUASSERT
#define TUASSERT(EXPR)
Definition: TestUtil.hpp:63
NavID_T::l2
stringstream l2
Definition: NavID_T.cpp:83
NavID_T::testIDGalOS
NavID testIDGalOS
Definition: NavID_T.cpp:81
TestUtil.hpp
gnsstk::CarrierBand::B1
@ B1
BeiDou B1.
gnsstk::CarrierBand::G3
@ G3
GLONASS G3.
NavID_T::testIDBD2
NavID testIDBD2
Definition: NavID_T.cpp:81
TURETURN
#define TURETURN()
Definition: TestUtil.hpp:232
NavID_T::testIDGalOS_2
NavID testIDGalOS_2
Definition: NavID_T.cpp:81
NavID_T::is
stringstream is
Definition: NavID_T.cpp:83
NavID_T::asStringEnumTest
unsigned asStringEnumTest()
Definition: NavID_T.cpp:340
NavID_T::testIDCNAVL2
NavID testIDCNAVL2
Definition: NavID_T.cpp:80
gnsstk::ObsID
Definition: ObsID.hpp:82
NavID_T::testIDMNAV
NavID testIDMNAV
Definition: NavID_T.cpp:80
gnsstk::TrackingCode::L2CML
@ L2CML
Modernized GPS L2 civil M+L combined tracking.
gnsstk::TrackingCode::B1I
@ B1I
BeiDou B1 I code.
NavID_T::stringConstructorTest
unsigned stringConstructorTest()
Definition: NavID_T.cpp:248
NavID_T::mn
stringstream mn
Definition: NavID_T.cpp:83
NavID_T::NavID_T
NavID_T()
Definition: NavID_T.cpp:89
NavID_T::cnav2
stringstream cnav2
Definition: NavID_T.cpp:83
main
int main()
Definition: NavID_T.cpp:363
TUDEF
#define TUDEF(CLASS, METHOD)
Definition: TestUtil.hpp:56
NavID_T::testIDAny
NavID testIDAny
Definition: NavID_T.cpp:82
gnsstk::NavID::navType
NavType navType
navType for this satellite
Definition: NavID.hpp:112
gnsstk::CarrierBand::B2
@ B2
BeiDou B2b.
std::operator<<
std::ostream & operator<<(std::ostream &s, gnsstk::StringUtils::FFLead v)
Definition: FormattedDouble_T.cpp:44
NavID_T::l5
stringstream l5
Definition: NavID_T.cpp:83
gnsstk::TrackingCode::SPSL5
@ SPSL5
IRNSS L5 SPS.
NavID_T::testIDGloC
NavID testIDGloC
Definition: NavID_T.cpp:81
gnsstk::TrackingCode
TrackingCode
Definition: TrackingCode.hpp:64
std
Definition: Angle.hpp:142
NavID_T::ginv
stringstream ginv
Definition: NavID_T.cpp:83
gnsstk::TrackingCode::E5bI
@ E5bI
Galileo E5b I code.
NavID_T::testIDBD1
NavID testIDBD1
Definition: NavID_T.cpp:81
NavID_T::streamOutputTest
unsigned streamOutputTest()
Definition: NavID_T.cpp:194
NavID_T::gfnv
stringstream gfnv
Definition: NavID_T.cpp:83
NavID.hpp
NavID_T::ln
stringstream ln
Definition: NavID_T.cpp:83
gnsstk::TrackingCode::L1CDP
@ L1CDP
Modernized GPS L1C civil code tracking (pilot + data)
gnsstk::SatelliteSystem::Glonass
@ Glonass
gnsstk::SatelliteSystem::BeiDou
@ BeiDou
aka Compass
gnsstk::TrackingCode::L3OCDP
@ L3OCDP
Glonass L3 I+Q combined tracking.
NavID_T::testIDGloF
NavID testIDGloF
Definition: NavID_T.cpp:81
NavID_T::constructorTest
unsigned constructorTest()
Definition: NavID_T.cpp:138
NavID_T
Definition: NavID_T.cpp:62
gnsstk::NavID
Definition: NavID.hpp:61
gnsstk::NavType
NavType
Supported navigation types.
Definition: NavType.hpp:58
L2
gnsstk::Matrix< double > L2
Definition: Matrix_LUDecomp_T.cpp:46
NavID_T::inequalityTest
unsigned inequalityTest()
Definition: NavID_T.cpp:299
NavID_T::ginv_2
stringstream ginv_2
Definition: NavID_T.cpp:83
NavID_T::d2
stringstream d2
Definition: NavID_T.cpp:83
gnsstk::NavTypeIterator
EnumIterator< NavType, NavType::Unknown, NavType::Last > NavTypeIterator
Definition: NavType.hpp:79
gnsstk::SatelliteSystem::Galileo
@ Galileo
gnsstk::CarrierBand::L5
@ L5
GPS L5, Galileo E5a, SBAS L5, QZSS L5, BeiDou B2a, NavIC L5.
gnsstk::ObservationType
ObservationType
The type of observation, mostly used by ObsID.
Definition: ObservationType.hpp:55


gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:40