Просмотр исходного кода

Added STLUtils class

- added STLUtils class to provide basic additional STL
functionality
- added tests for STLUtils class
patrick 4 лет назад
Родитель
Сommit
28d0d4e24f
3 измененных файлов с 86 добавлено и 2 удалено
  1. 4 2
      CMakeLists.txt
  2. 29 0
      source/utils/STLUtils.hpp
  3. 53 0
      test/cases/utils/STLUtilsTest.cpp

+ 4 - 2
CMakeLists.txt

@@ -54,7 +54,8 @@ set(SOURCE_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/source/io/File.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/exception/FileOperationException.hpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/io/FilePathSeparatorMatch.hpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/io/FilePathSeparator.hpp)
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/io/FilePathSeparator.hpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/utils/STLUtils.hpp)
 
 set(TEST_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/boxing/IntegerTest.cpp
@@ -65,7 +66,8 @@ set(TEST_FILES
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/time/DateTest.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/io/FileTest.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/test/TestHelper.hpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/base/ClassTest.cpp)
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/base/ClassTest.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/utils/STLUtilsTest.cpp)
 
 ##########################################################
 # Build

+ 29 - 0
source/utils/STLUtils.hpp

@@ -0,0 +1,29 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-08-17
+ * Changed:         2020-08-17
+ *
+ * */
+
+#ifndef STL_UTILS_HPP
+#define STL_UTILS_HPP
+
+#include <algorithm>
+
+namespace ls_std {
+  template<class container, class dataType>
+  class STLUtils {
+    public:
+
+      STLUtils() = default;
+      ~STLUtils() = default;
+
+      static bool contains(container _container, const dataType& _value) {
+        return std::find(_container.begin(), _container.end(), _value) != _container.end();
+      }
+  };
+}
+
+#endif

+ 53 - 0
test/cases/utils/STLUtilsTest.cpp

@@ -0,0 +1,53 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-08-17
+ * Changed:         2020-08-17
+ *
+ * */
+
+#include <gtest/gtest.h>
+#include "../../../source/utils/STLUtils.hpp"
+#include <vector>
+#include <list>
+#include <string>
+
+namespace {
+  class STLUtilsTest : public ::testing::Test {
+    protected:
+
+      STLUtilsTest() = default;
+      ~STLUtilsTest() override = default;
+
+      void SetUp() override {}
+      void TearDown() override {}
+  };
+
+  TEST_F(STLUtilsTest, contains)
+  {
+    std::vector<int> values {1, 13, 7, 8};
+    std::list<std::string> names {"Tim", "Alex", "Nadine"};
+
+    ASSERT_TRUE((ls_std::STLUtils<std::vector<int>, int>::contains(values, 1)));
+    ASSERT_TRUE((ls_std::STLUtils<std::vector<int>, int>::contains(values, 13)));
+    ASSERT_TRUE((ls_std::STLUtils<std::vector<int>, int>::contains(values, 7)));
+    ASSERT_TRUE((ls_std::STLUtils<std::vector<int>, int>::contains(values, 8)));
+
+    ASSERT_TRUE((ls_std::STLUtils<std::list<std::string>, std::string>::contains(names, "Tim")));
+    ASSERT_TRUE((ls_std::STLUtils<std::list<std::string>, std::string>::contains(names, "Alex")));
+    ASSERT_TRUE((ls_std::STLUtils<std::list<std::string>, std::string>::contains(names, "Nadine")));
+  }
+
+  TEST_F(STLUtilsTest, containsNegative)
+  {
+    std::vector<int> values{1, 13, 7, 8};
+    std::list<std::string> names{"Tim", "Alex", "Nadine"};
+
+    ASSERT_FALSE((ls_std::STLUtils<std::vector<int>, int>::contains(values, 55)));
+    ASSERT_FALSE((ls_std::STLUtils<std::vector<int>, int>::contains(values, 9)));
+
+    ASSERT_FALSE((ls_std::STLUtils<std::list<std::string>, std::string>::contains(names, "Lena")));
+    ASSERT_FALSE((ls_std::STLUtils<std::list<std::string>, std::string>::contains(names, "Mirco")));
+  }
+}