diff --git a/include/gnss_utils/gnss_utils.h b/include/gnss_utils/gnss_utils.h index ce4304f2ac277dbf2024fb20a1a18775ab75904c..a16976acdec9a321d0b47fa1f4c647fab896940b 100644 --- a/include/gnss_utils/gnss_utils.h +++ b/include/gnss_utils/gnss_utils.h @@ -97,6 +97,7 @@ bool equalArray(const T* array1, const T* array2, const int& size1, const int& s } bool equalTime(const gtime_t& time1, const gtime_t& time2); bool equalObservations(const obsd_t& obs1, const obsd_t& obs2); +bool equalObservations(const obs_t& obs1, const obs_t& obs2); } // namespace GNSSUtils diff --git a/src/gnss_utils.cpp b/src/gnss_utils.cpp index 6417b51cda0fbbc3aef3535496bed5020f23c4a0..49f9ec44959b2d86f75d37708654742adbdc1ed9 100644 --- a/src/gnss_utils.cpp +++ b/src/gnss_utils.cpp @@ -485,4 +485,22 @@ bool equalObservations(const obsd_t& obs1, const obsd_t& obs2) return true; } +bool equalObservations(const obs_t& obs1, const obs_t& obs2) +{ + if (obs1.n != obs2.n) + return false; + if (obs1.nmax != obs2.nmax) + return false; + if (obs1.flag != obs2.flag) + return false; + if (obs1.rcvcount != obs2.rcvcount) + return false; + if (obs1.tmcount != obs2.tmcount) + return false; + if (!equalObservations(*(obs1.data), *(obs2.data))) + return false; + + return true; +} + } // namespace GNSSUtils diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index dcf7deb1c88398bfe18e60e9499ebdfdc152fd58..0b11665962c597a47fc59d32653ad63c8bfddbec 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -14,4 +14,7 @@ include_directories(${GTEST_INCLUDE_DIRS}) # Transformations test gnss_utils_add_gtest(gtest_transformations gtest_transformations.cpp) +gnss_utils_add_gtest(gtest_observations gtest_observations.cpp) + target_link_libraries(gtest_transformations ${PROJECT_NAME}) +target_link_libraries(gtest_observations ${PROJECT_NAME}) diff --git a/test/gtest_navigation.cpp b/test/gtest_navigation.cpp index 4e4e1db7c0d317720070d5f5d5a56b936646ef24..5170cf11310248899fd967b3b870f974a6368b2f 100644 --- a/test/gtest_navigation.cpp +++ b/test/gtest_navigation.cpp @@ -3,7 +3,7 @@ TEST(NavigationTests, Whatever) { - + } int main(int argc, char **argv) diff --git a/test/gtest_observations.cpp b/test/gtest_observations.cpp index 80db0f1db9fd9587f4f069a507af885a1c7fb633..66a25f033f294078af970193e274c7817a02d740 100644 --- a/test/gtest_observations.cpp +++ b/test/gtest_observations.cpp @@ -1,13 +1,41 @@ #include "gtest/utils_gtest.h" #include "gnss_utils/gnss_utils.h" +#include "gnss_utils/observations.h" + +using namespace GNSSUtils; TEST(ObservationsTest, LoadFromRinex) { - - + gtime_t t_start{ 0, 0 }; // no limit + gtime_t t_end{ 0, 0 }; // no limit + double dt = 0.0; // no limit + const char* opt = "-SYS=G"; // only GPS | GPS+GAL: "-SYS=G,L" | ALL: "" + + const std::string& rnx_file = "../src/examples/raw_201805171357.obs"; + // GNSSUtils utilities + Observations observations; + + observations.loadFromRinex(rnx_file.c_str(), t_start, t_end, dt, opt); + + // RTKLIB utilities + obs_t obs; + obs.data = (obsd_t*)malloc(sizeof(obsd_t) * MAXSAT); + obs.n = 0; + obs.nmax = MAXSAT; + int stat = readrnxt(rnx_file.c_str(), 1, t_start, t_end, dt, opt, &obs, NULL, NULL); + + ASSERT_EQ(stat, 1); + + // Comparison + ASSERT_TRUE(obs.n == observations.getObservations().size()); + + for (int ii = 0; ii < obs.n; ++ii) + { + ASSERT_TRUE(equalObservations(obs.data[ii], observations.getObservations()[ii])); + } } -int main(int argc, char **argv) +int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS();