From d1ee6ff22aab56eb982a22f976a382387407961f Mon Sep 17 00:00:00 2001
From: rinkk <karsten.rink@ufz.de>
Date: Tue, 2 Aug 2016 14:41:41 +0200
Subject: [PATCH] added test for csv writer

---
 Tests/FileIO/TestCsvWriter.cpp | 81 ++++++++++++++++++++++++++++++++++
 1 file changed, 81 insertions(+)
 create mode 100644 Tests/FileIO/TestCsvWriter.cpp

diff --git a/Tests/FileIO/TestCsvWriter.cpp b/Tests/FileIO/TestCsvWriter.cpp
new file mode 100644
index 00000000000..8db81e3796e
--- /dev/null
+++ b/Tests/FileIO/TestCsvWriter.cpp
@@ -0,0 +1,81 @@
+/**
+ * \copyright
+ * Copyright (c) 2012-2016, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ *
+ */
+
+#include <cstdio>
+
+#include "gtest/gtest.h"
+
+#include <string>
+#include <vector>
+
+#include "BaseLib/BuildInfo.h"
+#include "Applications/FileIO/CsvInterface.h"
+
+TEST(CsvWriter, WriteReadTest)
+{
+    std::string test_file(BaseLib::BuildInfo::tests_tmp_path + "TestData.csv");
+
+    std::vector<std::string> str_vec {"Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Violet" };
+    std::vector<int> int_vec { 1, 2, 4, 8, 16, 32, 64 };
+    std::vector<double> dbl_vec;
+    std::srand ( static_cast<unsigned>(std::time(nullptr)) );
+    for (std::size_t i=0; i<int_vec.size(); ++i)
+        dbl_vec.push_back(static_cast<double>(std::rand()) / RAND_MAX);
+
+    FileIO::CsvInterface csv;
+    bool added;
+    std::vector<std::string> vec_names { "String Vector", "Int Vector", "Double Vector"};
+    added = csv.addVectorForWriting(vec_names[0], str_vec);
+    ASSERT_EQ(true, added);
+    added = csv.addVectorForWriting(vec_names[1], int_vec);
+    ASSERT_EQ(true, added);
+    added = csv.addVectorForWriting(vec_names[2], dbl_vec);
+    ASSERT_EQ(true, added);
+    int_vec.push_back(128);
+    added = csv.addVectorForWriting(vec_names[1], int_vec);
+    ASSERT_EQ(false, added);
+    ASSERT_EQ(3, csv.getNArrays());
+    csv.addIndexVectorForWriting(str_vec.size());
+    ASSERT_EQ(4, csv.getNArrays());
+    int result = csv.writeToFile(test_file);
+    ASSERT_EQ(1, result);
+
+    std::vector<std::string> str_result;
+    result = FileIO::CsvInterface::readColumn<std::string>(test_file, '\t', str_result, vec_names[0]);
+    ASSERT_EQ(0, result);
+    ASSERT_EQ(str_vec.size(), str_result.size());
+
+    std::vector<int> idx_result;
+    result = FileIO::CsvInterface::readColumn<int>(test_file, '\t', idx_result, "Index");
+    ASSERT_EQ(0, result);
+    ASSERT_EQ(dbl_vec.size(), idx_result.size());
+
+    std::vector<int> int_result;
+    result = FileIO::CsvInterface::readColumn<int>(test_file, '\t', int_result, vec_names[1]);
+    ASSERT_EQ(0, result);
+    // testing for vector length -1 because it had increased previously when testing size requirements
+    ASSERT_EQ(int_vec.size()-1, int_result.size());
+
+    std::vector<double> dbl_result;
+    result = FileIO::CsvInterface::readColumn<double>(test_file, '\t', dbl_result, vec_names[2]);
+    ASSERT_EQ(0, result);
+    ASSERT_EQ(dbl_vec.size(), dbl_result.size());
+
+    for (std::size_t i=0; i<str_vec.size(); ++i)
+    {
+        ASSERT_EQ(str_vec[i], str_result[i]);
+        ASSERT_EQ(int_vec[i], int_result[i]);
+        ASSERT_NEAR(dbl_vec[i], dbl_result[i], 10 * std::numeric_limits<double>::epsilon());
+        ASSERT_EQ(static_cast<int>(i), idx_result[i]);
+    }
+
+    std::remove(test_file.c_str());
+}
+
-- 
GitLab