From d1009c6013b3842e6a37c5ad2faaf4adb39073aa Mon Sep 17 00:00:00 2001
From: PepMS <jmarti@iri.upc.edu>
Date: Mon, 30 Mar 2020 14:01:42 +0200
Subject: [PATCH] [test] added observations test

---
 include/gnss_utils/gnss_utils.h |  1 +
 src/gnss_utils.cpp              | 18 +++++++++++++++++
 test/CMakeLists.txt             |  3 +++
 test/gtest_navigation.cpp       |  2 +-
 test/gtest_observations.cpp     | 34 ++++++++++++++++++++++++++++++---
 5 files changed, 54 insertions(+), 4 deletions(-)

diff --git a/include/gnss_utils/gnss_utils.h b/include/gnss_utils/gnss_utils.h
index ce4304f..a16976a 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 6417b51..49f9ec4 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 dcf7deb..0b11665 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 4e4e1db..5170cf1 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 80db0f1..66a25f0 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();
-- 
GitLab