45 #include "build_config.h"
79 void toRinex3(
void );
82 int headerExceptionTest(
void );
83 int hardCodeTest(
void );
84 int filterOperatorsTest(
void );
85 int dataExceptionsTest(
void );
87 int roundTripTest(
void );
89 void toConversionTest(
void );
90 int version2ToVersion3Test(
void );
91 int version3ToVersion2Test(
void );
92 int transmitAntennaTest();
94 int embeddedHeadersTest();
150 cout <<
"Running tests for Rinex version 2.x" << endl;
162 "test_input_rinex2_obs_RinexObsFile.06o";
164 "test_input_rinex2_obs_IncompleteHeader.06o";
166 "test_input_rinex2_obs_InvalidLineLength.06o";
168 "test_input_rinex2_obs_InvalidNumPRNWaveFact.06o";
170 "test_input_rinex2_obs_NotObs.06o";
172 "test_input_rinex2_obs_SystemGeosync.06o";
174 "test_input_rinex2_obs_SystemGlonass.06o";
176 "test_input_rinex2_obs_SystemMixed.06o";
178 "test_input_rinex2_obs_SystemTransit.06o";
180 "test_input_rinex2_obs_UnSupVersion.06o";
182 "test_input_rinex2_obs_RinexContData.06o";
187 "test_input_rinex2_obs_BadEpochLine.06o";
189 "test_input_rinex2_obs_BadEpochFlag.06o";
191 "test_input_rinex2_obs_BadLineSize.06o";
193 "test_input_rinex2_obs_InvalidTimeFormat.06o";
196 "test_input_rinex2_obs_FilterTest1.06o";
198 "test_input_rinex2_obs_FilterTest2.06o";
200 "test_input_rinex2_obs_FilterTest3.06o";
202 "test_input_rinex2_obs_FilterTest4.06o";
205 "test_output_rinex2_obs_TestOutput.06o";
207 "test_output_rinex2_obs_TestOutput2.06o";
209 "test_output_rinex2_obs_TestOutput3.06o";
211 "test_output_rinex2_obs_TestOutput4.06o";
213 "test_output_rinex2_obs_ObsDump.06o";
215 "test_output_rinex2_obs_DataExceptionOutput.06o";
217 "test_output_rinex2_obs_FilterOutput.txt";
228 cout <<
"Running tests for Rinex version 3.x" << endl;
235 "test_input_rinex3_obs_RinexObsFile.15o";
237 "test_input_rinex3_obs_IncompleteHeader.15o";
239 "test_input_rinex3_obs_InvalidLineLength.15o";
241 "test_input_rinex3_obs_InvalidNumPRNWaveFact.15o";
243 "test_input_rinex3_obs_NotObs.15o";
245 "test_input_rinex3_obs_SystemGeosync.15o";
247 "test_input_rinex3_obs_SystemGlonass.15o";
249 "test_input_rinex3_obs_SystemMixed.15o";
251 "test_input_rinex3_obs_SystemTransit.15o";
253 "test_input_rinex3_obs_UnSupVersion.15o";
255 "test_input_rinex3_obs_RinexContData.15o";
258 "test_input_rinex3_obs_BadEpochLine.15o";
260 "test_input_rinex3_obs_BadEpochFlag.15o";
262 "test_input_rinex3_obs_BadLineSize.15o";
264 "test_input_rinex3_obs_InvalidTimeFormat.15o";
267 "test_input_rinex3_obs_FilterTest1.15o";
269 "test_input_rinex3_obs_FilterTest2.15o";
271 "test_input_rinex3_obs_FilterTest3.15o";
273 "test_input_rinex3_obs_FilterTest4.15o";
276 "test_output_rinex3_obs_TestOutput.15o";
278 "test_output_rinex3_obs_TestOutput2.15o";
280 "test_output_rinex3_obs_TestOutput3.15o";
282 "test_output_rinex3_obs_TestOutput4.15o";
284 "test_output_rinex3_obs_ObsDump.15o";
286 "test_output_rinex3_obs_DataExceptionOutput.15o";
288 "test_output_rinex3_obs_FilterOutput.txt";
299 "test_input_rinex3_obs_RinexObsFile.15o";
301 "test_input_rinex2_obs_RinexObsFile.06o";
304 "test_output_rinex3_obs_Rinex2to3Output.06o";
306 "test_output_rinex2_obs_Rinex3to2Output.15o";
325 TUDEF(
"Rinex3ObsStream",
"headerExceptionTest" );
327 string msg_test_desc =
"Rinex3ObsStream, headerExceptionTest";
328 string msg_false_pass =
", threw the wrong number of exceptions.";
329 string msg_fail =
", threw an unexpected exception.";
366 rinex3ObsFile >> rinex3ObsHeader;
375 contdata >> contdatah;
377 out.exceptions( fstream::failbit );
381 out << rinex3ObsHeader;
386 TUFAIL(
"Exception while writing valid RINEX OBS header");
392 TUFAIL(
"No Exception while writing invalid RINEX OBS header");
402 TUFAIL(
"No Exception while writing invalid RINEX OBS header");
412 TUFAIL(
"No Exception while writing invalid RINEX OBS header");
422 TUFAIL(
"No Exception while writing invalid RINEX OBS header");
436 TUFAIL(
"Exception while writing valid RINEX OBS header");
446 TUFAIL(
"Exception while writing valid RINEX OBS header");
456 TUFAIL(
"Exception while writing valid RINEX OBS header");
462 TUFAIL(
"No Exception while writing invalid RINEX OBS header");
476 TUFAIL(
"Exception while writing valid RINEX OBS header");
479 rinex3ObsFile >> rinex3ObsData;
482 while( rinex3ObsFile >> rinex3ObsData )
484 out << rinex3ObsData;
487 while( contdata >> contdatad )
495 TUFAIL( msg_test_desc + msg_fail + e.
what() );
499 TUFAIL( msg_test_desc + msg_fail );
502 return( testFramework.countFails() );
513 bool files_equal =
false;
514 double CompareVersion;
515 string CompareFileProgram;
516 string CompareFileAgency;
521 int num_lines_skip = 2;
523 TestUtil test2(
"Rinex3ObsStream",
"hardCodeTest", __FILE__, __LINE__ );
525 string msg_test_desc =
526 "Rinex3ObsStream, read write test, comparing input file and output file";
527 string msg_fail_equal =
", input and output do not match.";
528 string msg_fail_except =
", threw an unexpected exception.";
538 rinex3ObsFile >> rinex3ObsHeader;
539 out << rinex3ObsHeader;
541 while( rinex3ObsFile >> rinex3ObsData )
543 out << rinex3ObsData;
547 if (rinex3ObsHeader.version == 2.1)
549 CompareVersion = 2.10;
550 CompareFileProgram = (string)
"row";
551 CompareFileAgency = (string)
"Dataflow Processing";
552 CompareDate = (string)
"04/11/2006 23:59:18";
555 else if (rinex3ObsHeader.version == 3.02)
557 CompareVersion = 3.02;
558 CompareFileProgram = (string)
"cnvtToRINEX 2.25.0";
559 CompareFileAgency = (string)
"convertToRINEX OPR";
560 CompareDate = (string)
"23-Jan-15 22:34 UTC";
563 test2.
assert( rinex3ObsHeader.version == CompareVersion,
564 "RinexObs Header version comparison", __LINE__ );
565 test2.
assert( rinex3ObsHeader.fileProgram == CompareFileProgram,
566 "RinexObs Header file program comparison", __LINE__ );
567 test2.
assert( rinex3ObsHeader.fileAgency == CompareFileAgency,
568 "RinexObs Header file agency comparison", __LINE__ );
569 test2.
assert( rinex3ObsHeader.date == CompareDate,
570 "RinexObs Header date comparison", __LINE__ );
573 rinex3ObsHeader.dump(
dump );
576 msg_test_desc + msg_fail_equal,
577 num_lines_skip,
false,
true );
581 test2.
assert(
false, msg_test_desc + msg_fail_except, __LINE__ );
594 TestUtil test3(
"Rinex3ObsStream",
"dataExceptionsTest", __FILE__, __LINE__ );
596 string msg_test_desc =
597 "Rinex3ObsStream, test various gnsstk exception throws, including BadEpochLine and BadEpochFlag";
598 string msg_fail_throw =
599 ", not all gnsstk exceptions were thrown as expected.";
600 string msg_fail_except =
", threw an unexpected exception.";
614 while( BadEpochLine >> BadEpochLined )
616 out << BadEpochLined;
618 while( BadEpochFlag >> BadEpochFlagd )
620 out << BadEpochFlagd;
622 while( BadLineSize >> BadLineSized )
626 while( InvalidTimeFormat >> InvalidTimeFormatd )
628 out << InvalidTimeFormatd;
630 test3.
assert(
true, msg_test_desc + msg_fail_throw, __LINE__ );
634 test3.
assert(
false, msg_test_desc + msg_fail_except, __LINE__ );
647 TUDEF(
"Rinex3Obs",
"filterOperatorsTest");
650 fstream out( dataTestFilterOutput.c_str(), ios::out );
659 out <<
"Reading dataFilterTest2:" << endl;
668 testFramework.changeSourceMethod(
"Rinex3ObsDataOperatorEqualsSimple");
669 testFramework.assert( EqualsSimple( d1, d1 ),
"", __LINE__);
672 testFramework.changeSourceMethod(
"Rinex3ObsDataOperatorLessThanSimple");
673 testFramework.assert( !LessThanSimple( d1, d1 ),
"", __LINE__ );
678 out <<
"Merged Header:" << endl;
681 testFramework.changeSourceMethod(
"Rinex3ObsDataOperatorLessThanFull");
682 testFramework.assert( !LessThanFull( d1, h1, d1, h1, 5 ) ,
"", __LINE__ );
683 testFramework.assert( !LessThanFull( d1, h1, d2, h2, 5 ) ,
"", __LINE__ );
688 testFramework.assert(
false ,
"caught exception", __LINE__ );
690 return testFramework.countFails();
700 TUDEF(
"Rinex3Obs",
"version3ToVersion2Test");
707 inputStream >> ObsHeader;
711 outputStream << ObsHeader;
712 while(inputStream >> ObsData)
714 outputStream << ObsData;
717 testMesg =
"No automatic comparison implemented. If " +
718 dataOutputRinex2ObsFile +
" is not the proper conversion of " +
719 dataInputRinex3ObsFile +
"test has failed. Currently prepareVer2Write() " +
720 "function is BROKEN!";
722 testFramework.assert(
false, testMesg, __LINE__);
724 return testFramework.countFails();
733 TestUtil testFramework(
"Rinex3Obs",
"version2ToVersion3Test", __FILE__, __LINE__ );
741 inputStream >> ObsHeader;
746 outputStream << ObsHeader;
747 while(inputStream >> ObsData)
749 outputStream << ObsData;
752 testMesg =
"No automatic comparison implemented. If " +
753 dataOutputRinex2ObsFile +
" is not the proper conversion of " +
754 dataInputRinex3ObsFile +
"test has failed. Currently only conversion " +
755 "from v.2.11 to v.3.02 is to change version number by hand. This "
756 +
"doesn't produce a valid header, so this functionality is MISSING!";
758 testFramework.
assert(
false, testMesg, __LINE__);
765 TUDEF(
"Rinex3Obs",
"roundTripTest");
776 roh.preserveVerType =
true;
778 while (infile >> rod)
784 string failMsg =
"input and output do not match: " +
785 dataRinexObsFile +
" " + dataTestOutput4;
786 testFramework.assert_files_equal(
787 __LINE__, dataRinexObsFile, dataTestOutput4,
788 failMsg, 0,
false,
true );
792 TUFAIL(
"exception thrown during processing");
795 return testFramework.countFails();
802 TUDEF(
"Rinex3ObsData",
"operator<<");
805 cerr <<
"opening " << dataHeaderTest << endl;
871 rod.auxHeader.valid);
872 TUASSERTE(
size_t, 3, rod.auxHeader.commentList.size());
908 rod.auxHeader.valid);
909 TUASSERTE(
size_t, 1, rod.auxHeader.commentList.size());
949 rod.auxHeader.valid);
950 TUASSERTE(
size_t, 1, rod.auxHeader.commentList.size());
977 ts).convertToCommonTime(),
992 ts).convertToCommonTime(),
999 rod.auxHeader.valid);
1000 TUASSERTE(
size_t, 1, rod.auxHeader.commentList.size());
1034 rod.auxHeader.valid);
1035 TUASSERTE(
size_t, 1, rod.auxHeader.commentList.size());
1068 rod.auxHeader.valid);
1069 TUASSERTE(
size_t, 2, rod.auxHeader.commentList.size());
1105 rod.auxHeader.valid);
1106 TUASSERTE(
size_t, 3, rod.auxHeader.commentList.size());
1110 TUFAIL(
"unexpected exception");
1118 TUDEF(
"Rinex3Obs",
"operator>>");
1119 cout <<
"Running tests for transmit antenna enhancement" << endl;
1123 dataIncompleteHeader = dataInvalidLineLength = dataInvalidNumPRNWaveFact =
1124 dataNotObs = dataSystemGeosync = dataSystemGlonass = dataSystemMixed =
1125 dataSystemTransit = dataUnSupVersion = dataRinexContData =
1126 dataHeaderTest = dataBadEpochLine = dataBadEpochFlag = dataBadLineSize =
1127 dataInvalidTimeFormat = dataFilterTest1 = dataFilterTest2 =
1128 dataFilterTest3 = dataFilterTest4 = dataTestOutput = dataTestOutput2 =
1129 dataTestOutput3 = dataTestOutputObsDump = dataTestOutputDataException =
1130 dataTestFilterOutput = dataInputRinex3ObsFile = dataInputRinex2ObsFile =
1131 dataOutputRinex3ObsFile = dataOutputRinex2ObsFile =
"";
1134 "test_input_rinex3_obs_RinexObsFile_xmitStd.15o";
1136 "test_output_rinex3_obs_TestOutput4_xmitStd.15o";
1137 rv += roundTripTest();
1141 TUASSERTE(
bool,
true,
static_cast<bool>(strm));
1145 TUASSERTE(
bool,
true,
static_cast<bool>(strm));
1155 "test_input_rinex3_obs_RinexObsFile_xmitReg.15o";
1157 "test_output_rinex3_obs_TestOutput4_xmitReg.15o";
1158 rv += roundTripTest();
1160 TUASSERTE(
bool,
true,
static_cast<bool>(strm2));
1162 TUASSERTE(
bool,
true,
static_cast<bool>(strm2));
1174 return testFramework.countFails() + rv;
1204 cout <<
"Total Failures for " << __FILE__ <<
": " << errorTotal << endl;
1206 return( errorTotal );