aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2022-03-19 13:21:54 +0100
committerHampusM <hampus@hampusmat.com>2022-06-13 17:56:56 +0200
commit55c93fe609888be73677317978959040cf35b2ff (patch)
tree41ee53961eb5667136432b69773ef7acf3ad8259 /test
parent020303df1410d10546f53d0bfee4f48797d4f067 (diff)
refactor: implement matrix iterator
Diffstat (limited to 'test')
-rw-r--r--test/CMakeLists.txt45
-rw-r--r--test/main.cpp2
-rw-r--r--test/string_matrix.test.cpp53
3 files changed, 100 insertions, 0 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
new file mode 100644
index 0000000..ac84f42
--- /dev/null
+++ b/test/CMakeLists.txt
@@ -0,0 +1,45 @@
+file(GLOB SOURCES
+ main.cpp
+ string_matrix.test.cpp
+ ${CMAKE_SOURCE_DIR}/src/engine/data/vector2.cpp
+ ${CMAKE_SOURCE_DIR}/src/engine/data/bounds.cpp
+ ${CMAKE_SOURCE_DIR}/src/engine/graphics/string_matrix.cpp
+)
+
+add_executable(tests ${SOURCES})
+
+target_compile_features(tests PUBLIC cxx_std_20)
+
+target_compile_options(
+ tests
+ PRIVATE
+ -Wall -Wextra -Wpedantic -Wshadow
+ -Wold-style-cast -Wcast-align -Wno-unused
+ -Wconversion -Wcast-qual -Wctor-dtor-privacy
+ -Wdisabled-optimization -Wformat=2 -Winit-self
+ -Wmissing-declarations -Wmissing-include-dirs
+ -Woverloaded-virtual -Wredundant-decls
+ -Wsign-conversion -Wsign-promo
+ -Wstrict-overflow=5 -Wswitch-default
+ -Wundef -Werror
+ -pedantic -fsanitize=address -fno-exceptions
+)
+
+if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+ target_compile_options(
+ tests
+ PRIVATE
+ -Wlogical-op -Wnoexcept -Wstrict-null-sentinel
+ )
+endif()
+
+target_include_directories(
+ tests
+ PRIVATE
+ "${CMAKE_SOURCE_DIR}/src"
+ "${CMAKE_SOURCE_DIR}/test"
+)
+
+target_link_libraries(tests GSL doctest)
+
+target_link_options(tests PRIVATE -fsanitize=address)
diff --git a/test/main.cpp b/test/main.cpp
new file mode 100644
index 0000000..0a3f254
--- /dev/null
+++ b/test/main.cpp
@@ -0,0 +1,2 @@
+#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
+#include <doctest/doctest.h>
diff --git a/test/string_matrix.test.cpp b/test/string_matrix.test.cpp
new file mode 100644
index 0000000..522a274
--- /dev/null
+++ b/test/string_matrix.test.cpp
@@ -0,0 +1,53 @@
+#include "engine/graphics/string_matrix.hpp"
+#include "engine/data/bounds.hpp"
+
+#include <doctest/doctest.h>
+#include <type_traits>
+
+constexpr uint32_t MATRIX_WIDTH = 76;
+constexpr uint32_t MATRIX_HEIGHT = 31;
+
+TEST_CASE("String matrix")
+{
+ auto string_matrix =
+ StringMatrix(Bounds({.width = MATRIX_WIDTH, .height = MATRIX_HEIGHT}));
+
+ SUBCASE("Can set & get elements")
+ {
+ // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
+ const auto position = Vector2({.x = 56, .y = 20});
+
+ string_matrix.set(position, "#");
+
+ CHECK(string_matrix.get(position) == "#");
+ }
+
+ SUBCASE("Can iterate")
+ {
+ CHECK(std::is_same_v<decltype(string_matrix.begin()),
+ MatrixIterator<std::string_view>>);
+
+ CHECK(std::is_same_v<decltype(string_matrix.end()),
+ MatrixIterator<std::string_view>>);
+
+ uint32_t row_iter_cnt = 0;
+
+ for (auto row : string_matrix)
+ {
+ row_iter_cnt++;
+
+ CHECK(std::is_same_v<decltype(row), MatrixRow<std::string_view>>);
+
+ uint32_t col_iter_cnt = 0;
+
+ for (auto &col : row)
+ {
+ col_iter_cnt++;
+ }
+
+ CHECK(col_iter_cnt == MATRIX_WIDTH);
+ }
+
+ CHECK(row_iter_cnt == MATRIX_HEIGHT);
+ }
+}