aboutsummaryrefslogtreecommitdiff
path: root/test/cell_helper_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/cell_helper_test.cpp')
-rw-r--r--test/cell_helper_test.cpp281
1 files changed, 194 insertions, 87 deletions
diff --git a/test/cell_helper_test.cpp b/test/cell_helper_test.cpp
index b570aba..c9618fd 100644
--- a/test/cell_helper_test.cpp
+++ b/test/cell_helper_test.cpp
@@ -3,97 +3,204 @@
#include "mocks/matrix.hpp"
-#include <gtest/gtest.h>
+#include <catch2/catch_test_macros.hpp>
+#include <catch2/matchers/catch_matchers_vector.hpp>
+#include <trompeloeil.hpp>
#include <list>
#include <memory>
+#include <vector>
-class CellHelperTest : public testing::Test
+// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
+TEST_CASE("CellHelper")
{
-protected:
-};
+ SECTION("can identify dying cell")
+ {
+ auto mock_matrix = MockMatrix<char>();
+
+ auto cell_helper = CellHelper<char>(mock_matrix);
+
+ constexpr auto MATRIX_ROWS = 8U;
+ constexpr auto MATRIX_COLUMNS = 6U;
+
+ const auto cell_pos = Vector2({.x = 3, .y = 5});
+
+ const auto cell_pos_up = cell_pos + Vector2::up();
+ const auto cell_pos_down = cell_pos + Vector2::down();
+ const auto cell_pos_left = cell_pos + Vector2::left();
+ const auto cell_pos_right = cell_pos + Vector2::right();
+
+ const auto cell_pos_up_left = cell_pos + Vector2::up() + Vector2::left();
+ const auto cell_pos_up_right = cell_pos + Vector2::up() + Vector2::right();
+
+ const auto cell_pos_down_left = cell_pos + Vector2::down() + Vector2::left();
+ const auto cell_pos_down_right = cell_pos + Vector2::down() + Vector2::right();
+
+ // NOLINTNEXTLINE(readability-identifier-length)
+ REQUIRE_CALL(mock_matrix, get_row_cnt()).RETURN(MATRIX_ROWS).TIMES(AT_LEAST(1));
+
+ REQUIRE_CALL(mock_matrix, get_column_cnt())
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(MATRIX_COLUMNS)
+ .TIMES(AT_LEAST(1));
+
+ auto matrix_call_seq = trompeloeil::sequence();
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_up))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN('x')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_down))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_left))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN('x')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_right))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN('x')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_up_left))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_up_right))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN('x')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_down_left))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_down_right))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE(cell_helper.is_cell_dying(cell_pos) == true);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_up))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
-TEST_F(CellHelperTest, IsCellDying)
-{
- const auto mock_matrix = MockMatrix<char>();
-
- const auto rows = 8U;
- const auto columns = 6U;
-
- const auto position = Vector2({.x = 3, .y = 5});
-
- EXPECT_CALL(mock_matrix, get_row_cnt()).WillRepeatedly(testing::Return(rows));
-
- EXPECT_CALL(mock_matrix, get_column_cnt()).WillRepeatedly(testing::Return(columns));
-
- EXPECT_CALL(mock_matrix, get(position + Vector2::up()))
- .WillOnce(testing::Return('x'))
- .WillOnce(testing::Return(' '))
- .WillOnce(testing::Return(' '));
-
- EXPECT_CALL(mock_matrix, get(position + Vector2::down()))
- .WillRepeatedly(testing::Return(' '));
-
- EXPECT_CALL(mock_matrix, get(position + Vector2::left()))
- .WillOnce(testing::Return('x'))
- .WillOnce(testing::Return('x'))
- .WillOnce(testing::Return(' '));
-
- EXPECT_CALL(mock_matrix, get(position + Vector2::right()))
- .WillOnce(testing::Return('x'))
- .WillOnce(testing::Return(' '))
- .WillOnce(testing::Return(' '));
-
- EXPECT_CALL(mock_matrix, get(position + Vector2::up() + Vector2::left()))
- .WillRepeatedly(testing::Return(' '));
-
- EXPECT_CALL(mock_matrix, get(position + Vector2::up() + Vector2::right()))
- .WillRepeatedly(testing::Return('x'));
-
- EXPECT_CALL(mock_matrix, get(position + Vector2::down() + Vector2::left()))
- .WillRepeatedly(testing::Return(' '));
-
- EXPECT_CALL(mock_matrix, get(position + Vector2::down() + Vector2::right()))
- .WillRepeatedly(testing::Return(' '));
-
- auto cell_helper = CellHelper<char>(mock_matrix);
-
- EXPECT_EQ(cell_helper.is_cell_dying(position), true);
-
- EXPECT_EQ(cell_helper.is_cell_dying(position), false);
-
- EXPECT_EQ(cell_helper.is_cell_dying(position), true);
-}
-
-TEST_F(CellHelperTest, FindNeighbours)
-{
- const auto mock_matrix = MockMatrix<char>();
-
- const auto rows = 8U;
- const auto columns = 6U;
-
- const auto position = Vector2({.x = 3, .y = 5});
-
- EXPECT_CALL(mock_matrix, get_row_cnt()).WillOnce(testing::Return(rows));
-
- EXPECT_CALL(mock_matrix, get_column_cnt()).WillOnce(testing::Return(columns));
-
- auto cell_helper = CellHelper<char>(mock_matrix);
-
- const auto living_neighbour_cells = cell_helper.find_neighbours(position);
-
- EXPECT_EQ(living_neighbour_cells.size(), 8U);
-
- EXPECT_THAT(
- living_neighbour_cells,
- testing::ContainerEq(std::list<Vector2>(
- {position + Vector2::up(),
- position + Vector2::down(),
- position + Vector2::left(),
- position + Vector2::right(),
- position + Vector2::up() + Vector2::left(),
- position + Vector2::up() + Vector2::right(),
- position + Vector2::down() + Vector2::left(),
- position + Vector2::down() + Vector2::right()})));
+ REQUIRE_CALL(mock_matrix, get(cell_pos_down))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN('x')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_left))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_right))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_up_left))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_up_right))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_down_left))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN('x')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_down_right))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE(cell_helper.is_cell_dying(cell_pos) == false);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_up))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_down))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_left))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN('x')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_right))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_up_left))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_up_right))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_down_left))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE_CALL(mock_matrix, get(cell_pos_down_right))
+ // NOLINTNEXTLINE(readability-identifier-length)
+ .RETURN(' ')
+ .IN_SEQUENCE(matrix_call_seq);
+
+ REQUIRE(cell_helper.is_cell_dying(cell_pos) == true);
+ }
+
+ SECTION("can find neighbours")
+ {
+ auto mock_matrix = MockMatrix<char>();
+
+ auto cell_helper = CellHelper<char>(mock_matrix);
+
+ constexpr auto MATRIX_ROWS = 12U;
+ constexpr auto MATRIX_COLUMNS = 9U;
+
+ const auto cell_pos = Vector2({.x = 8, .y = 3});
+
+ // NOLINTNEXTLINE(readability-identifier-length)
+ REQUIRE_CALL(mock_matrix, get_row_cnt()).RETURN(MATRIX_ROWS);
+
+ // NOLINTNEXTLINE(readability-identifier-length)
+ REQUIRE_CALL(mock_matrix, get_column_cnt()).RETURN(MATRIX_COLUMNS);
+
+ const auto living_neighbour_cells = cell_helper.find_neighbours(cell_pos);
+
+ REQUIRE(living_neighbour_cells.size() == 5U);
+
+ REQUIRE_THAT(
+ living_neighbour_cells,
+ Catch::Matchers::Contains(std::vector<Vector2>(
+ {cell_pos + Vector2::up(),
+ cell_pos + Vector2::down(),
+ cell_pos + Vector2::left(),
+ cell_pos + Vector2::up() + Vector2::left(),
+ cell_pos + Vector2::down() + Vector2::left()})));
+ }
}
-