BrcClockCorrection_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 "BrcClockCorrection.hpp"
40 #include "TestUtil.hpp"
41 #include "GPSWeekZcount.hpp"
42 
43 using namespace std;
44 using namespace gnsstk;
45 
46 #ifdef _MSC_VER
47 #define LDEXP(x,y) ldexp(x,y)
48 #else
49 #define LDEXP(x,y) std::ldexp(x,y)
50 #endif
51 
53 {
54 public:
56  void fill(BrcClockCorrection& orbit);
57  void fill2(BrcClockCorrection& orbit);
58  unsigned initializationTest();
59  unsigned equalityTest();
60  unsigned svClockBiasTest();
61 };
62 
63 
66 {
67  ObsID oi(ObservationType::NavMsg, CarrierBand::L5, TrackingCode::Y);
68  orbit.loadData("GPS", oi, 31, GPSWeekZcount(1886, 398400),
69  GPSWeekZcount(1887, 0), 5, 7, 9, true,
70  LDEXP(double( int32_t(0xfffff91d)), -31), // af0
71  LDEXP(double( int16_t(0xffed)), -43), // af1
72  1.0e-15 // af2
73  );
74 }
75 
76 
79 {
80  // By rules of Clock Correction, this must be week of Toc
81  short weeknum = 1638;
82  short uraoc = 5;
83  short uraoc1 = 7;
84  short uraoc2 = 7;
85  double toc = 388800.0;
86  double top = 302400.0;
87  double af0 = 7.23189674E-04;
88  double af1 = 5.11590770E-12;
89  double af2 = 0.00000000E+00;
90  CommonTime tocCT = GPSWeekSecond(weeknum, toc, TimeSystem::GPS);
91  CommonTime topCT = GPSWeekSecond(weeknum, top, TimeSystem::GPS);
92  ObsID oi(ObservationType::NavMsg, CarrierBand::L5, TrackingCode::Y);
93  orbit.loadData("GPS", oi, 31, tocCT, topCT, uraoc, uraoc1, uraoc2, true,
94  af0, af1, af2);
95 }
96 
97 
100 {
101  BrcClockCorrection empty;
102  CommonTime emptyTime;
103  ObsID emptyObsID;
104  TUDEF("BrcClockCorrection", "Default Constructor");
105  TUASSERTE(bool, false, empty.dataLoaded);
106  TUASSERTE(std::string, "", empty.satSys);
107  TUASSERTE(ObsID, emptyObsID, empty.obsID);
108  TUASSERTE(short, 0, empty.PRNID);
109  TUASSERTE(CommonTime, emptyTime, empty.Toc);
110  TUASSERTE(CommonTime, emptyTime, empty.Top);
111  TUASSERTE(short, -16, empty.URAoc);
112  TUASSERTE(short, 0, empty.URAoc1);
113  TUASSERTE(short, 0, empty.URAoc2);
114  TUASSERTE(bool, false, empty.healthy);
115  TUASSERTE(double, 0, empty.af0);
116  TUASSERTE(double, 0, empty.af1);
117  TUASSERTE(double, 0, empty.af2);
118  TURETURN();
119 }
120 
121 
124 {
125  TUDEF("BrcClockCorrection", "operator== / !=");
126  BrcClockCorrection clock;
127  fill(clock);
128  BrcClockCorrection clockCopy(clock);
129  // make sure our copy reports as being the same
130  TUASSERTE(BrcClockCorrection, clock, clockCopy);
131  // Tweak each data member one by one and compare.
132  // Yes the comments are fairly redundant but it helps to
133  // visually separate each batch of statements per data
134  // member.
135  clockCopy.dataLoaded = false;
136  TUASSERT(clockCopy != clock);
137  TUASSERT(!(clockCopy == clock));
138  // satSys
139  TUCATCH(clockCopy = clock);
140  TUASSERTE(BrcClockCorrection, clock, clockCopy);
141  clockCopy.satSys = "twaffle";
142  TUASSERT(clockCopy != clock);
143  TUASSERT(!(clockCopy == clock));
144  // obsID
145  TUCATCH(clockCopy = clock);
146  TUASSERTE(BrcClockCorrection, clock, clockCopy);
147  clockCopy.obsID = ObsID(ObservationType::NavMsg, CarrierBand::L1, TrackingCode::P);
148  TUASSERT(clockCopy != clock);
149  TUASSERT(!(clockCopy == clock));
150  // PRNID
151  TUCATCH(clockCopy = clock);
152  TUASSERTE(BrcClockCorrection, clock, clockCopy);
153  clockCopy.PRNID = 93;
154  TUASSERT(clockCopy != clock);
155  TUASSERT(!(clockCopy == clock));
156  // Toc
157  TUCATCH(clockCopy = clock);
158  TUASSERTE(BrcClockCorrection, clock, clockCopy);
159  clockCopy.Toc = GPSWeekZcount(1234,56789);
160  TUASSERT(clockCopy != clock);
161  TUASSERT(!(clockCopy == clock));
162  // Top
163  TUCATCH(clockCopy = clock);
164  TUASSERTE(BrcClockCorrection, clock, clockCopy);
165  clockCopy.Top = GPSWeekZcount(1234,56789);
166  TUASSERT(clockCopy != clock);
167  TUASSERT(!(clockCopy == clock));
168  // URAoc
169  TUCATCH(clockCopy = clock);
170  TUASSERTE(BrcClockCorrection, clock, clockCopy);
171  clockCopy.URAoc = 943;
172  TUASSERT(clockCopy != clock);
173  TUASSERT(!(clockCopy == clock));
174  // URAoc1
175  TUCATCH(clockCopy = clock);
176  TUASSERTE(BrcClockCorrection, clock, clockCopy);
177  clockCopy.URAoc1 = 943;
178  TUASSERT(clockCopy != clock);
179  TUASSERT(!(clockCopy == clock));
180  // URAoc2
181  TUCATCH(clockCopy = clock);
182  TUASSERTE(BrcClockCorrection, clock, clockCopy);
183  clockCopy.URAoc2 = 943;
184  TUASSERT(clockCopy != clock);
185  TUASSERT(!(clockCopy == clock));
186  // healthy
187  TUCATCH(clockCopy = clock);
188  TUASSERTE(BrcClockCorrection, clock, clockCopy);
189  clockCopy.healthy = false;
190  TUASSERT(clockCopy != clock);
191  TUASSERT(!(clockCopy == clock));
192  // af0
193  TUCATCH(clockCopy = clock);
194  TUASSERTE(BrcClockCorrection, clock, clockCopy);
195  clockCopy.af0 = 1.5e-12;
196  TUASSERT(clockCopy != clock);
197  TUASSERT(!(clockCopy == clock));
198  // af1
199  TUCATCH(clockCopy = clock);
200  TUASSERTE(BrcClockCorrection, clock, clockCopy);
201  clockCopy.af1 = 1.5e-12;
202  TUASSERT(clockCopy != clock);
203  TUASSERT(!(clockCopy == clock));
204  // af2
205  TUCATCH(clockCopy = clock);
206  TUASSERTE(BrcClockCorrection, clock, clockCopy);
207  clockCopy.af2 = 1.5e-12;
208  TUASSERT(clockCopy != clock);
209  TUASSERT(!(clockCopy == clock));
210  TURETURN();
211 }
212 
213 
216 {
217  TUDEF("BrcClockCorrection", "svClockBias");
218  BrcClockCorrection co1;
219  CommonTime t = CivilTime(2011, 6, 2, 12, 14, 44.0, TimeSystem::GPS);
220  fill2(co1);
221  cout << setprecision(20)
222  << co1.svClockDrift(t)
223  << endl;
224  TUASSERTFE(7.2319419646240680997e-4, co1.svClockBias(t));
225  TUCSM("svClockBiasM");
226  TUASSERTFE(216808.16576879983768, co1.svClockBiasM(t));
227  TUCSM("svClockDrift");
228  TUASSERTFE(5.1159076999999996399e-12, co1.svClockDrift(t));
229  TURETURN();
230 }
231 
232 
233 int main() //Main function to initialize and run all tests above
234 {
235  using namespace std;
236  BrcClockCorrection_T testClass;
237  unsigned errorTotal = 0;
238 
239  errorTotal += testClass.initializationTest();
240  errorTotal += testClass.equalityTest();
241  errorTotal += testClass.svClockBiasTest();
242 
243  cout << "Total Failures for " << __FILE__ << ": " << errorTotal << endl;
244 
245  return errorTotal; // Return the total number of errors
246 }
GPSWeekZcount.hpp
TUCSM
#define TUCSM(METHOD)
Definition: TestUtil.hpp:59
gnsstk::BrcClockCorrection::dataLoaded
bool dataLoaded
Definition: BrcClockCorrection.hpp:216
TUCATCH
#define TUCATCH(STATEMENT)
Definition: TestUtil.hpp:193
L1
gnsstk::Matrix< double > L1
Definition: Matrix_LUDecomp_T.cpp:46
gnsstk::BrcClockCorrection::svClockDrift
double svClockDrift(const CommonTime &t) const
Definition: BrcClockCorrection.cpp:241
gnsstk::BrcClockCorrection::af0
double af0
Definition: BrcClockCorrection.hpp:231
TUASSERTE
#define TUASSERTE(TYPE, EXP, GOT)
Definition: TestUtil.hpp:81
LDEXP
#define LDEXP(x, y)
Definition: BrcClockCorrection_T.cpp:49
gnsstk::BrcClockCorrection::svClockBias
double svClockBias(const CommonTime &t) const
Definition: BrcClockCorrection.cpp:226
gnsstk::BrcClockCorrection::Top
CommonTime Top
Definition: BrcClockCorrection.hpp:221
BrcClockCorrection_T::equalityTest
unsigned equalityTest()
Definition: BrcClockCorrection_T.cpp:123
gnsstk::BrcClockCorrection::URAoc1
short URAoc1
Definition: BrcClockCorrection.hpp:223
gnsstk::BrcClockCorrection::Toc
CommonTime Toc
Definition: BrcClockCorrection.hpp:220
gnsstk::BrcClockCorrection::obsID
ObsID obsID
Definition: BrcClockCorrection.hpp:218
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
BrcClockCorrection_T::fill2
void fill2(BrcClockCorrection &orbit)
Definition: BrcClockCorrection_T.cpp:78
gnsstk::GPSWeekSecond
Definition: GPSWeekSecond.hpp:56
main
int main()
Definition: BrcClockCorrection_T.cpp:233
BrcClockCorrection_T::fill
void fill(BrcClockCorrection &orbit)
set the fields to some non-default values
Definition: BrcClockCorrection_T.cpp:65
BrcClockCorrection_T::svClockBiasTest
unsigned svClockBiasTest()
Definition: BrcClockCorrection_T.cpp:215
TUASSERT
#define TUASSERT(EXPR)
Definition: TestUtil.hpp:63
TestUtil.hpp
TURETURN
#define TURETURN()
Definition: TestUtil.hpp:232
gnsstk::BrcClockCorrection::PRNID
short PRNID
Definition: BrcClockCorrection.hpp:219
gnsstk::ObsID
Definition: ObsID.hpp:82
gnsstk::CommonTime
Definition: CommonTime.hpp:84
BrcClockCorrection_T::initializationTest
unsigned initializationTest()
Definition: BrcClockCorrection_T.cpp:99
gnsstk::BrcClockCorrection::healthy
bool healthy
Definition: BrcClockCorrection.hpp:225
gnsstk::BrcClockCorrection::loadData
void loadData(const std::string satSysArg, const ObsID obsIDArg, const short PRNIDArg, const CommonTime TocArg, const CommonTime TopArg, const short URAocArg, const short URAoc1Arg, const short URAoc2Arg, const bool healthyArg, const double af0Arg, const double af1Arg, const double af2Arg)
Definition: BrcClockCorrection.cpp:135
TUDEF
#define TUDEF(CLASS, METHOD)
Definition: TestUtil.hpp:56
gnsstk::GPSWeekZcount
Definition: GPSWeekZcount.hpp:55
gnsstk::BrcClockCorrection::af2
double af2
Definition: BrcClockCorrection.hpp:233
gnsstk::CivilTime
Definition: CivilTime.hpp:55
gnsstk::BrcClockCorrection::satSys
std::string satSys
Definition: BrcClockCorrection.hpp:217
std
Definition: Angle.hpp:142
gnsstk::BrcClockCorrection::URAoc2
short URAoc2
Definition: BrcClockCorrection.hpp:224
gnsstk::BrcClockCorrection::svClockBiasM
double svClockBiasM(const CommonTime &t) const
Definition: BrcClockCorrection.cpp:234
gnsstk::BrcClockCorrection
Definition: BrcClockCorrection.hpp:76
TUASSERTFE
#define TUASSERTFE(EXP, GOT)
Definition: TestUtil.hpp:103
gnsstk::BrcClockCorrection::URAoc
short URAoc
Definition: BrcClockCorrection.hpp:222
BrcClockCorrection.hpp
BrcClockCorrection_T
Definition: BrcClockCorrection_T.cpp:52
gnsstk::BrcClockCorrection::af1
double af1
Definition: BrcClockCorrection.hpp:232


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