PNBGalFNavDataFactory_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 "FactoryCounter.hpp"
41 #include "TestUtil.hpp"
42 #include "GalFNavTimeOffset.hpp"
43 #include "GalFNavHealth.hpp"
44 #include "GalFNavEph.hpp"
45 #include "GalFNavAlm.hpp"
46 #include "GalFNavIono.hpp"
47 #include "GalFNavISC.hpp"
48 #include "GALWeekSecond.hpp"
49 #include "TimeString.hpp"
50 
51 using namespace std;
52 
53 // avoid having to type out template params over and over.
55 
56 namespace gnsstk
57 {
58  std::ostream& operator<<(std::ostream& s, SVHealth h)
59  {
60  s << StringUtils::asString(h);
61  return s;
62  }
63  std::ostream& operator<<(std::ostream& s, GalHealthStatus e)
64  {
65  s << StringUtils::asString(e);
66  return s;
67  }
68  std::ostream& operator<<(std::ostream& s, GalDataValid e)
69  {
70  s << StringUtils::asString(e);
71  return s;
72  }
73 }
74 
75 
77 {
78 public:
80 
81  unsigned addDataAllTest();
83  unsigned addDataEphemerisTest();
85  unsigned addDataAlmanacTest();
87  unsigned addDataHealthTest();
89  unsigned addDataTimeTest();
91  unsigned addDataEphHealthTest();
93  unsigned addDataAlmHealthTest();
95  unsigned processEphTest();
97  unsigned processAlmTest();
98  // week rollover test for decoding ephemerides
99  unsigned processEphWRTest();
100 
101 #include "GalFNavTestDataDecl.hpp"
102 };
103 
106 {
107 #include "GalFNavTestDataDef.hpp"
108 }
109 
110 
113 {
114  TUDEF("PNBGalFNavDataFactory", "addData");
115  GalFactoryCounter fc(testFramework);
121  gnsstk::PackedNavBitsPtr nonGal =
122  std::make_shared<gnsstk::PackedNavBits>(gloSid,gloid,gloNav,"XX",
124  gnsstk::NavDataPtrList navOut;
125  // should refuse non-Galileo data
126  TUASSERTE(bool, false, uut.addData(nonGal, navOut));
127  fc.validateResults(navOut, __LINE__);
128  // The rest is checking that we're processing the good data
129  // appropriately, but I'm not bothering to check the detailed
130  // contents as that is assumed to be tested in the process*
131  // tests.
132  // Add nav pages in time order
133  TUASSERTE(bool, true, uut.addData(navFNAVGalPT1, navOut));
134  fc.validateResults(navOut, __LINE__, 3, 0, 0, 0, 1, 1, 1);
135  TUASSERTE(bool, true, uut.addData(navFNAVGalPT2, navOut));
136  fc.validateResults(navOut, __LINE__);
137  TUASSERTE(bool, true, uut.addData(navFNAVGalPT3, navOut));
138  fc.validateResults(navOut, __LINE__);
139  TUASSERTE(bool, true, uut.addData(navFNAVGalPT4, navOut));
140  fc.validateResults(navOut, __LINE__, 3, 0, 1, 2);
141  TUASSERTE(bool, true, uut.addData(navFNAVGalPT5, navOut));
142  fc.validateResults(navOut, __LINE__);
143  TUASSERTE(bool, true, uut.addData(navFNAVGalPT6, navOut));
144  fc.validateResults(navOut, __LINE__, 6, 3, 0, 0, 3);
145  TURETURN();
146 }
147 
148 
151 {
152  TUDEF("PNBGalFNavDataFactory", "addData");
153  GalFactoryCounter fc(testFramework);
155  gnsstk::NavDataPtrList navOut;
156  TUCATCH(uut.setTypeFilter({gnsstk::NavMessageType::Ephemeris}));
157  // Add nav pages in time order
158  TUASSERTE(bool, true, uut.addData(navFNAVGalPT1, navOut));
159  fc.validateResults(navOut, __LINE__);
160  TUASSERTE(bool, true, uut.addData(navFNAVGalPT2, navOut));
161  fc.validateResults(navOut, __LINE__);
162  TUASSERTE(bool, true, uut.addData(navFNAVGalPT3, navOut));
163  fc.validateResults(navOut, __LINE__);
164  TUASSERTE(bool, true, uut.addData(navFNAVGalPT4, navOut));
165  fc.validateResults(navOut, __LINE__, 1, 0, 1);
166  TUASSERTE(bool, true, uut.addData(navFNAVGalPT5, navOut));
167  fc.validateResults(navOut, __LINE__);
168  TUASSERTE(bool, true, uut.addData(navFNAVGalPT6, navOut));
169  fc.validateResults(navOut, __LINE__);
170  TURETURN();
171 }
172 
173 
176 {
177  TUDEF("PNBGalFNavDataFactory", "addData");
178  GalFactoryCounter fc(testFramework);
180  gnsstk::NavDataPtrList navOut;
181  TUCATCH(uut.setTypeFilter({gnsstk::NavMessageType::Almanac}));
182  // Add nav pages in time order
183  TUASSERTE(bool, true, uut.addData(navFNAVGalPT1, navOut));
184  fc.validateResults(navOut, __LINE__);
185  TUASSERTE(bool, true, uut.addData(navFNAVGalPT2, navOut));
186  fc.validateResults(navOut, __LINE__);
187  TUASSERTE(bool, true, uut.addData(navFNAVGalPT3, navOut));
188  fc.validateResults(navOut, __LINE__);
189  TUASSERTE(bool, true, uut.addData(navFNAVGalPT4, navOut));
190  fc.validateResults(navOut, __LINE__);
191  TUASSERTE(bool, true, uut.addData(navFNAVGalPT5, navOut));
192  fc.validateResults(navOut, __LINE__);
193  TUASSERTE(bool, true, uut.addData(navFNAVGalPT6, navOut));
194  fc.validateResults(navOut, __LINE__, 3, 3);
195  TURETURN();
196 }
197 
198 
201 {
202  TUDEF("PNBGalFNavDataFactory", "addData");
203  GalFactoryCounter fc(testFramework);
205  gnsstk::NavDataPtrList navOut;
206  TUCATCH(uut.setTypeFilter({gnsstk::NavMessageType::Health}));
207  // Add nav pages in time order
208  TUASSERTE(bool, true, uut.addData(navFNAVGalPT1, navOut));
209  fc.validateResults(navOut, __LINE__, 1, 0, 0, 0, 1);
210  TUASSERTE(bool, true, uut.addData(navFNAVGalPT2, navOut));
211  fc.validateResults(navOut, __LINE__);
212  TUASSERTE(bool, true, uut.addData(navFNAVGalPT3, navOut));
213  fc.validateResults(navOut, __LINE__);
214  TUASSERTE(bool, true, uut.addData(navFNAVGalPT4, navOut));
215  fc.validateResults(navOut, __LINE__);
216  TUASSERTE(bool, true, uut.addData(navFNAVGalPT5, navOut));
217  fc.validateResults(navOut, __LINE__);
218  TUASSERTE(bool, true, uut.addData(navFNAVGalPT6, navOut));
219  fc.validateResults(navOut, __LINE__, 3, 0, 0, 0, 3);
220  TURETURN();
221 }
222 
223 
226 {
227  TUDEF("PNBGalFNavDataFactory", "addData");
228  GalFactoryCounter fc(testFramework);
230  gnsstk::NavDataPtrList navOut;
231  TUCATCH(uut.setTypeFilter({gnsstk::NavMessageType::TimeOffset}));
232  // Add nav pages in time order
233  TUASSERTE(bool, true, uut.addData(navFNAVGalPT1, navOut));
234  fc.validateResults(navOut, __LINE__);
235  TUASSERTE(bool, true, uut.addData(navFNAVGalPT2, navOut));
236  fc.validateResults(navOut, __LINE__);
237  TUASSERTE(bool, true, uut.addData(navFNAVGalPT3, navOut));
238  fc.validateResults(navOut, __LINE__);
239  TUASSERTE(bool, true, uut.addData(navFNAVGalPT4, navOut));
240  fc.validateResults(navOut, __LINE__, 2, 0, 0, 2);
241  TUASSERTE(bool, true, uut.addData(navFNAVGalPT5, navOut));
242  fc.validateResults(navOut, __LINE__);
243  TUASSERTE(bool, true, uut.addData(navFNAVGalPT6, navOut));
244  fc.validateResults(navOut, __LINE__);
245  TURETURN();
246 }
247 
248 
251 {
252  TUDEF("PNBGalFNavDataFactory", "addData");
253  GalFactoryCounter fc(testFramework);
255  gnsstk::NavDataPtrList navOut;
256  TUCATCH(uut.setTypeFilter({gnsstk::NavMessageType::Health,
257  gnsstk::NavMessageType::Ephemeris}));
258  // Add nav pages in time order
259  TUASSERTE(bool, true, uut.addData(navFNAVGalPT1, navOut));
260  fc.validateResults(navOut, __LINE__, 1, 0, 0, 0, 1);
261  TUASSERTE(bool, true, uut.addData(navFNAVGalPT2, navOut));
262  fc.validateResults(navOut, __LINE__);
263  TUASSERTE(bool, true, uut.addData(navFNAVGalPT3, navOut));
264  fc.validateResults(navOut, __LINE__);
265  TUASSERTE(bool, true, uut.addData(navFNAVGalPT4, navOut));
266  fc.validateResults(navOut, __LINE__, 1, 0, 1);
267  TUASSERTE(bool, true, uut.addData(navFNAVGalPT5, navOut));
268  fc.validateResults(navOut, __LINE__);
269  TUASSERTE(bool, true, uut.addData(navFNAVGalPT6, navOut));
270  fc.validateResults(navOut, __LINE__, 3, 0, 0, 0, 3);
271  TURETURN();
272 }
273 
274 
277 {
278  TUDEF("PNBGalFNavDataFactory", "addData");
279  GalFactoryCounter fc(testFramework);
281  gnsstk::NavDataPtrList navOut;
282  TUCATCH(uut.setTypeFilter({gnsstk::NavMessageType::Health,
283  gnsstk::NavMessageType::Almanac}));
284  // Add nav pages in time order
285  TUASSERTE(bool, true, uut.addData(navFNAVGalPT1, navOut));
286  fc.validateResults(navOut, __LINE__, 1, 0, 0, 0, 1);
287  TUASSERTE(bool, true, uut.addData(navFNAVGalPT2, navOut));
288  fc.validateResults(navOut, __LINE__);
289  TUASSERTE(bool, true, uut.addData(navFNAVGalPT3, navOut));
290  fc.validateResults(navOut, __LINE__);
291  TUASSERTE(bool, true, uut.addData(navFNAVGalPT4, navOut));
292  fc.validateResults(navOut, __LINE__);
293  TUASSERTE(bool, true, uut.addData(navFNAVGalPT5, navOut));
294  fc.validateResults(navOut, __LINE__);
295  TUASSERTE(bool, true, uut.addData(navFNAVGalPT6, navOut));
296  fc.validateResults(navOut, __LINE__, 6, 3, 0, 0, 3);
297  TURETURN();
298 }
299 
300 
303 {
304  TUDEF("PNBGalFNavDataFactory", "processEph");
305  GalFactoryCounter fc(testFramework);
307  gnsstk::NavMessageID nmidExpE5a(
313  gnsstk::CommonTime toeExp = gnsstk::GALWeekSecond(1014,517200.0);
314  gnsstk::CommonTime tocExp = gnsstk::GALWeekSecond(1014,517200.0);
316  gnsstk::CommonTime endExp = toeExp + (4.0 * 3600.0);
317  gnsstk::NavDataPtrList navOut;
318  gnsstk::GalFNavEph *eph;
321  gnsstk::GalFNavIono *iono;
322  gnsstk::GalFNavISC *isc;
323  TUASSERTE(bool, true, uut.processEph(1, navFNAVGalPT1, navOut));
324  for (const auto& i : navOut)
325  {
326  if ((hea = dynamic_cast<gnsstk::GalFNavHealth*>(i.get())) != nullptr)
327  {
328  // NavData fields
331  TUASSERTE(gnsstk::NavMessageID, nmidExpE5a, hea->signal);
332  // NavHealthData has no fields
333  // GalFNavHealth
335  hea->sigHealthStatus);
337  hea->dataValidityStatus);
338  TUASSERTE(unsigned, 107, hea->sisaIndex);
339  }
340  else if ((iono = dynamic_cast<gnsstk::GalFNavIono*>(i.get())) != nullptr)
341  {
343  // NavData fields
345  TUASSERTE(gnsstk::NavMessageID, nmidExpE5a, iono->signal);
346  // NeQuickIonoNavData fields
347  // values confirmed by hand.
348  TUASSERTFE(45.75, iono->ai[0]);
349  TUASSERTFE(0.1640625, iono->ai[1]);
350  TUASSERTFE(0.00067138671875, iono->ai[2]);
351  TUASSERTE(bool, false, iono->idf[0]);
352  TUASSERTE(bool, false, iono->idf[1]);
353  TUASSERTE(bool, false, iono->idf[2]);
354  TUASSERTE(bool, false, iono->idf[3]);
355  TUASSERTE(bool, false, iono->idf[4]);
356  }
357  else if ((isc = dynamic_cast<gnsstk::GalFNavISC*>(i.get())) != nullptr)
358  {
360  // NavData fields
362  TUASSERTE(gnsstk::NavMessageID, nmidExpE5a, isc->signal);
363  TUASSERTFE(-4.656613e-09, isc->isc);
364  }
365  }
366  fc.validateResults(navOut, __LINE__, 3, 0, 0, 0, 1, 1, 1);
367  TUASSERTE(bool, true, uut.processEph(2, navFNAVGalPT2, navOut));
368  fc.validateResults(navOut, __LINE__);
369  TUASSERTE(bool, true, uut.processEph(3, navFNAVGalPT3, navOut));
370  fc.validateResults(navOut, __LINE__);
371  TUASSERTE(bool, true, uut.processEph(4, navFNAVGalPT4, navOut));
372  for (const auto& i : navOut)
373  {
374  if ((eph = dynamic_cast<gnsstk::GalFNavEph*>(i.get())) != nullptr)
375  {
377  // NavData fields
379  TUASSERTE(gnsstk::NavMessageID, nmidExpE5a, eph->signal);
380  // OrbitData has no fields
381  // OrbitDataKepler fields
383  TUASSERTE(gnsstk::CommonTime, toeExp, eph->Toe);
384  TUASSERTE(gnsstk::CommonTime, tocExp, eph->Toc);
386  TUASSERTFE(4.610046744347E-06, eph->Cuc);
387  TUASSERTFE(1.211278140545E-05, eph->Cus);
388  TUASSERTFE(9.634375000000E+01, eph->Crc);
389  TUASSERTFE(9.828125000000E+01, eph->Crs);
390  TUASSERTFE(-3.725290298462E-09, eph->Cis);
391  TUASSERTFE(-1.490116119385E-08, eph->Cic);
392  TUASSERTFE(-3.0165642165792534435E+00, eph->M0);
393  TUASSERTFE(2.529748231311E-09, eph->dn);
394  TUASSERTFE(0, eph->dndot);
395  TUASSERTFE(1.100952504203E-04, eph->ecc);
396  TUASSERTFE(5.4406226139068603516E+03, eph->Ahalf);
397  TUASSERTFE(2.9600374426954716444E+07, eph->A);
398  TUASSERTFE(0, eph->Adot);
399  TUASSERTFE(2.9631768162768818975E+00, eph->OMEGA0);
400  TUASSERTFE(9.8982515960810546485E-01, eph->i0);
401  TUASSERTFE(1.4027684908239376749E-01, eph->w);
402  TUASSERTFE(-5.110570018612E-09, eph->OMEGAdot);
403  TUASSERTFE(-1.832219176426E-10, eph->idot);
404  TUASSERTFE(-5.3351762471720576286E-04, eph->af0);
405  TUASSERTFE(-8.0859763329499401152E-12, eph->af1);
406  TUASSERTFE(0, eph->af2);
407  TUASSERTE(gnsstk::CommonTime, beginExp, eph->beginFit);
408  TUASSERTE(gnsstk::CommonTime, endExp, eph->endFit);
409  // GalFNavEph
410  TUASSERTFE(-4.656613E-09, eph->bgdE5aE1);
411  TUASSERTE(unsigned, 107, eph->sisaIndex);
412  TUASSERTE(unsigned, 1, eph->svid);
416  TUASSERTE(uint16_t, 94, eph->iodnav1);
417  TUASSERTE(uint16_t, 94, eph->iodnav2);
418  TUASSERTE(uint16_t, 94, eph->iodnav3);
419  TUASSERTE(uint16_t, 94, eph->iodnav4);
421  eph->hsE5a);
423  eph->dvsE5a);
424  }
425  }
426  fc.validateResults(navOut, __LINE__, 3, 0, 1, 2);
427  TURETURN();
428 }
429 
430 
433 {
434  TUDEF("PNBGalFNavDataFactory", "processAlm");
435  GalFactoryCounter fc(testFramework);
437  gnsstk::NavMessageID nmidExpE5a(
442  gnsstk::CommonTime toaExp = gnsstk::GALWeekSecond(1014,517200.0);
444  gnsstk::CommonTime endExp = toaExp + (74.0 * 3600.0);
445  gnsstk::CommonTime expRefTime = gnsstk::GALWeekSecond(1014,518400);
446  gnsstk::NavDataPtrList navOut;
447  gnsstk::GalFNavAlm *alm;
450  TUASSERTE(bool, true, uut.processAlm(5, navFNAVGalPT5, navOut));
451  fc.validateResults(navOut, __LINE__);
452  TUASSERTE(bool, true, uut.processAlm(6, navFNAVGalPT6, navOut));
453  for (const auto& i : navOut)
454  {
455  if ((alm = dynamic_cast<gnsstk::GalFNavAlm*>(i.get())) != nullptr)
456  {
457  gnsstk::NavMessageID nmid(nmidExpE5a);
458  if (alm->signal.sat.id == 1)
459  {
460  nmid.sat.id = 1;
463  TUASSERTFE(-3.016573219377113535E+00, alm->M0);
464  TUASSERTFE(1.068115234375E-04, alm->ecc);
465  TUASSERTFE(29600382.542594015598, alm->A);
466  TUASSERTFE(5440.6233597441769234, alm->Ahalf);
467  TUASSERTFE(2.963171513198844309E+00, alm->OMEGA0);
468  TUASSERTFE(0.98984797501839538736, alm->i0);
469  TUASSERTFE(1.4026336829229332781E-01, alm->w);
470  TUASSERTFE(-5.12021328E-09, alm->OMEGAdot);
471  TUASSERTFE(-5.340576171875E-04, alm->af0);
472  TUASSERTFE(-7.27595761E-12, alm->af1);
474  TUASSERTE(gnsstk::CommonTime, endExp, alm->endFit);
475  // GalFNavAlm
477  TUASSERTFE(3.51562500E-02, alm->dAhalf);
478  TUASSERTFE(1.2463593901570833855E-02, alm->deltai);
479  }
480  else if (alm->signal.sat.id == 2)
481  {
482  nmid.sat.id = 2;
485  TUASSERTFE(1.6010924473556378822E-01, alm->M0);
486  TUASSERTFE(2.899169921875E-04, alm->ecc);
487  // TUASSERTFE(666, alm->A);
488  // TUASSERTFE(666, alm->Ahalf);
489  TUASSERTFE(2.963171513198844309E+00, alm->OMEGA0);
490  // TUASSERTFE(666, alm->i0);
491  TUASSERTFE(1.0344782938303792585E-01, alm->w);
492  TUASSERTFE(-5.12021328E-09, alm->OMEGAdot);
493  TUASSERTFE(4.57763671875E-05, alm->af0);
494  TUASSERTFE(0, alm->af1);
496  TUASSERTE(gnsstk::CommonTime, endExp, alm->endFit);
497  // GalFNavAlm
499  TUASSERTFE(3.90625000E-02, alm->dAhalf);
500  TUASSERTFE(1.2463593901570833855E-02, alm->deltai);
501  }
502  else if (alm->signal.sat.id == 3)
503  {
504  nmid.sat.id = 3;
507  TUASSERTFE(1.8612939385007398752E+00, alm->M0);
508  TUASSERTFE(2.44140625E-04, alm->ecc);
509  // TUASSERTFE(666, alm->A);
510  // TUASSERTFE(666, alm->Ahalf);
511  TUASSERTFE(8.701506019281299853E-01, alm->OMEGA0);
512  // TUASSERTFE(666, alm->i0);
513  TUASSERTFE(4.9537992068781921962E-01, alm->w);
514  TUASSERTFE(-5.85167232E-09, alm->OMEGAdot);
515  TUASSERTFE(-1.2969970703125E-04, alm->af0);
516  TUASSERTFE(-3.63797881E-12, alm->af1);
518  TUASSERTE(gnsstk::CommonTime, endExp, alm->endFit);
519  // GalFNavAlm
521  TUASSERTFE(1.75781250E-02, alm->dAhalf);
522  TUASSERTFE(-2.4735440204655963214E-02, alm->deltai);
523  }
524  else
525  {
526  TUFAIL("Unexpected satellite ID");
527  }
528  // NavData fields
531  // OrbitData has no fields
532  // OrbitDataKepler fields
533  TUASSERTE(gnsstk::CommonTime, toaExp, alm->Toe);
534  TUASSERTE(gnsstk::CommonTime, toaExp, alm->Toc);
536  TUASSERTFE(0, alm->Cuc);
537  TUASSERTFE(0, alm->Cus);
538  TUASSERTFE(0, alm->Crc);
539  TUASSERTFE(0, alm->Crs);
540  TUASSERTFE(0, alm->Cic);
541  TUASSERTFE(0, alm->Cis);
542  TUASSERTFE(0, alm->dn);
543  TUASSERTFE(0, alm->dndot);
544  TUASSERTFE(0, alm->Adot);
545  TUASSERTFE(0, alm->idot);
546  TUASSERTFE(0, alm->af2);
547  TUASSERTE(unsigned, 1014, alm->wna);
548  TUASSERTFE(517200, alm->t0a);
549  TUASSERTE(unsigned, 14, alm->ioda5);
550  TUASSERTE(unsigned, 14, alm->ioda6);
552  alm->hsE5a);
553  }
554  else if ((hea = dynamic_cast<gnsstk::GalFNavHealth*>(i.get())) != nullptr)
555  {
556  gnsstk::NavMessageID nmid(nmidExpE5a);
558  if (hea->signal.sat.id == 1)
559  {
560  nmid.sat.id = 1;
562  }
563  else if (hea->signal.sat.id == 2)
564  {
565  nmid.sat.id = 2;
567  }
568  else if (hea->signal.sat.id == 3)
569  {
570  nmid.sat.id = 3;
572  }
573  else
574  {
575  TUFAIL("Unexpected satellite ID");
576  }
579  hea->sigHealthStatus);
581  hea->dataValidityStatus);
582  TUASSERTE(unsigned, 255, hea->sisaIndex);
583  }
584  }
585  fc.validateResults(navOut, __LINE__, 6, 3, 0, 0, 3);
586  TURETURN();
587 }
588 
589 
591 {
592  TUDEF("PNBGalFNavDataFactory", "processEph");
594  gnsstk::CommonTime toeExp = gnsstk::GALWeekSecond(1195,603600.0);
595  gnsstk::CommonTime tocExp = gnsstk::GALWeekSecond(1195,603600.0);
597  gnsstk::CommonTime endExp = toeExp + (4.0 * 3600.0);
598  gnsstk::NavDataPtrList navOut;
599  gnsstk::GalFNavEph *eph;
600  TUCATCH(uut.setTypeFilter({gnsstk::NavMessageType::Ephemeris}));
601  TUASSERTE(bool, true, uut.addData(navFNAVWRPT1, navOut));
602  TUASSERTE(gnsstk::NavDataPtrList::size_type, 0, navOut.size());
603  TUASSERTE(bool, true, uut.addData(navFNAVWRPT2, navOut));
604  TUASSERTE(gnsstk::NavDataPtrList::size_type, 0, navOut.size());
605  TUASSERTE(bool, true, uut.addData(navFNAVWRPT3, navOut));
606  TUASSERTE(gnsstk::NavDataPtrList::size_type, 0, navOut.size());
607  TUASSERTE(bool, true, uut.addData(navFNAVWRPT4, navOut));
608  TUASSERTE(gnsstk::NavDataPtrList::size_type, 1, navOut.size());
609  if (navOut.size() >= 1)
610  {
611  if ((eph = dynamic_cast<gnsstk::GalFNavEph*>(navOut.begin()->get()))
612  != nullptr)
613  {
616  TUASSERTE(gnsstk::CommonTime, toeExp, eph->Toe);
617  TUASSERTE(gnsstk::CommonTime, tocExp, eph->Toc);
618  TUASSERTE(gnsstk::CommonTime, beginExp, eph->beginFit);
619  TUASSERTE(gnsstk::CommonTime, endExp, eph->endFit);
623  }
624  }
625  TURETURN();
626 }
627 
628 
629 
630 int main()
631 {
632  PNBGalFNavDataFactory_T testClass;
633  unsigned errorTotal = 0;
634 
635  errorTotal += testClass.addDataAllTest();
636  errorTotal += testClass.addDataAlmanacTest();
637  errorTotal += testClass.addDataEphemerisTest();
638  errorTotal += testClass.addDataHealthTest();
639  errorTotal += testClass.addDataTimeTest();
640  errorTotal += testClass.addDataEphHealthTest();
641  errorTotal += testClass.addDataAlmHealthTest();
642  errorTotal += testClass.processEphTest();
643  errorTotal += testClass.processAlmTest();
644  errorTotal += testClass.processEphWRTest();
645 
646  std::cout << "Total Failures for " << __FILE__ << ": " << errorTotal
647  << std::endl;
648 
649  return errorTotal;
650 }
navFNAVWRPT1
gnsstk::PackedNavBitsPtr navFNAVWRPT1
Definition: GalFNavTestDataDecl.hpp:62
gnsstk::NavMessageType::ISC
@ ISC
Inter-signal corrections.
PNBGalFNavDataFactory_T
Definition: PNBGalFNavDataFactory_T.cpp:76
navFNAVGalPT5ct
gnsstk::CommonTime navFNAVGalPT5ct
Definition: GalFNavTestDataDecl.hpp:53
gnsstk::OrbitDataKepler::idot
double idot
Rate of inclination angle (rad/sec)
Definition: OrbitDataKepler.hpp:193
gnsstk::GalFNavEph::iodnav2
uint16_t iodnav2
IODnav for page type 2.
Definition: GalFNavEph.hpp:92
gnsstk::NavMessageID
Class used to identify/categorize navigation message data.
Definition: NavMessageID.hpp:52
gnsstk::GalDataValid::Valid
@ Valid
Navigation data valid.
gnsstk::GalDataValid
GalDataValid
Identify Galileo Data Validity Status (DVS) states.
Definition: GalDataValid.hpp:51
gnsstk::SatID::id
int id
Satellite identifier, e.g. PRN.
Definition: SatID.hpp:154
gnsstk::PackedNavBitsPtr
std::shared_ptr< PackedNavBits > PackedNavBitsPtr
Managed pointer for passing PackedNavBits around.
Definition: PackedNavBits.hpp:66
gnsstk::GalFNavAlm
Class containing data elements unique to Galileo F/NAV almanacs.
Definition: GalFNavAlm.hpp:52
navFNAVWRPT2
gnsstk::PackedNavBitsPtr navFNAVWRPT2
Definition: GalFNavTestDataDecl.hpp:62
gnsstk::CarrierBand::G1
@ G1
GLONASS G1.
TUCATCH
#define TUCATCH(STATEMENT)
Definition: TestUtil.hpp:193
gnsstk::GalFNavAlm::hsE5a
GalHealthStatus hsE5a
Health status for E5a.
Definition: GalFNavAlm.hpp:113
gnsstk::OrbitDataKepler::Cis
double Cis
Sine inclination (rad)
Definition: OrbitDataKepler.hpp:180
gnsstk::OrbitDataKepler::A
double A
Semi-major axis (m)
Definition: OrbitDataKepler.hpp:186
navFNAVWRPT2ct
gnsstk::CommonTime navFNAVWRPT2ct
Definition: GalFNavTestDataDecl.hpp:60
gnsstk::GalFNavEph::bgdE5aE1
double bgdE5aE1
Group delay in seconds between E5a and E1.
Definition: GalFNavEph.hpp:85
gnsstk::PNBNavDataFactory::setTypeFilter
virtual void setTypeFilter(const NavMessageTypeSet &nmts)
Definition: PNBNavDataFactory.cpp:54
gnsstk::OrbitDataKepler::af2
double af2
SV clock drift rate (sec/sec**2)
Definition: OrbitDataKepler.hpp:197
gnsstk::GalFNavHealth::sigHealthStatus
GalHealthStatus sigHealthStatus
Signal health status (SHS)
Definition: GalFNavHealth.hpp:81
navFNAVWRPT3ct
gnsstk::CommonTime navFNAVWRPT3ct
Definition: GalFNavTestDataDecl.hpp:60
gnsstk::GalFNavEph::dvsE5a
GalDataValid dvsE5a
Data validity status for E5a.
Definition: GalFNavEph.hpp:96
gnsstk::GalFNavHealth
Definition: GalFNavHealth.hpp:53
gnsstk::OrbitDataKepler::ecc
double ecc
Eccentricity.
Definition: OrbitDataKepler.hpp:185
TUASSERTE
#define TUASSERTE(TYPE, EXP, GOT)
Definition: TestUtil.hpp:81
gnsstk::PNBGalFNavDataFactory
Definition: PNBGalFNavDataFactory.hpp:62
gnsstk::NavMessageID::messageType
NavMessageType messageType
Definition: NavMessageID.hpp:97
TUFAIL
#define TUFAIL(MSG)
Definition: TestUtil.hpp:228
gnsstk::NavSatelliteID
Definition: NavSatelliteID.hpp:57
PNBGalFNavDataFactory_T::addDataAllTest
unsigned addDataAllTest()
Definition: PNBGalFNavDataFactory_T.cpp:112
PNBGalFNavDataFactory_T::addDataAlmHealthTest
unsigned addDataAlmHealthTest()
Another combo test that makes sure alm health is processed correctly.
Definition: PNBGalFNavDataFactory_T.cpp:276
gnsstk::OrbitDataKepler::OMEGAdot
double OMEGAdot
Rate of Rt ascension (rad/sec)
Definition: OrbitDataKepler.hpp:192
gnsstk::PNBGalFNavDataFactory::processAlm
bool processAlm(unsigned pageType, const PackedNavBitsPtr &navIn, NavDataPtrList &navOut)
Definition: PNBGalFNavDataFactory.cpp:366
gnsstk::GalFNavAlm::ioda6
uint8_t ioda6
IODa for page type 6.
Definition: GalFNavAlm.hpp:112
gnsstk::SatID
Definition: SatID.hpp:89
gnsstk::NavMessageType::Health
@ Health
SV health status information message.
GalFNavHealth.hpp
gnsstk::NavFit::endFit
CommonTime endFit
Time at end of fit interval.
Definition: NavFit.hpp:55
gnsstk::NavDataPtrList
std::list< NavDataPtr > NavDataPtrList
Definition: NavData.hpp:75
gnsstk::GalFNavEph::sisaIndex
uint8_t sisaIndex
Signal in space accuracy index (OS-SIS-ICD tbl 76)
Definition: GalFNavEph.hpp:86
gnsstk::StringUtils::asString
std::string asString(IonexStoreStrategy e)
Convert a IonexStoreStrategy to a whitespace-free string name.
Definition: IonexStoreStrategy.cpp:46
gnsstk::OrbitDataKepler::Cuc
double Cuc
Cosine latitude (rad)
Definition: OrbitDataKepler.hpp:175
gnsstk::NavType::GloCivilF
@ GloCivilF
gnsstk::GALWeekSecond
Definition: GALWeekSecond.hpp:56
gnsstk::GalDataValid::Unknown
@ Unknown
Health is not known or is uninitialized.
gnsstk::OrbitDataKepler::w
double w
Argument of perigee (rad)
Definition: OrbitDataKepler.hpp:191
FactoryCounter::validateResults
void validateResults(gnsstk::NavDataPtrList &navOut, unsigned lineNo, size_t totalExp=0, unsigned almExp=0, unsigned ephExp=0, unsigned toExp=0, unsigned heaExp=0, unsigned ionoExp=0, unsigned iscExp=0, unsigned otherExp=0)
Definition: FactoryCounter.hpp:144
gnsstk::GalFNavAlm::dAhalf
double dAhalf
delta sqrt(A)
Definition: GalFNavAlm.hpp:107
GalFNavEph.hpp
navFNAVGalPT6
gnsstk::PackedNavBitsPtr navFNAVGalPT6
Definition: GalFNavTestDataDecl.hpp:48
gnsstk::GalFNavEph::iodnav4
uint16_t iodnav4
IODnav for page type 4.
Definition: GalFNavEph.hpp:94
gnsstk::GalFNavEph::xmit2
CommonTime xmit2
Transmit time for page type 2.
Definition: GalFNavEph.hpp:88
gnsstk::OrbitDataKepler::Toe
CommonTime Toe
Orbit epoch.
Definition: OrbitDataKepler.hpp:171
gnsstk::OrbitDataKepler::Crs
double Crs
Sine radius (m)
Definition: OrbitDataKepler.hpp:178
gnsstk::SVHealth
SVHealth
Identify different types of SV health states.
Definition: SVHealth.hpp:52
gnsstk::NavData::signal
NavMessageID signal
Source signal identification for this navigation message data.
Definition: NavData.hpp:175
gnsstk::GalFNavEph::svid
uint8_t svid
Definition: GalFNavEph.hpp:87
GalFNavTimeOffset.hpp
navFNAVGalPT1
gnsstk::PackedNavBitsPtr navFNAVGalPT1
Definition: GalFNavTestDataDecl.hpp:43
gnsstk::NeQuickIonoNavData::idf
bool idf[5]
Ionospheric disturbance flag for regions 1-5 (0-4).
Definition: NeQuickIonoNavData.hpp:132
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
main
int main()
Definition: PNBGalFNavDataFactory_T.cpp:630
gnsstk::InterSigCorr::isc
double isc
Definition: InterSigCorr.hpp:171
gnsstk::GalFNavHealth::sisaIndex
uint8_t sisaIndex
Signal in space accuracy index (OS-SIS-ICD tbl 76)
Definition: GalFNavHealth.hpp:85
gnsstk::GalFNavEph::xmit3
CommonTime xmit3
Transmit time for page type 3.
Definition: GalFNavEph.hpp:89
gnsstk::TrackingCode::Standard
@ Standard
Legacy Glonass civil signal.
gnsstk::OrbitDataKepler::xmitTime
CommonTime xmitTime
Time of transmission of the start of the data.
Definition: OrbitDataKepler.hpp:170
gnsstk::NavData::timeStamp
CommonTime timeStamp
Definition: NavData.hpp:173
gnsstk::OrbitDataKepler::Adot
double Adot
Rate of semi-major axis (m/sec)
Definition: OrbitDataKepler.hpp:188
gnsstk::NeQuickIonoNavData::ai
double ai[3]
Definition: NeQuickIonoNavData.hpp:125
gnsstk::OrbitDataKepler::M0
double M0
Mean anomaly (rad)
Definition: OrbitDataKepler.hpp:182
gnsstk::ObservationType::NavMsg
@ NavMsg
Navigation Message data.
gnsstk::TrackingCode::E5aI
@ E5aI
Galileo E5a I code.
gnsstk::PNBGalFNavDataFactory::addData
bool addData(const PackedNavBitsPtr &navIn, NavDataPtrList &navOut, double cadence=-1) override
Definition: PNBGalFNavDataFactory.cpp:57
gnsstk::GalFNavEph::hsE5a
GalHealthStatus hsE5a
Health status for E5a.
Definition: GalFNavEph.hpp:95
FactoryCounter
Definition: FactoryCounter.hpp:75
TestUtil.hpp
gnsstk::SVHealth::Healthy
@ Healthy
Satellite is in a healthy and useable state.
gnsstk::GalFNavEph::xmit4
CommonTime xmit4
Transmit time for page type 4.
Definition: GalFNavEph.hpp:90
PNBGalFNavDataFactory_T::processEphWRTest
unsigned processEphWRTest()
Definition: PNBGalFNavDataFactory_T.cpp:590
gnsstk::OrbitDataKepler::dndot
double dndot
Rate of correction to mean motion (rad/sec/sec)
Definition: OrbitDataKepler.hpp:184
navFNAVGalPT4
gnsstk::PackedNavBitsPtr navFNAVGalPT4
Definition: GalFNavTestDataDecl.hpp:46
navFNAVGalPT3ct
gnsstk::CommonTime navFNAVGalPT3ct
Definition: GalFNavTestDataDecl.hpp:51
navFNAVWRPT4
gnsstk::PackedNavBitsPtr navFNAVWRPT4
Definition: GalFNavTestDataDecl.hpp:63
GalFNavTestDataDef.hpp
gnsstk::OrbitDataKepler::Cus
double Cus
Sine latitude (rad)
Definition: OrbitDataKepler.hpp:176
TURETURN
#define TURETURN()
Definition: TestUtil.hpp:232
PNBGalFNavDataFactory.hpp
PNBGalFNavDataFactory_T::addDataTimeTest
unsigned addDataTimeTest()
Test addData with time offset data selected only.
Definition: PNBGalFNavDataFactory_T.cpp:225
gnsstk::ObsID
Definition: ObsID.hpp:82
navFNAVGalPT6ct
gnsstk::CommonTime navFNAVGalPT6ct
Definition: GalFNavTestDataDecl.hpp:54
gnsstk::GalFNavTimeOffset
Definition: GalFNavTimeOffset.hpp:53
gnsstk::GalFNavAlm::xmit2
CommonTime xmit2
Definition: GalFNavAlm.hpp:106
gnsstk::NavMessageType::Iono
@ Iono
Ionospheric correction data.
gnsstk::OrbitDataKepler::Ahalf
double Ahalf
Square Root of semi-major axis (m**.5)
Definition: OrbitDataKepler.hpp:187
gnsstk::NavSatelliteID::sat
SatID sat
ID of satellite to which the nav data applies.
Definition: NavSatelliteID.hpp:169
navFNAVGalPT4ct
gnsstk::CommonTime navFNAVGalPT4ct
Definition: GalFNavTestDataDecl.hpp:52
gnsstk::CommonTime
Definition: CommonTime.hpp:84
gnsstk::OrbitDataKepler::Toc
CommonTime Toc
Clock epoch.
Definition: OrbitDataKepler.hpp:172
gnsstk::GalHealthStatus::OK
@ OK
Signal OK.
gnsstk::NavFit::beginFit
CommonTime beginFit
Time at beginning of fit interval.
Definition: NavFit.hpp:54
gnsstk::GalFNavIono
Class containing data elements unique to Galileo I/NAV iono data.
Definition: GalFNavIono.hpp:50
PNBGalFNavDataFactory_T::processEphTest
unsigned processEphTest()
Test processEph method.
Definition: PNBGalFNavDataFactory_T.cpp:302
GalFNavTestDataDecl.hpp
TUDEF
#define TUDEF(CLASS, METHOD)
Definition: TestUtil.hpp:56
gnsstk::GalFNavAlm::wna
unsigned wna
Reference week for t0a.
Definition: GalFNavAlm.hpp:109
PNBGalFNavDataFactory_T::addDataEphemerisTest
unsigned addDataEphemerisTest()
Test addData with ephemeris selected only.
Definition: PNBGalFNavDataFactory_T.cpp:150
PNBGalFNavDataFactory_T::addDataAlmanacTest
unsigned addDataAlmanacTest()
Test addData with almanac selected only.
Definition: PNBGalFNavDataFactory_T.cpp:175
gnsstk::OrbitDataKepler::i0
double i0
Inclination (rad)
Definition: OrbitDataKepler.hpp:190
std::operator<<
std::ostream & operator<<(std::ostream &s, gnsstk::StringUtils::FFLead v)
Definition: FormattedDouble_T.cpp:44
gnsstk::OrbitDataKepler::Cic
double Cic
Cosine inclination (rad)
Definition: OrbitDataKepler.hpp:179
navFNAVGalPT2ct
gnsstk::CommonTime navFNAVGalPT2ct
Definition: GalFNavTestDataDecl.hpp:50
gnsstk::GalFNavEph::iodnav1
uint16_t iodnav1
IODnav for page type 1.
Definition: GalFNavEph.hpp:91
navFNAVGalPT3
gnsstk::PackedNavBitsPtr navFNAVGalPT3
Definition: GalFNavTestDataDecl.hpp:45
navFNAVGalPT1ct
gnsstk::CommonTime navFNAVGalPT1ct
Definition: GalFNavTestDataDecl.hpp:49
gnsstk::OrbitDataKepler::Crc
double Crc
Cosine radius (m)
Definition: OrbitDataKepler.hpp:177
PNBGalFNavDataFactory_T::PNBGalFNavDataFactory_T
PNBGalFNavDataFactory_T()
Definition: PNBGalFNavDataFactory_T.cpp:105
gnsstk::GalFNavAlm::deltai
double deltai
Inclination in rad relative to 0.3*pi rad.
Definition: GalFNavAlm.hpp:108
navFNAVGalPT2
gnsstk::PackedNavBitsPtr navFNAVGalPT2
Definition: GalFNavTestDataDecl.hpp:44
PNBGalFNavDataFactory_T::addDataHealthTest
unsigned addDataHealthTest()
Test addData with health data selected only.
Definition: PNBGalFNavDataFactory_T.cpp:200
std
Definition: Angle.hpp:142
gnsstk::OrbitDataKepler::af0
double af0
SV clock error (sec)
Definition: OrbitDataKepler.hpp:195
gnsstk::GalFNavAlm::t0a
double t0a
Convenience storage of unqualified t0a.
Definition: GalFNavAlm.hpp:110
gnsstk::NavMessageType::Ephemeris
@ Ephemeris
Precision orbits for the transmitting SV.
navFNAVWRPT1ct
gnsstk::CommonTime navFNAVWRPT1ct
Definition: GalFNavTestDataDecl.hpp:60
FactoryCounter.hpp
PNBGalFNavDataFactory_T::processAlmTest
unsigned processAlmTest()
Test processAlm method, and implicitly, processAlmOrb.
Definition: PNBGalFNavDataFactory_T.cpp:432
TUASSERTFE
#define TUASSERTFE(EXP, GOT)
Definition: TestUtil.hpp:103
gnsstk::GalFNavHealth::dataValidityStatus
GalDataValid dataValidityStatus
Data Validity Status (DVS)
Definition: GalFNavHealth.hpp:83
navFNAVWRPT3
gnsstk::PackedNavBitsPtr navFNAVWRPT3
Definition: GalFNavTestDataDecl.hpp:62
gnsstk::GalHealthStatus
GalHealthStatus
Identify different types of SV health states.
Definition: GalHealthStatus.hpp:51
gnsstk::SatelliteSystem::Glonass
@ Glonass
GalFNavISC.hpp
gnsstk::GalFNavAlm::ioda5
uint8_t ioda5
IODa for page type 5.
Definition: GalFNavAlm.hpp:111
PNBGalFNavDataFactory_T::addDataEphHealthTest
unsigned addDataEphHealthTest()
One additional combo test.
Definition: PNBGalFNavDataFactory_T.cpp:250
gnsstk::NavID
Definition: NavID.hpp:61
gnsstk::GalFNavEph
Class containing data elements unique to Galileo F/NAV ephemerides.
Definition: GalFNavEph.hpp:52
gnsstk::OrbitDataKepler::health
SVHealth health
SV health status.
Definition: OrbitDataKepler.hpp:173
gnsstk::OrbitDataKepler::OMEGA0
double OMEGA0
Longitude of ascending node at weekly epoch (rad)
Definition: OrbitDataKepler.hpp:189
navFNAVGalPT5
gnsstk::PackedNavBitsPtr navFNAVGalPT5
Definition: GalFNavTestDataDecl.hpp:47
GalFNavIono.hpp
GALWeekSecond.hpp
gnsstk::OrbitDataKepler::af1
double af1
SV clock drift (sec/sec)
Definition: OrbitDataKepler.hpp:196
GalFNavAlm.hpp
TimeString.hpp
gnsstk::PNBGalFNavDataFactory::processEph
bool processEph(unsigned pageType, const PackedNavBitsPtr &navIn, NavDataPtrList &navOut)
Definition: PNBGalFNavDataFactory.cpp:118
gnsstk::SatelliteSystem::Galileo
@ Galileo
gnsstk::GalFNavISC
Definition: GalFNavISC.hpp:51
gnsstk::NavMessageType::Almanac
@ Almanac
Low-precision orbits for other than the transmitting SV.
gnsstk::GalFNavEph::iodnav3
uint16_t iodnav3
IODnav for page type 3.
Definition: GalFNavEph.hpp:93
gnsstk::OrbitDataKepler::dn
double dn
Correction to mean motion (rad/sec)
Definition: OrbitDataKepler.hpp:183
gnsstk::NavType::GalFNAV
@ GalFNAV
navFNAVWRPT4ct
gnsstk::CommonTime navFNAVWRPT4ct
Definition: GalFNavTestDataDecl.hpp:61
gnsstk::CarrierBand::L5
@ L5
GPS L5, Galileo E5a, SBAS L5, QZSS L5, BeiDou B2a, NavIC L5.


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