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