From cb64360677c877e4b37c3d0ca72010040acb4b0a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Joaquim=20Casals=20Bu=C3=B1uel?= <jcasals@iri.upc.edu>
Date: Tue, 29 Jan 2019 16:16:36 +0100
Subject: [PATCH] Added gtest_converter.cpp

---
 test/CMakeLists.txt      |  4 ++++
 test/gtest_converter.cpp | 50 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 54 insertions(+)
 create mode 100644 test/gtest_converter.cpp

diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index bac392115..8126f71f8 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -52,6 +52,10 @@ target_link_libraries(gtest_capture_base ${PROJECT_NAME})
 wolf_add_gtest(gtest_constraint_autodiff gtest_constraint_autodiff.cpp)
 target_link_libraries(gtest_constraint_autodiff ${PROJECT_NAME})
 
+# Converter from String to various types used by the parameters server
+wolf_add_gtest(gtest_converter gtest_converter.cpp)
+target_link_libraries(gtest_converter ${PROJECT_NAME})
+
 # FeatureBase classes test
 wolf_add_gtest(gtest_eigen_predicates gtest_eigen_predicates.cpp)
 target_link_libraries(gtest_eigen_predicates ${PROJECT_NAME})
diff --git a/test/gtest_converter.cpp b/test/gtest_converter.cpp
new file mode 100644
index 000000000..6f821cba2
--- /dev/null
+++ b/test/gtest_converter.cpp
@@ -0,0 +1,50 @@
+#include "utils_gtest.h"
+#include "base/converter.h"
+
+using namespace std;
+using namespace wolf;
+
+TEST(Converter, ParseToVector)
+{
+    string v1 = "[3,4,5,6,7,8,9,10,11]";
+    vector<int> v = converter<vector<int>>::convert(v1);
+    ASSERT_EQ(v.size(),9);
+    ASSERT_EQ(v[0],3);
+    ASSERT_EQ(v[1],4);
+    ASSERT_EQ(v[2],5);
+    ASSERT_EQ(v[3],6);
+    ASSERT_EQ(v[4],7);
+    ASSERT_EQ(v[5],8);
+    ASSERT_EQ(v[6],9);
+    ASSERT_EQ(v[7],10);
+    ASSERT_EQ(v[8],11);
+    vector<string> vs {"a","b","c"};
+    ASSERT_EQ(converter<string>::convert(vs), "[a,b,c]");
+
+}
+TEST(Converter, ParseToEigenMatrix)
+{
+    string v1 = "[[3,3],3,4,5,6,7,8,9,10,11]";
+    auto v = Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic, 3, 5, 5>();
+    EXPECT_NO_THROW(([=, &v]{v = converter<Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic, 3, 5, 5>>::convert(v1);}()));
+    EXPECT_EQ(v.size(),9);
+    string v2 = "[[3,3],3,4,5,6,7,8,9,10,11,12]";
+    EXPECT_THROW(([=, &v]{v = converter<Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic, 3, 5, 5>>::convert(v2);}()), std::runtime_error);
+    string v3 = "[[3],3,4,5,6,7,8,9,10,11]";
+    EXPECT_THROW(([=, &v]{v = converter<Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic, 3, 5, 5>>::convert(v3);}()), std::runtime_error);
+}
+TEST(Converter, ParseToMap)
+{
+    string str = "[{x:1},{y:[1,23,3]},{z:3}]";
+    EXPECT_THROW(([=]{auto a = converter<std::map<std::string, double>>::convert(str);}()), std::invalid_argument);
+    string str2 = "[{x:[1]},{y:[1,23,3]},{z:[3]}]";
+    EXPECT_NO_THROW(([=]{auto a = converter<std::map<std::string, std::vector<int>>>::convert(str2);}()));
+    map<string, vector<int>> m = {{"x",vector<int>{1,2}}, {"y",vector<int>{}}, {"z",vector<int>{3}}};
+    ASSERT_EQ(converter<string>::convert(m), "[{x:[1,2]},{y:[]},{z:[3]}]");
+}
+
+int main(int argc, char **argv)
+{
+  testing::InitGoogleTest(&argc, argv);
+  return RUN_ALL_TESTS();
+}
-- 
GitLab