diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index bac392115b91c812e8b079493ebe85b95ae3a8d2..8126f71f84c5efe5ca2a171483917e179c9b2ffc 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 0000000000000000000000000000000000000000..6f821cba2fa0faa6241ab180c8f846f75699239f
--- /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();
+}