From 75ddce7896484b020152bdd30a7b89f809dcf598 Mon Sep 17 00:00:00 2001 From: Timo Koch <timo.koch@iws.uni-stuttgart.de> Date: Thu, 3 Dec 2020 13:56:04 +0100 Subject: [PATCH] [test][common] Add unit test for string utilities --- test/common/CMakeLists.txt | 1 + test/common/stringutilities/CMakeLists.txt | 2 + .../stringutilities/test_stringutilities.cc | 58 +++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 test/common/stringutilities/CMakeLists.txt create mode 100644 test/common/stringutilities/test_stringutilities.cc diff --git a/test/common/CMakeLists.txt b/test/common/CMakeLists.txt index 5532e56dbc..aa5c941f74 100644 --- a/test/common/CMakeLists.txt +++ b/test/common/CMakeLists.txt @@ -4,6 +4,7 @@ add_subdirectory(math) add_subdirectory(parameters) add_subdirectory(propertysystem) add_subdirectory(spline) +add_subdirectory(stringutilities) add_subdirectory(timeloop) add_subdirectory(typetraits) diff --git a/test/common/stringutilities/CMakeLists.txt b/test/common/stringutilities/CMakeLists.txt new file mode 100644 index 0000000000..4d18231943 --- /dev/null +++ b/test/common/stringutilities/CMakeLists.txt @@ -0,0 +1,2 @@ +dumux_add_test(SOURCES test_stringutilities.cc + LABELS unit) diff --git a/test/common/stringutilities/test_stringutilities.cc b/test/common/stringutilities/test_stringutilities.cc new file mode 100644 index 0000000000..515fe02edd --- /dev/null +++ b/test/common/stringutilities/test_stringutilities.cc @@ -0,0 +1,58 @@ +#include <config.h> + +#include <iostream> +#include <stdexcept> + +#include <string> +#include <dumux/common/stringutilities.hh> + +int main(int argc, char* argv[]) try +{ + const auto checkTokens = [](const std::string& name, const auto& tokens, const std::vector<std::string>& ref) + { + if (tokens.size() != ref.size()) + throw std::runtime_error(name + "Wrong number of tokens!"); + + for (int i = 0; i < ref.size(); ++i) + if (tokens[i] != ref[i]) + throw std::runtime_error(name + "Wrong token! Expected: '" + ref[i] + "' got '" + std::string(tokens[i]) + "'"); + + std::cout << name << "passed" << std::endl; + }; + + std::string str; + + // tokenzie + std::cout << "------------\nDumux::tokenize\n---------------\n"; + + str = "bla&foo&bar"; + checkTokens("Test 1: ", Dumux::tokenize(str, "&"), {"bla", "foo", "bar"}); + + str = "&1&"; + checkTokens("Test 2: ", Dumux::tokenize(str, "&"), {"1"}); + + str = "&&&1&"; + checkTokens("Test 3: ", Dumux::tokenize(str, "&"), {"1"}); + + str = "&&1&2&&3&"; + checkTokens("Test 4: ", Dumux::tokenize(str, "&"), {"1", "2", "3"}); + + str = " a b "; + checkTokens("Test 5: ", Dumux::tokenize(str, " "), {"a", "b"}); + + str = " a b c"; + checkTokens("Test 6: ", Dumux::tokenize(str, " "), {"a", "b", "c"}); + + str = "ababababab"; + checkTokens("Test 7: ", Dumux::tokenize(str, "ab"), {}); + + str = "| hello | world |\n\n"; + checkTokens("Test 8: ", Dumux::tokenize(str, "| \n"), {"hello", "world"}); + + return 0; +} +catch (const std::exception& e) +{ + std::cout << e.what(); + return 1; +} -- GitLab