Rinex3Nav_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 
40 #include "Rinex3NavHeader.hpp"
41 #include "Rinex3NavData.hpp"
42 #include "Rinex3NavStream.hpp"
44 
45 #include "StringUtils.hpp"
46 #include "Exception.hpp"
47 
48 #include "build_config.h"
49 
50 #include "TestUtil.hpp"
51 #include <string>
52 #include <iostream>
53 
54 using namespace gnsstk;
55 
56 //=============================================================================
57 // Class declarations
58 //=============================================================================
59 
61 {
62 
63 public:
64 
65  // constructor
67  {
68  init();
69  }
70  // destructor
72 
73  void init();
74 
75  void toRinex3();
76 
77  // return values indicate number of failures, i.e., 0=PASS, 0!=FAIL
78  unsigned hardCodeTest();
79  unsigned headerExceptionTest();
80  unsigned streamReadWriteTest();
81  unsigned filterOperatorsTest();
82 
83  void toConversionTest();
84  unsigned version2ToVersion3Test();
85  unsigned version3ToVersion2Test();
86 
87 private:
88 
89  std::string dataFilePath;
90  std::string tempFilePath;
91  std::string file_sep;
92 
93  std::string inputRinexNavExample;
94 
95  std::string outputTestOutput;
96  std::string outputTestOutput2;
97  std::string outputTestOutput3;
98  std::string outputRinexDump;
99 
101  std::string inputNotaNavFile;
105  std::string inputBadHeader;
107 
108  std::string inputFilterStream1;
109  std::string inputFilterStream2;
110  std::string inputFilterStream3;
111  std::string outputFilterOutput;
112 
113  std::string outputRinexStore;
114 
115  std::stringstream failDescriptionStream;
117 
118  std::string inputRinex3Nav;
119  std::string inputRinex2Nav;
120  std::string outputRinex3Nav;
121  std::string outputRinex2Nav;
122 
124 };
125 
126 //============================================================
127 // Initialize Test Data Filenames
128 //============================================================
129 
131 {
132 
133  dataFilePath = gnsstk::getPathData();
134  tempFilePath = gnsstk::getPathTestTemp();
135 
136  //----------------------------------------
137  // Full file paths
138  //----------------------------------------
139  file_sep = getFileSep();
140 
141  inputRinexNavExample = dataFilePath + file_sep +
142  "test_input_rinex2_nav_RinexNavExample.99n";
143 
144  outputTestOutput = tempFilePath + file_sep +
145  "test_output_rinex2_nav_TestOutput.99n";
146  outputTestOutput2 = tempFilePath + file_sep +
147  "test_output_rinex2_nav_TestOutput2.99n";
148  outputTestOutput3 = tempFilePath + file_sep +
149  "test_output_rinex2_nav_TestOutput3.99n";
150  outputRinexDump = tempFilePath + file_sep +
151  "test_output_rinex2_nav_RinexDump.txt";
152 
153  inputInvalidLineLength = dataFilePath + file_sep +
154  "test_input_rinex2_nav_InvalidLineLength.99n";
155  inputNotaNavFile = dataFilePath + file_sep +
156  "test_input_rinex2_nav_NotaNavFile.99n";
157  inputUnknownHeaderLabel = dataFilePath + file_sep +
158  "test_input_rinex2_nav_UnknownHeaderLabel.99n";
159  inputIncompleteHeader = dataFilePath + file_sep +
160  "test_input_rinex2_nav_IncompleteHeader.99n";
161  inputUnsupportedRinex = dataFilePath + file_sep +
162  "test_input_rinex2_nav_UnsupportedRinex.99n";
163  inputBadHeader = dataFilePath + file_sep +
164  "test_input_rinex2_nav_BadHeader.99n";
165  outputTestOutputHeader = tempFilePath + file_sep +
166  "test_output_rinex2_nav_TestOutputHeader.99n";
167 
168  inputFilterStream1 = dataFilePath + file_sep +
169  "test_input_rinex2_nav_FilterTest1.99n";
170  inputFilterStream2 = dataFilePath + file_sep +
171  "test_input_rinex2_nav_FilterTest2.99n";
172  inputFilterStream3 = dataFilePath + file_sep +
173  "test_input_rinex2_nav_FilterTest3.99n";
174  outputFilterOutput = tempFilePath + file_sep +
175  "test_output_rinex2_nav_FilterOutput.txt";
176 
177  outputRinexStore = tempFilePath + file_sep +
178  "test_output_rinex2_nav_RinexStore.txt";
179 
180 }
181 
182 //============================================================
183 // Change input and output file names for Rinex v.3 types
184 //============================================================
185 
187 {
188 
189  std::cout<<"Running tests for Rinex version 3.0"<<std::endl;
190 
191  //----------------------------------------
192  // Full file paths
193  //----------------------------------------
194 
195  inputRinexNavExample = dataFilePath + file_sep +
196  "test_input_rinex3_nav_RinexNavExample.15n";
197 
198  outputTestOutput = tempFilePath + file_sep +
199  "test_output_rinex3_nav_TestOutput.15n";
200  outputTestOutput2 = tempFilePath + file_sep +
201  "test_output_rinex3_nav_TestOutput2.15n";
202  outputTestOutput3 = tempFilePath + file_sep +
203  "test_output_rinex3_nav_TestOutput3.15n";
204  outputRinexDump = tempFilePath + file_sep +
205  "test_output_rinex3_nav_RinexDump.txt";
206 
207  inputInvalidLineLength = dataFilePath + file_sep +
208  "test_input_rinex3_nav_InvalidLineLength.15n";
209  inputNotaNavFile = dataFilePath + file_sep +
210  "test_input_rinex3_nav_NotaNavFile.15n";
211  inputUnknownHeaderLabel = dataFilePath + file_sep +
212  "test_input_rinex3_nav_UnknownHeaderLabel.15n";
213  inputIncompleteHeader = dataFilePath + file_sep +
214  "test_input_rinex3_nav_IncompleteHeader.15n";
215  inputUnsupportedRinex = dataFilePath + file_sep +
216  "test_input_rinex3_nav_UnsupportedRinex.15n";
217  inputBadHeader = dataFilePath + file_sep +
218  "test_input_rinex3_nav_BadHeader.15n";
219  outputTestOutputHeader = tempFilePath + file_sep +
220  "test_output_rinex3_nav_TestOutputHeader.15n";
221 
222  inputFilterStream1 = dataFilePath + file_sep +
223  "test_input_rinex3_nav_FilterTest1.15n";
224  inputFilterStream2 = dataFilePath + file_sep +
225  "test_input_rinex3_nav_FilterTest2.15n";
226  inputFilterStream3 = dataFilePath + file_sep +
227  "test_input_rinex3_nav_FilterTest3.15n";
228  outputFilterOutput = tempFilePath + file_sep +
229  "test_output_rinex3_nav_FilterOutput.txt";
230 
231  outputRinexStore = tempFilePath + file_sep +
232  "test_output_rinex3_nav_RinexStore.txt";
233 
234 }
235 
236 //=============================================================
237 // Change input and output file names for Rinex Conversion test
238 //=============================================================
239 
241 {
242  inputRinex3Nav = dataFilePath + file_sep +
243  "test_input_rinex3_nav_RinexNavExample.15n";
244  inputRinex2Nav = dataFilePath + file_sep +
245  "test_input_rinex2_nav_Rinex3NavFile.15n";
246 
247  outputRinex3Nav = tempFilePath + file_sep +
248  "test_output_rinex3_nav_Rinex2to3Output.15n";
249  outputRinex2Nav = tempFilePath + file_sep +
250  "test_output_rinex2_nav_Rinex3to2Output.15n";
251 }
252 
253 //=============================================================================
254 // Test Method Definitions
255 //=============================================================================
256 
257 
258 //------------------------------------------------------------
259 // This test checks to make sure that the internal members of
260 // the Rinex3NavHeader are as we think they should be.
261 // Also at the end of this test, we check and make sure our
262 // output file is equal to our input
263 // This assures that if any changes happen, the test will fail
264 // and the user will know.
265 // Also, output was put into input three times over to make sure
266 // there were no small errors which blow up into big errors
267 //------------------------------------------------------------
269 {
270  double compareVersion;
271  std::string compareFileProgram;
272  std::string compareFileAgency;
273  std::string compareDate;
274  std::string compareComment;
275 
276  TUDEF("Rinex3NavStream", "ostream<<");
277 
278  try
279  {
280  gnsstk::Rinex3NavStream rinex3NavStream(inputRinexNavExample.c_str());
281  gnsstk::Rinex3NavStream out(outputTestOutput.c_str(), std::ios::out);
282  gnsstk::Rinex3NavStream dmp(outputRinexDump.c_str(), std::ios::out);
283  gnsstk::Rinex3NavHeader rinex3NavHeader;
284  gnsstk::Rinex3NavData rinex3NavData;
285 
286  rinex3NavStream >> rinex3NavHeader;
287  out << rinex3NavHeader;
288 
289  while (rinex3NavStream >> rinex3NavData)
290  {
291  out << rinex3NavData;
292  }
293 
294  if (rinex3NavHeader.version == 2.1)
295  {
296  compareVersion = 2.1;
297  compareFileProgram = (std::string)"XXRINEXN V3";
298  compareFileAgency = (std::string)"AIUB";
299  compareDate = (std::string)"1999-09-02 19:22:36";
300  compareComment = (std::string)"THIS IS ONE COMMENT";
301  }
302  else if (rinex3NavHeader.version == 3.02)
303  {
304  compareVersion = 3.02;
305  compareFileProgram = (std::string)"cnvtToRINEX 2.25.0";
306  compareFileAgency = (std::string)"convertToRINEX OPR";
307  compareDate = (std::string)"23-Jan-15 22:34 UTC";
308  compareComment = (std::string)
309  "-----------------------------------------------------------";
310  }
311 
312  TUCSM("operator>>");
313  TUASSERTFE(compareVersion, rinex3NavHeader.version);
314  TUASSERTE(std::string, compareFileProgram, rinex3NavHeader.fileProgram);
315  TUASSERTE(std::string, compareFileAgency, rinex3NavHeader.fileAgency);
316  TUASSERTE(std::string, compareDate, rinex3NavHeader.date);
317 
318  std::vector<std::string>::const_iterator itr1 =
319  rinex3NavHeader.commentList.begin();
320  TUASSERTE(std::string, compareComment, *itr1);
321 
322  TUCSM("operator<<");
323  TUCMPFILE(inputRinexNavExample, outputTestOutput, 2);
324 
325  //------------------------------------------------------------
326  gnsstk::Rinex3NavStream rinex3NavStream2(outputTestOutput.c_str());
327  gnsstk::Rinex3NavStream out2(outputTestOutput2.c_str(), std::ios::out);
328  gnsstk::Rinex3NavHeader rinex3NavHeader2;
329  gnsstk::Rinex3NavData rinex3NavData2;
330 
331  rinex3NavStream2 >> rinex3NavHeader2;
332  out2 << rinex3NavHeader2;
333 
334  while (rinex3NavStream2 >> rinex3NavData2)
335  {
336  out2 << rinex3NavData2;
337  }
338 
339  gnsstk::Rinex3NavStream rinex3NavStream3(outputTestOutput2.c_str());
340  gnsstk::Rinex3NavStream out3(outputTestOutput3.c_str() , std::ios::out);
341  gnsstk::Rinex3NavHeader rinex3NavHeader3;
342  gnsstk::Rinex3NavData rinex3NavData3;
343 
344  rinex3NavStream3 >> rinex3NavHeader3;
345  out3 << rinex3NavHeader3;
346 
347  while (rinex3NavStream3 >> rinex3NavData3)
348  {
349  out3 << rinex3NavData3;
350  }
351  rinex3NavHeader.dump(dmp);
352  rinex3NavData.dump(dmp);
353 
354  TUCMPFILE(inputRinexNavExample, outputTestOutput3, 2);
355  }
356  catch(...)
357  {
358  TUFAIL("test read TestOutput2, unexpected exception");
359  }
360 
361  TURETURN();
362 }
363 
364 //------------------------------------------------------------
365 // This test check that Rinex Header exceptions are thrown
366 //------------------------------------------------------------
368 {
369  TUDEF("rinex3NavStream", "");
370 
371  std::string msg_test_desc = " ";
372  std::string msg_expected = ", should throw a gnsstk::Exception";
373  std::string msg_false_pass = ", but threw no exception.";
374  std::string msg_true_fail = ", but instead threw an unknown exception.";
375 
376  try
377  {
378  gnsstk::Rinex3NavStream invalidLineLength(inputInvalidLineLength.c_str());
379  gnsstk::Rinex3NavStream notaNavFile(inputNotaNavFile.c_str());
380  gnsstk::Rinex3NavStream unknownHeaderLabel(inputUnknownHeaderLabel.c_str());
381  gnsstk::Rinex3NavStream incompleteHeader(inputIncompleteHeader.c_str());
382  gnsstk::Rinex3NavStream unsupportedRinex(inputUnsupportedRinex.c_str());
383  gnsstk::Rinex3NavStream badHeader(inputBadHeader.c_str());
384  gnsstk::Rinex3NavStream out(outputTestOutputHeader.c_str(), std::ios::out);
386 
387  invalidLineLength.exceptions( std::fstream::failbit);
388  notaNavFile.exceptions( std::fstream::failbit);
389  unknownHeaderLabel.exceptions(std::fstream::failbit);
390  incompleteHeader.exceptions( std::fstream::failbit);
391  unsupportedRinex.exceptions( std::fstream::failbit);
392  badHeader.exceptions( std::fstream::failbit);
393 
394 
395  //------------------------------------------------------------
396  msg_test_desc = "InvalidLineLength test";
397  try
398  {
399  invalidLineLength >> header;
400  TUFAIL(msg_test_desc + msg_expected + msg_false_pass);
401  }
402  catch(gnsstk::Exception e)
403  {
404  TUPASS(msg_test_desc + msg_expected);
405  }
406  catch(...)
407  {
408  TUFAIL( msg_test_desc + msg_expected + msg_true_fail);
409  }
410 
411  //------------------------------------------------------------
412  msg_test_desc = "NotaNavFile test";
413  try
414  {
415  notaNavFile >> header;
416  TUFAIL(msg_test_desc + msg_expected + msg_false_pass);
417  }
418  catch(gnsstk::Exception e)
419  {
420  TUPASS(msg_test_desc + msg_expected);
421  }
422  catch(...)
423  {
424  TUFAIL(msg_test_desc + msg_expected + msg_true_fail);
425  }
426 
427  //------------------------------------------------------------
428  msg_test_desc = "UnknownHeaderLabel test";
429  try
430  {
431  unknownHeaderLabel >> header;
432  TUFAIL(msg_test_desc + msg_expected + msg_false_pass);
433  }
434  catch(gnsstk::Exception e)
435  {
436  TUPASS(msg_test_desc + msg_expected);
437  }
438  catch(...)
439  {
440  TUFAIL(msg_test_desc + msg_expected + msg_true_fail);
441  }
442 
443  //------------------------------------------------------------
444  msg_test_desc = "IncompleteHeader test";
445  try
446  {
447  incompleteHeader >> header;
448  TUFAIL(msg_test_desc + msg_expected + msg_false_pass);
449  }
450  catch(gnsstk::Exception e)
451  {
452  TUPASS(msg_test_desc + msg_expected);
453  }
454  catch(...)
455  {
456  TUFAIL(msg_test_desc + msg_expected + msg_true_fail);
457  }
458 
459  //------------------------------------------------------------
460  // msg_test_desc = "UnsupportedRinex test"; Rinex version 3.33 is marked supported
461  /* try
462  {
463  UnsupportedRinex >> header;
464  test2.assert(false, msg_test_desc + msg_expected + msg_false_pass , __LINE__);
465  }
466  catch(gnsstk::Exception e)
467  {
468  test2.assert(true, msg_test_desc + msg_expected, __LINE__);
469  }
470  catch(...)
471  {
472  test2.assert(false, msg_test_desc + msg_expected + msg_true_fail, __LINE__);
473  }
474  */
475  //------------------------------------------------------------
476  // msg_test_desc = "BadHeader test"; Rinex version 3.33 is marked supported, is header only bad b/c v. 3.33?
477  /* try
478  {
479  BadHeader >> header;
480  test2.assert(false, msg_test_desc + msg_expected + msg_false_pass , __LINE__);
481  }
482  catch(gnsstk::Exception e)
483  {
484  test2.assert(true, msg_test_desc + msg_expected, __LINE__);
485  }
486  catch(...)
487  {
488  test2.assert(false, msg_test_desc + msg_expected + msg_true_fail, __LINE__);
489  }
490  */
491  //------------------------------------------------------------
492 
493  }
494  catch(...)
495  {
496  TUFAIL("Unknown exception");
497  }
498  TURETURN();
499 }
500 
501 //------------------------------------------------------------
502 // Test rinex3NavData File read/write with streams
503 // * Read Rinex Nav file directly into a RinexEphemerisStore
504 // * Write contents of RinexEphemerisStore back out to a new file
505 // * Diff the old file and the new file
506 //------------------------------------------------------------
508 {
509  TUDEF("rinex3NavData", "Redirect");
510 
511  std::string msg_test_desc = "streamReadWriteTest test";
512  std::string msg_expected = ", compares the output file with the input file";
513  std::string msg_fail_equal = ", files are different!";
514  std::string msg_fail_except = ", unexpectedly threw an exception.";
515 
516  try
517  {
518  Rinex3NavStream rinexInputStream(inputRinexNavExample.c_str() );
519  Rinex3NavStream rinexOutputStream(outputRinexStore.c_str(),std::ios::out);
520  Rinex3NavHeader streamTool;
521  // used to set rinexInputStream.header to a valid object
522  rinexInputStream >> streamTool;
523  rinexOutputStream.header = rinexInputStream.header;
524  rinexOutputStream << rinexOutputStream.header;
525 
527  while (rinexInputStream >> data)
528  {
529  rinexOutputStream << data;
530  }
531  TUCMPFILE(inputRinexNavExample, outputRinexStore, 9);
532  }
533  catch(...)
534  {
535  TUFAIL(msg_test_desc + msg_expected + msg_fail_except);
536  }
537  TURETURN();
538 }
539 
540 //------------------------------------------------------------
541 // Test for several of the members within RinexNavFilterOperators
542 // including merge, EqualsFull, LessThanSimple, LessThanFull, and FilterPRN
543 //------------------------------------------------------------
545 {
546  // todo: This is a brokent test as of 4/25/16. In some environments
547  // this test is returning a false pass and on others its failing.
548  return 0;
549 #if 0
550  TestUtil test4("rinex3NavStream", "open", __FILE__, __LINE__);
551 
552  std::string msg_test_desc = "";
553  std::string msg_expected = ", ";
554  std::string msg_fail = ", ";
555 
556  try
557  {
558 
559  gnsstk::Rinex3NavStream FilterStream1(inputFilterStream1.c_str());
560  FilterStream1.open(inputFilterStream1.c_str(), std::ios::in);
561  gnsstk::Rinex3NavStream FilterStream2(inputFilterStream2.c_str());
562  gnsstk::Rinex3NavStream FilterStream3(inputFilterStream3.c_str());
563  gnsstk::Rinex3NavStream out(outputFilterOutput.c_str(), std::ios::out);
564 
565  gnsstk::Rinex3NavHeader FilterHeader1;
566  gnsstk::Rinex3NavHeader FilterHeader2;
567  gnsstk::Rinex3NavHeader FilterHeader3;
568 
569  gnsstk::Rinex3NavData FilterData1;
570  gnsstk::Rinex3NavData FilterData2;
571  gnsstk::Rinex3NavData FilterData3;
572 
573  FilterStream1 >> FilterHeader1;
574  FilterStream2 >> FilterHeader2;
575  FilterStream3 >> FilterHeader3;
576 
577  while (FilterStream1 >> FilterData1)
578  {
579  }
580  while (FilterStream2 >> FilterData2)
581  {
582  }
583  while (FilterStream3 >> FilterData3)
584  {
585  }
586 
588  merged(FilterHeader1);
589  merged(FilterHeader2);
590  out << merged.theHeader;
591 
593 
594  msg_test_desc =
595  "rinex3NavDataOperatorEqualsFull, EqualsFUll FilterData1 FilterData2, fail";
596  test4.assert(EqualsFull(FilterData1, FilterData2), msg_test_desc,
597  __LINE__);
598  msg_test_desc =
599  "rinex3NavDataOperatorEqualsFull, FilterData1 not equal FilterData3, fail";
600  test4.assert(!EqualsFull(FilterData1, FilterData3), msg_test_desc,
601  __LINE__);
602 
604 
605  msg_test_desc =
606  "rinex3NavDataOperatorLessThanSimple, not LessThanSimple FilterData1 FilterData3, fail";
607  test4.assert(!LessThanSimple(FilterData1, FilterData2), msg_test_desc,
608  __LINE__);
609 
611 
612  msg_test_desc =
613  "rinex3NavDataOperatorLessThanFull, not LessThanFull FilterData1 FilterData1, fail";
614  test4.assert(!LessThanFull(FilterData1, FilterData1), msg_test_desc,
615  __LINE__);
616 
617  std::list<long> list;
618  list.push_front(6);
619  gnsstk::Rinex3NavDataFilterPRN FilterPRN(list);
620  msg_test_desc = "rinex3NavDataFilterPRN, FilterPRN FilterData3, fail";
621  test4.assert(FilterPRN(FilterData3), msg_test_desc, __LINE__);
622  }
623  catch(...)
624  {
625  msg_test_desc = "filterOperatorsTest, threw unexpected exception, fail";
626  test4.assert(false, msg_test_desc, __LINE__);
627  }
628 
629  return(test4.countFails());
630 #endif
631 }
632 
633 //------------------------------------------------------------
634 // Tests if a input Rinex 3 file can be output as a version 2 file
635 //------------------------------------------------------------
636 
638 {
639  TUDEF("Rinex3Nav", "Convert v.3 to v.2");
640 
641  gnsstk::Rinex3NavStream inputStream(inputRinex3Nav.c_str());
642  gnsstk::Rinex3NavStream outputStream(outputRinex2Nav.c_str(), std::ios::out);
645 
646  inputStream >> navHeader;
647 
648  navHeader.version = 2.11;
649 
650  outputStream << navHeader;
651  while (inputStream >> navData)
652  {
653  outputStream << navData;
654  }
655 
656  //skip first 2 lines, not expected to match
657  TUCMPFILE(inputRinex2Nav, outputRinex2Nav, 2);
658 
659  TURETURN();
660 }
661 
662 //------------------------------------------------------------
663 // Tests if a input Rinex 2 file can be output as a version 3 file
664 //------------------------------------------------------------
665 
666 
668 {
669  TUDEF("Rinex3Nav", "Convert v.2 to v.3");
670 
671  gnsstk::Rinex3NavStream inputStream(inputRinex2Nav.c_str());
672  gnsstk::Rinex3NavStream outputStream(outputRinex3Nav.c_str(), std::ios::out);
675 
676  inputStream >> navHeader;
677 
678  navHeader.version = 3.02;
679 
680  outputStream << navHeader;
681  while (inputStream >> navData)
682  {
683  outputStream << navData;
684  }
685 
686  //skip first 2 lines, not expected to match
687  TUCMPFILE(inputRinex3Nav, outputRinex3Nav, 2);
688 
689  TURETURN();
690 }
691 
692 
693 //============================================================
694 // Run all the test methods defined above
695 //============================================================
696 
697 int main()
698 {
699  unsigned errorTotal = 0;
700  Rinex3Nav_T testClass;
701 
702  std::cout << "Running tests for Rinex version 2.1" << std::endl;
703 
704  errorTotal += testClass.headerExceptionTest();
705  errorTotal += testClass.hardCodeTest();
706  errorTotal += testClass.streamReadWriteTest();
707  errorTotal += testClass.filterOperatorsTest();
708 
709  //Change to test v.3 Rinex files
710  testClass.toRinex3();
711 
712  errorTotal += testClass.headerExceptionTest();
713  errorTotal += testClass.hardCodeTest();
714  errorTotal += testClass.streamReadWriteTest();
715  errorTotal += testClass.filterOperatorsTest();
716 
717  // Unimplemented features
718  //testClass.toConversionTest();
719  //errorTotal += testClass.version2ToVersion3Test();
720  //errorTotal += testClass.version3ToVersion2Test();
721 
722  std::cout << "Total Failures for " << __FILE__ << ": " << errorTotal
723  << std::endl;
724 
725  return(errorTotal);
726 }
TUCSM
#define TUCSM(METHOD)
Definition: TestUtil.hpp:59
Rinex3NavHeader.hpp
Rinex3Nav_T::inputFilterStream1
std::string inputFilterStream1
Definition: Rinex3Nav_T.cpp:108
gnsstk::TestUtil::countFails
int countFails(void)
Definition: TestUtil.hpp:771
example3.header
header
Definition: example3.py:22
gnsstk::TestUtil::assert
void assert(bool testExpression, const std::string &testMsg, const int lineNumber)
Definition: TestUtil.hpp:607
Rinex3Nav_T::~Rinex3Nav_T
~Rinex3Nav_T()
Definition: Rinex3Nav_T.cpp:71
gnsstk::Rinex3NavStream
Definition: Rinex3NavStream.hpp:62
Rinex3Nav_T
Definition: Rinex3Nav_T.cpp:60
gnsstk::Rinex3NavDataFilterPRN
Filter based on PRN ID.
Definition: Rinex3NavFilterOperators.hpp:252
gnsstk::Rinex3NavData
Definition: Rinex3NavData.hpp:69
Rinex3Nav_T::inputUnknownHeaderLabel
std::string inputUnknownHeaderLabel
Definition: Rinex3Nav_T.cpp:102
StringUtils.hpp
Rinex3Nav_T::version2ToVersion3Test
unsigned version2ToVersion3Test()
Definition: Rinex3Nav_T.cpp:667
dataFilePath
string dataFilePath
Definition: Rinex3Obs_FromScratch_T.cpp:51
example4.navHeader
navHeader
Definition: example4.py:15
Rinex3Nav_T::outputRinex3Nav
std::string outputRinex3Nav
Definition: Rinex3Nav_T.cpp:120
TUASSERTE
#define TUASSERTE(TYPE, EXP, GOT)
Definition: TestUtil.hpp:81
TUFAIL
#define TUFAIL(MSG)
Definition: TestUtil.hpp:228
gnsstk::Rinex3NavStream::header
Rinex3NavHeader header
RINEX NAV header for this file.
Definition: Rinex3NavStream.hpp:80
Rinex3Nav_T::dataFilePath
std::string dataFilePath
Definition: Rinex3Nav_T.cpp:89
Rinex3Nav_T::file_sep
std::string file_sep
Definition: Rinex3Nav_T.cpp:91
gnsstk::Rinex3NavStream::open
virtual void open(const char *fn, std::ios::openmode mode)
overrides open to reset the header
Definition: Rinex3NavStream.cpp:70
Rinex3Nav_T::inputRinex3Nav
std::string inputRinex3Nav
Definition: Rinex3Nav_T.cpp:118
gnsstk::Rinex3NavDataOperatorLessThanFull
This compares all elements of the Rinex3NavData with less than.
Definition: Rinex3NavFilterOperators.hpp:63
Rinex3Nav_T::headerExceptionTest
unsigned headerExceptionTest()
Definition: Rinex3Nav_T.cpp:367
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
Rinex3NavStream.hpp
Rinex3Nav_T::outputTestOutput
std::string outputTestOutput
Definition: Rinex3Nav_T.cpp:95
Rinex3NavData.hpp
Rinex3Nav_T::inputRinex2Nav
std::string inputRinex2Nav
Definition: Rinex3Nav_T.cpp:119
gnsstk::Exception
Definition: Exception.hpp:151
Rinex3NavFilterOperators.hpp
Rinex3Nav_T::outputRinexStore
std::string outputRinexStore
Definition: Rinex3Nav_T.cpp:113
Rinex3Nav_T::outputTestOutput3
std::string outputTestOutput3
Definition: Rinex3Nav_T.cpp:97
gnsstk::Rinex3NavHeader
Definition: Rinex3NavHeader.hpp:107
gnsstk::Rinex3NavDataOperatorLessThanSimple
Only compares time. Suitable for sorting a Rinex3Nav file.
Definition: Rinex3NavFilterOperators.hpp:190
Rinex3Nav_T::inputInvalidLineLength
std::string inputInvalidLineLength
Definition: Rinex3Nav_T.cpp:100
TestUtil.hpp
gnsstk::Rinex3NavHeaderTouchHeaderMerge::theHeader
Rinex3NavHeader theHeader
Definition: Rinex3NavFilterOperators.hpp:248
Rinex3Nav_T::inputIncompleteHeader
std::string inputIncompleteHeader
Definition: Rinex3Nav_T.cpp:103
gnsstk::Rinex3NavData::dump
virtual void dump(std::ostream &s) const
Definition: Rinex3NavData.cpp:300
TURETURN
#define TURETURN()
Definition: TestUtil.hpp:232
TUPASS
#define TUPASS(MSG)
Definition: TestUtil.hpp:230
Rinex3Nav_T::inputFilterStream3
std::string inputFilterStream3
Definition: Rinex3Nav_T.cpp:110
Rinex3Nav_T::failDescriptionStream
std::stringstream failDescriptionStream
Definition: Rinex3Nav_T.cpp:115
Rinex3Nav_T::streamReadWriteTest
unsigned streamReadWriteTest()
Definition: Rinex3Nav_T.cpp:507
file_sep
string file_sep
Definition: Rinex3Obs_FromScratch_T.cpp:52
TUDEF
#define TUDEF(CLASS, METHOD)
Definition: TestUtil.hpp:56
gnsstk::Rinex3NavHeaderTouchHeaderMerge
Definition: Rinex3NavFilterOperators.hpp:210
main
int main()
Definition: Rinex3Nav_T.cpp:697
TUCMPFILE
#define TUCMPFILE(F1, F2, SKIP)
Definition: TestUtil.hpp:170
Rinex3Nav_T::hardCodeTest
unsigned hardCodeTest()
Definition: Rinex3Nav_T.cpp:268
example3.data
data
Definition: example3.py:22
Rinex3Nav_T::outputTestOutputHeader
std::string outputTestOutputHeader
Definition: Rinex3Nav_T.cpp:106
Rinex3Nav_T::Rinex3Nav_T
Rinex3Nav_T()
Definition: Rinex3Nav_T.cpp:66
Rinex3Nav_T::inputRinexNavExample
std::string inputRinexNavExample
Definition: Rinex3Nav_T.cpp:93
Exception.hpp
Rinex3Nav_T::toRinex3
void toRinex3()
Definition: Rinex3Nav_T.cpp:186
Rinex3Nav_T::failDescriptionString
std::string failDescriptionString
Definition: Rinex3Nav_T.cpp:116
example4.navData
navData
Definition: example4.py:15
Rinex3Nav_T::outputFilterOutput
std::string outputFilterOutput
Definition: Rinex3Nav_T.cpp:111
Rinex3Nav_T::inputFilterStream2
std::string inputFilterStream2
Definition: Rinex3Nav_T.cpp:109
Rinex3Nav_T::tempFilePath
std::string tempFilePath
Definition: Rinex3Nav_T.cpp:90
Rinex3Nav_T::filterOperatorsTest
unsigned filterOperatorsTest()
Definition: Rinex3Nav_T.cpp:544
TUASSERTFE
#define TUASSERTFE(EXP, GOT)
Definition: TestUtil.hpp:103
Rinex3Nav_T::outputRinex2Nav
std::string outputRinex2Nav
Definition: Rinex3Nav_T.cpp:121
Rinex3Nav_T::toConversionTest
void toConversionTest()
Definition: Rinex3Nav_T.cpp:240
Rinex3Nav_T::outputTestOutput2
std::string outputTestOutput2
Definition: Rinex3Nav_T.cpp:96
Rinex3Nav_T::inputNotaNavFile
std::string inputNotaNavFile
Definition: Rinex3Nav_T.cpp:101
Rinex3Nav_T::fileCompare
bool fileCompare
Definition: Rinex3Nav_T.cpp:123
Rinex3Nav_T::version3ToVersion2Test
unsigned version3ToVersion2Test()
Definition: Rinex3Nav_T.cpp:637
gnsstk::TestUtil
Definition: TestUtil.hpp:265
Rinex3Nav_T::init
void init()
Definition: Rinex3Nav_T.cpp:130
Rinex3Nav_T::inputUnsupportedRinex
std::string inputUnsupportedRinex
Definition: Rinex3Nav_T.cpp:104
tempFilePath
string tempFilePath
Definition: Rinex3Obs_FromScratch_T.cpp:50
gnsstk::Rinex3NavDataOperatorEqualsFull
This compares all elements of the Rinex3NavData with equals.
Definition: Rinex3NavFilterOperators.hpp:156
Rinex3Nav_T::outputRinexDump
std::string outputRinexDump
Definition: Rinex3Nav_T.cpp:98
Rinex3Nav_T::inputBadHeader
std::string inputBadHeader
Definition: Rinex3Nav_T.cpp:105


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