NavSignalID_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 //
28 // This software was developed by Applied Research Laboratories at the
29 // University of Texas at Austin, under contract to an agency or agencies
30 // within the U.S. Department of Defense. The U.S. Government retains all
31 // rights to use, duplicate, distribute, disclose, or release this software.
32 //
33 // Pursuant to DoD Directive 523024
34 //
35 // DISTRIBUTION STATEMENT A: This software has been approved for public
36 // release, distribution is unlimited.
37 //
38 //==============================================================================
39 #include <list>
40 #include "NavSignalID.hpp"
41 #include "TestUtil.hpp"
42 
43 namespace gnsstk
44 {
45  std::ostream& operator<<(std::ostream& s, gnsstk::SatelliteSystem e)
46  {
47  s << StringUtils::asString(e);
48  return s;
49  }
50 
51  std::ostream& operator<<(std::ostream& s, gnsstk::CarrierBand e)
52  {
53  s << StringUtils::asString(e);
54  return s;
55  }
56 
57  std::ostream& operator<<(std::ostream& s, gnsstk::TrackingCode e)
58  {
59  s << StringUtils::asString(e);
60  return s;
61  }
62 
63  std::ostream& operator<<(std::ostream& s, gnsstk::NavType e)
64  {
65  s << StringUtils::asString(e);
66  return s;
67  }
68 }
69 
70 
72 class TestClass : public gnsstk::NavSignalID
73 {
74 public:
77  : NavSignalID(sys,car,track,nmt)
78  {}
80  gnsstk::NavType nmt)
81  : NavSignalID(sys,oid,nmt)
82  {}
83  int order(const TestClass& right) const
84  {
85  return NavSignalID::order(right);
86  }
87 };
88 
89 
91 {
92 public:
93  unsigned constructorTest();
94  unsigned orderTest();
95  unsigned orderTestFast();
96 };
97 
98 
99 unsigned NavSignalID_T ::
101 {
102  TUDEF("NavSignalID", "NavSignalID");
103  // test default constructor first
109  // test the fill-in-everything constructor
118  // test ObsID constructor
121  oid.freqOffs = -7;
122  oid.freqOffsWild = false;
123  oid.setMcodeBits(0x12345678, 0xffffffff);
130  TUASSERTE(gnsstk::ObsID, oid, uut3.obs);
131  TURETURN();
132 }
133 
134 
135 unsigned NavSignalID_T ::
137 {
138  TUDEF("NavSignalID", "order");
139  // Create a bunch of test objects in the order they should be in
140  // when sorting, and verify their ordering and the commutative
141  // properties of ordering.
142  using SS = gnsstk::SatelliteSystem;
143  using CB = gnsstk::CarrierBand;
144  using TC = gnsstk::TrackingCode;
145  using NT = gnsstk::NavType;
146  std::list<TestClass> uut;
147  // yes this will generate a lot of completely absurd, invalid
148  // code combinations but that's not the point.
150  {
152  {
153  if (cb == gnsstk::CarrierBand::Any)
154  continue; // don't test wildcards
156  {
157  if (tc == gnsstk::TrackingCode::Any)
158  continue; // don't test wildcards
160  {
161  if (nt == gnsstk::NavType::Any)
162  continue; // don't test wildcards
163  uut.push_back(TestClass(ss,cb,tc,nt));
164  }
165  }
166  }
167  }
168  bool failed = false;
169  for (auto i1 = uut.begin(); i1 != uut.end(); i1++)
170  {
171  for (auto i2 = std::next(i1); i2 != uut.end(); i2++)
172  {
173  if (!((*i1) < (*i2)))
174  {
175  std::ostringstream s;
176  s << (*i1) << " < " << (*i2);
177  TUFAIL(s.str());
178  failed = true;
179  }
180  }
181  }
182  if (!failed)
183  TUPASS("operator<");
184  TURETURN();
185 }
186 
187 
188 unsigned NavSignalID_T ::
190 {
191  TUDEF("NavSignalID", "order");
192  // test GLONASS metadata ordering
203  TUASSERTE(int, -1, uut1.order(uut2));
204  TUASSERTE(int, 1, uut2.order(uut1));
205  TUASSERTE(int, 0, uut1.order(uut3));
206  // test mcode metadata ordering
211  oid4.setMcodeBits(0x12345678);
212  oid5.setMcodeBits(0x87654321);
216  TUASSERTE(int, -1, uut4.order(uut5));
217  TUASSERTE(int, 1, uut5.order(uut4));
218  TUASSERTE(int, 0, uut4.order(uut6));
219  TURETURN();
220 }
221 
222 
223 int main()
224 {
225  NavSignalID_T testClass;
226  unsigned errorTotal = 0;
227 
228  errorTotal += testClass.constructorTest();
229  // This test takes a long time, so don't run it as part of
230  // automated testing.
231  //errorTotal += testClass.orderTest();
232  errorTotal += testClass.orderTestFast();
233  std::cout << "Total Failures for " << __FILE__ << ": " << errorTotal
234  << std::endl;
235 
236  return errorTotal;
237 }
TestClass::TestClass
TestClass(gnsstk::SatelliteSystem sys, const gnsstk::ObsID &oid, gnsstk::NavType nmt)
Definition: NavSignalID_T.cpp:79
gnsstk::NavSignalID::nav
NavType nav
Navigation message structure of this signal.
Definition: NavSignalID.hpp:96
gnsstk::NavType::Unknown
@ Unknown
Uninitialized value.
NavSignalID_T::orderTest
unsigned orderTest()
Definition: NavSignalID_T.cpp:136
gnsstk::CarrierBand::G1
@ G1
GLONASS G1.
gnsstk::NavType::GPSMNAV
@ GPSMNAV
TUASSERTE
#define TUASSERTE(TYPE, EXP, GOT)
Definition: TestUtil.hpp:81
gnsstk::CarrierBand
CarrierBand
Definition: CarrierBand.hpp:54
TUFAIL
#define TUFAIL(MSG)
Definition: TestUtil.hpp:228
gnsstk::SatelliteSystem
SatelliteSystem
Supported satellite systems.
Definition: SatelliteSystem.hpp:55
gnsstk::TrackingCode::Y
@ Y
Encrypted legacy GPS precise code.
gnsstk::CarrierBand::Any
@ Any
Used to match any carrier band.
example5.oid
oid
Definition: example5.py:29
gnsstk::StringUtils::asString
std::string asString(IonexStoreStrategy e)
Convert a IonexStoreStrategy to a whitespace-free string name.
Definition: IonexStoreStrategy.cpp:46
gnsstk::ObsID::band
CarrierBand band
Definition: ObsID.hpp:200
gnsstk::NavType::GloCivilF
@ GloCivilF
gnsstk::TrackingCode::MDP
@ MDP
Modernized GPS military unique code.
gnsstk::CarrierBand::Unknown
@ Unknown
Uninitialized value.
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
gnsstk::NavType::GPSLNAV
@ GPSLNAV
gnsstk::TrackingCode::Standard
@ Standard
Legacy Glonass civil signal.
gnsstk::ObservationType::NavMsg
@ NavMsg
Navigation Message data.
gnsstk::SatelliteSystem::GPS
@ GPS
gnsstk::NavType::Any
@ Any
Used to match any nav code.
gnsstk::NavSignalID::obs
ObsID obs
Carrier, tracking code, etc.
Definition: NavSignalID.hpp:95
gnsstk::NavSignalID::system
SatelliteSystem system
GNSS for this signal.
Definition: NavSignalID.hpp:94
TestUtil.hpp
NavSignalID_T::constructorTest
unsigned constructorTest()
Definition: NavSignalID_T.cpp:100
TURETURN
#define TURETURN()
Definition: TestUtil.hpp:232
gnsstk::ObsID::setMcodeBits
void setMcodeBits(uint32_t newval, uint32_t newmask=-1)
Set the value of mcode while simultaneously setting the mask.
Definition: ObsID.hpp:170
gnsstk::SatelliteSystem::Unknown
@ Unknown
TUPASS
#define TUPASS(MSG)
Definition: TestUtil.hpp:230
gnsstk::ObsID
Definition: ObsID.hpp:82
gnsstk::operator<<
std::ostream & operator<<(std::ostream &s, const ObsEpoch &oe) noexcept
Definition: ObsEpochMap.cpp:54
TestClass::order
int order(const TestClass &right) const
Definition: NavSignalID_T.cpp:83
TestClass::TestClass
TestClass(gnsstk::SatelliteSystem sys, gnsstk::CarrierBand car, gnsstk::TrackingCode track, gnsstk::NavType nmt)
Definition: NavSignalID_T.cpp:75
gnsstk::ObsID::code
TrackingCode code
Definition: ObsID.hpp:201
gnsstk::CarrierBand::L1
@ L1
GPS L1, Galileo E1, SBAS L1, QZSS L1, BeiDou L1.
TUDEF
#define TUDEF(CLASS, METHOD)
Definition: TestUtil.hpp:56
gnsstk::NavSignalID
Class used to identify navigation data signal types.
Definition: NavSignalID.hpp:54
gnsstk::EnumIterator
Definition: EnumIterator.hpp:68
gnsstk::TrackingCode
TrackingCode
Definition: TrackingCode.hpp:64
TestClass
Make GroupPathCorrector instantiatable for testing.
Definition: GroupPathCorrector_T.cpp:56
main
int main()
Definition: NavSignalID_T.cpp:223
gnsstk::SatelliteSystem::Glonass
@ Glonass
NavSignalID_T::orderTestFast
unsigned orderTestFast()
Definition: NavSignalID_T.cpp:189
gnsstk::NavType
NavType
Supported navigation types.
Definition: NavType.hpp:58
NavSignalID_T
Definition: NavSignalID_T.cpp:90
NavSignalID.hpp
gnsstk::TrackingCode::Any
@ Any
Used to match any tracking code.
gnsstk::TrackingCode::Unknown
@ Unknown
Uninitialized value.


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