Untitled

 avatar
unknown
c_cpp
2 years ago
5.8 kB
10
Indexable
/////////////////////////////////////////////////////////////////////////////////////////////
//                                Test Cases //
/////////////////////////////////////////////////////////////////////////////////////////////

TEST_CASE("Board initialization", "[board_init]") {
  // SECTION("Can use sections") {}
  // clang-format off
  DiskType solution[kBoardHeight][kBoardWidth] = { 
    {DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty}, 
    {DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty}, 
    {DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty}, 
    {DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty}, 
    {DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty}, 
    {DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty, DiskType::kEmpty} 
  };
  // clang-format on
  Board student;  // NOLINT
  InitBoard(student);
  REQUIRE(AreEqual(solution, student.board));
}

TEST_CASE("Drop Disk", "[drop_disk]") {
  // SECTION("Can use sections") {}
  // clang-format off
  // clang-format on
  Board student;  // NOLINT
  InitBoard(student);
  REQUIRE_THROWS_AS(DropDiskToBoard(student, DiskType::kEmpty, -1),
                    std::runtime_error);

  DropDiskToBoard(student, DiskType::kPlayer1, 0);
  DropDiskToBoard(student, DiskType::kPlayer1, 0);
  DropDiskToBoard(student, DiskType::kPlayer1, 0);
  DropDiskToBoard(student, DiskType::kPlayer1, 0);
  DropDiskToBoard(student, DiskType::kPlayer1, 0);
  DropDiskToBoard(student, DiskType::kPlayer1, 0);

  REQUIRE_THROWS_AS(DropDiskToBoard(student, DiskType::kPlayer1, 0),
                    std::runtime_error);
}

TEST_CASE("Search For Winner", "[search_for_winner]") {
  Board student;
  InitBoard(student);

  REQUIRE_FALSE(SearchForWinner(
      student, DiskType::kPlayer1, WinningDirection::kHorizontal));
  REQUIRE_FALSE(SearchForWinner(
      student, DiskType::kPlayer1, WinningDirection::kVertical));
  REQUIRE_FALSE(SearchForWinner(
      student, DiskType::kPlayer1, WinningDirection::kLeftDiag));
  REQUIRE_FALSE(SearchForWinner(
      student, DiskType::kPlayer1, WinningDirection::kRightDiag));

  REQUIRE_FALSE(SearchForWinner(
      student, DiskType::kPlayer2, WinningDirection::kHorizontal));
  REQUIRE_FALSE(SearchForWinner(
      student, DiskType::kPlayer2, WinningDirection::kVertical));
  REQUIRE_FALSE(SearchForWinner(
      student, DiskType::kPlayer2, WinningDirection::kLeftDiag));
  REQUIRE_FALSE(SearchForWinner(
      student, DiskType::kPlayer2, WinningDirection::kRightDiag));

  DropDiskToBoard(student, DiskType::kPlayer1, 0);
  DropDiskToBoard(student, DiskType::kPlayer2, 0);
  DropDiskToBoard(student, DiskType::kPlayer1, 0);
  DropDiskToBoard(student, DiskType::kPlayer2, 0);

  DropDiskToBoard(student, DiskType::kPlayer2, 1);
  DropDiskToBoard(student, DiskType::kPlayer1, 1);
  DropDiskToBoard(student, DiskType::kPlayer2, 1);
  DropDiskToBoard(student, DiskType::kPlayer1, 1);

  DropDiskToBoard(student, DiskType::kPlayer1, 2);
  DropDiskToBoard(student, DiskType::kPlayer2, 2);
  DropDiskToBoard(student, DiskType::kPlayer1, 2);
  DropDiskToBoard(student, DiskType::kPlayer2, 2);

  DropDiskToBoard(student, DiskType::kPlayer2, 3);
  DropDiskToBoard(student, DiskType::kPlayer1, 3);
  DropDiskToBoard(student, DiskType::kPlayer2, 3);
  DropDiskToBoard(student, DiskType::kPlayer1, 3);

  REQUIRE_FALSE(SearchForWinner(
      student, DiskType::kPlayer1, WinningDirection::kHorizontal));
  REQUIRE_FALSE(SearchForWinner(
      student, DiskType::kPlayer1, WinningDirection::kVertical));
  REQUIRE_FALSE(SearchForWinner(
      student, DiskType::kPlayer1, WinningDirection::kLeftDiag));
  REQUIRE(SearchForWinner(
      student, DiskType::kPlayer1, WinningDirection::kRightDiag));
  REQUIRE(CheckForWinner(student, DiskType::kPlayer1));

  REQUIRE_FALSE(SearchForWinner(
      student, DiskType::kPlayer2, WinningDirection::kHorizontal));
  REQUIRE_FALSE(SearchForWinner(
      student, DiskType::kPlayer2, WinningDirection::kVertical));
  REQUIRE(SearchForWinner(
      student, DiskType::kPlayer2, WinningDirection::kLeftDiag));
  REQUIRE_FALSE(SearchForWinner(
      student, DiskType::kPlayer2, WinningDirection::kRightDiag));
  REQUIRE(CheckForWinner(student, DiskType::kPlayer2));

  // Board student2;
  // InitBoard(student2);

  // DropDiskToBoard(student, DiskType::kPlayer2, 3);

  // REQUIRE(SearchForWinner())
}

TEST_CASE("Board Location In Bounds", "[board_location_in_bounds]") {
  REQUIRE_FALSE(BoardLocationInBounds(-1, 9));
  REQUIRE(BoardLocationInBounds(2, 2));
}

TEST_CASE("Check For Winner", "[check_for_winner]") {
  Board student;
  InitBoard(student);

  REQUIRE_FALSE(CheckForWinner(student, DiskType::kPlayer1));
  REQUIRE_FALSE(CheckForWinner(student, DiskType::kPlayer2));

  DropDiskToBoard(student, DiskType::kPlayer1, 0);
  DropDiskToBoard(student, DiskType::kPlayer1, 0);
  DropDiskToBoard(student, DiskType::kPlayer1, 0);
  DropDiskToBoard(student, DiskType::kPlayer1, 0);

  DropDiskToBoard(student, DiskType::kPlayer2, 1);
  DropDiskToBoard(student, DiskType::kPlayer2, 1);
  DropDiskToBoard(student, DiskType::kPlayer2, 1);
  DropDiskToBoard(student, DiskType::kPlayer2, 1);

  REQUIRE(CheckForWinner(student, DiskType::kPlayer1));
  REQUIRE(CheckForWinner(student, DiskType::kPlayer2));
}

/////////////////////////////////////////////////////////////////////////////////////////////
Editor is loading...