/** * \copyright * Copyright (c) 2012-2020, 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 #include "gtest/gtest.h" #include #include #include "InfoLib/TestInfo.h" #include "Applications/FileIO/CsvInterface.h" TEST(CsvWriter, WriteReadTest) { std::string test_file(TestInfoLib::TestInfo::tests_tmp_path + "TestData.csv"); std::vector str_vec {"Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Violet" }; std::vector int_vec { 1, 2, 4, 8, 16, 32, 64 }; std::vector dbl_vec; std::srand ( static_cast(std::time(nullptr)) ); for (std::size_t i = 0; i < int_vec.size(); ++i) { dbl_vec.push_back(static_cast(std::rand()) / RAND_MAX); } FileIO::CsvInterface csv; bool added; std::vector vec_names { "String Vector", "Int Vector", "Double Vector"}; added = csv.addVectorForWriting(vec_names[0], str_vec); ASSERT_TRUE(added); added = csv.addVectorForWriting(vec_names[1], int_vec); ASSERT_TRUE(added); added = csv.addVectorForWriting(vec_names[2], dbl_vec); ASSERT_TRUE(added); int_vec.push_back(128); added = csv.addVectorForWriting(vec_names[1], int_vec); ASSERT_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 str_result; result = FileIO::CsvInterface::readColumn(test_file, '\t', str_result, vec_names[0]); ASSERT_EQ(0, result); ASSERT_EQ(str_vec.size(), str_result.size()); std::vector idx_result; result = FileIO::CsvInterface::readColumn(test_file, '\t', idx_result, "Index"); ASSERT_EQ(0, result); ASSERT_EQ(dbl_vec.size(), idx_result.size()); std::vector int_result; result = FileIO::CsvInterface::readColumn(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 dbl_result; result = FileIO::CsvInterface::readColumn(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::epsilon()); ASSERT_EQ(static_cast(i), idx_result[i]); } std::remove(test_file.c_str()); }