class TestGameBoard(unittest.TestCase):
    def setUp(self):
        self.board_width = 3
        self.game_board = GameBoard(self.board_width)
        self.new_game_board = self.game_board.create_board()

    def get_empty_board(self, board_width):
        return [[Marks.empty]*board_width for n in range(board_width)]

    def test_create_baord_when_board_width_three(self):
        empty_game_board = self.get_empty_board(self.board_width)

        self.assertEqual(self.new_game_board, empty_game_board)

    def test_get_max_range_when_board_width_three(self):
        board_width = 3
        range_max = board_width*board_width
        game_board = GameBoard(board_width)

        self.assertEqual(game_board.get_max_range(), range_max)

    def test_get_min_range(self):
        range_min = 0
        self.assertEqual(self.game_board.get_min_range(), range_min)

    def test_create_baord_when_board_width_four(self):
        board_width = 4
        empty_game_board = self.get_empty_board(board_width)
        game_board = GameBoard(board_width)

        self.assertEqual(game_board.board, empty_game_board)

    def test_set_mark_when_spot_empty(self):
        position = 0
        self.game_board.set_mark(position, Marks.cross)
        mark_set_on_board = self.game_board.get_mark(position)

        self.assertEqual(Marks.cross, mark_set_on_board)

    def test_is_empty_when_spot_is_empty(self):
        position = 0
        self.game_board.set_mark(position, Marks.cross)

        self.assertFalse(self.game_board.is_empty(position))

    def test_set_mark_when_out_of_the_board(self):
        position = 10

        with self.assertRaises(IndexError):
            self.game_board.set_mark(position, Marks.cross)
Esempio n. 2
0
    def test_get_move_when_get_value_too_low(self):
        self.fake_game_interface.player_move_position = -10
        self.human = Human(Marks.nought, self.fake_game_interface)
        self.game_board = GameBoard(self.board_width)

        self.human.get_move(self.game_board)

        self.assertTrue(self.fake_game_interface.passed_in_wrong_range)
Esempio n. 3
0
    def test_get_move_when_its_a_free_spot(self):
        self.fake_game_interface.player_move_position = 1
        self.human = Human(Marks.nought, self.fake_game_interface)
        self.game_board = GameBoard(self.board_width)
        self.game_board.set_mark(1, Marks.cross)

        self.human.get_move(self.game_board)

        self.assertTrue(self.fake_game_interface.passed_in_spot_not_free)
Esempio n. 4
0
    def test_get_move_when_maximizing_should_block_opposant(self):
        maximizing_player = Marks.cross
        self.game_board = GameBoard(3)
        self.game_board.set_mark(0, Marks.nought)
        self.game_board.set_mark(1, Marks.nought)

        blocking_move = self.computer.get_move(self.game_board)

        self.assertEqual(blocking_move, 2)
Esempio n. 5
0
    def test_get_move_when_maximizing_can_win(self):
        maximizing_player = Marks.cross
        self.game_board = GameBoard(3)
        self.game_board.set_mark(0, Marks.cross)
        self.game_board.set_mark(1, Marks.cross)

        win_move = self.computer.get_move(self.game_board)

        self.assertEqual(win_move, 2)
Esempio n. 6
0
    def test_alphabeta_when_minimizing_player_win_score_negative(self):
        maximizing_player = Marks.cross
        self.game_board = GameBoard(3)
        self.game_board.set_mark(0, Marks.nought)
        self.game_board.set_mark(1, Marks.nought)
        self.game_board.set_mark(2, Marks.nought)

        negative_score = self.computer.alphabeta(maximizing_player,
                                               self.game_board, -100, 100)
        self.assertEqual(negative_score, -1)
Esempio n. 7
0
class TestHuman(unittest.TestCase):
    def setUp(self):
        self.fake_game_interface = FakeGameInterface()
        self.board_width = 3

    def test_set_mark_when_mark_is_cross(self):
        self.human = Human(Marks.cross, self.fake_game_interface)

        self.assertEqual(self.human.mark, Marks.cross)

    def test_set_mark_when_mark_is_nought(self):
        self.human = Human(Marks.nought, self.fake_game_interface)

        self.assertEqual(self.human.mark, Marks.nought)

    def test_get_move_when_value_valide(self):
        self.fake_game_interface.player_move_position = 5
        self.human = Human(Marks.nought, self.fake_game_interface)
        self.game_board = GameBoard(self.board_width)

        self.assertEqual(self.human.get_move(self.game_board), 5)

    def test_get_move_when_get_value_too_low(self):
        self.fake_game_interface.player_move_position = -10
        self.human = Human(Marks.nought, self.fake_game_interface)
        self.game_board = GameBoard(self.board_width)

        self.human.get_move(self.game_board)

        self.assertTrue(self.fake_game_interface.passed_in_wrong_range)

    def test_get_move_when_its_a_free_spot(self):
        self.fake_game_interface.player_move_position = 1
        self.human = Human(Marks.nought, self.fake_game_interface)
        self.game_board = GameBoard(self.board_width)
        self.game_board.set_mark(1, Marks.cross)

        self.human.get_move(self.game_board)

        self.assertTrue(self.fake_game_interface.passed_in_spot_not_free)
Esempio n. 8
0
    def test_alphabeta_when_opposant_win_in_both_different_move(self):
        maximizing_player = Marks.cross
        self.game_board = GameBoard(3)
        self.game_board.set_mark(0, Marks.empty)
        self.game_board.set_mark(1, Marks.nought)
        self.game_board.set_mark(2, Marks.cross)
        self.game_board.set_mark(3, Marks.empty)
        self.game_board.set_mark(4, Marks.nought)
        self.game_board.set_mark(5, Marks.nought)
        self.game_board.set_mark(6, Marks.cross)
        self.game_board.set_mark(7, Marks.cross)
        self.game_board.set_mark(8, Marks.nought)

        negative_score = self.computer.alphabeta(maximizing_player,
                                                        self.game_board, -100, 100)
        self.assertEqual(negative_score, -1)
Esempio n. 9
0
    def test_alphabeta_when_its_a_tie_score_neutral(self):
        maximizing_player = Marks.cross
        self.game_board = GameBoard(3)
        self.game_board.set_mark(0, Marks.nought)
        self.game_board.set_mark(1, Marks.cross)
        self.game_board.set_mark(2, Marks.nought)
        self.game_board.set_mark(3, Marks.nought)
        self.game_board.set_mark(4, Marks.cross)
        self.game_board.set_mark(5, Marks.cross)
        self.game_board.set_mark(6, Marks.cross)
        self.game_board.set_mark(7, Marks.nought)
        self.game_board.set_mark(8, Marks.cross)

        neutral_score = self.computer.alphabeta(maximizing_player,
                                              self.game_board, -100, 100)
        self.assertEqual(neutral_score, 0)
Esempio n. 10
0
    def test_get_move_when_maximizing_playe_create_opportunity_to_win(self):
        maximizing_player = Marks.cross
        self.game_board = GameBoard(3)
        self.game_board.set_mark(0, Marks.cross)
        self.game_board.set_mark(1, Marks.nought)
        self.game_board.set_mark(2, Marks.empty)
        self.game_board.set_mark(3, Marks.cross)
        self.game_board.set_mark(4, Marks.empty)
        self.game_board.set_mark(5, Marks.empty)
        self.game_board.set_mark(6, Marks.nought)
        self.game_board.set_mark(7, Marks.empty)
        self.game_board.set_mark(8, Marks.empty)

        best_move_possible = self.computer.get_move(self.game_board)

        self.assertEqual(best_move_possible, 4)
Esempio n. 11
0
    def test_get_move_when_value_valide(self):
        self.fake_game_interface.player_move_position = 5
        self.human = Human(Marks.nought, self.fake_game_interface)
        self.game_board = GameBoard(self.board_width)

        self.assertEqual(self.human.get_move(self.game_board), 5)
Esempio n. 12
0
class ComputerTest(unittest.TestCase):
    def setUp(self):
        self.computer = Computer(Marks.cross)

    def test_set_mark_when_cross(self):
        self.computer = Computer(Marks.cross)

        self.assertEqual(self.computer.mark, Marks.cross)

    def test_set_mark_when_nought(self):
        self.computer = Computer(Marks.nought)

        self.assertEqual(self.computer.mark, Marks.nought)

    def test_switch_when_mark_was_cross(self):
        noughtMark = self.computer.switch(Marks.cross)

        self.assertEqual(noughtMark, Marks.nought)

    def test_switch_when_mark_was_nought(self):
        crossMark = self.computer.switch(Marks.nought)

        self.assertEqual(crossMark, Marks.cross)

    def test_alphabeta_when_maximizing_player_win_score_positive(self):
        maximizing_player = Marks.cross
        self.game_board = GameBoard(3)
        self.game_board.set_mark(0, Marks.cross)
        self.game_board.set_mark(1, Marks.cross)
        self.game_board.set_mark(2, Marks.cross)

        positive_score = self.computer.alphabeta(maximizing_player,
                                               self.game_board, -100, 100)
        self.assertEqual(positive_score, 1)

    def test_alphabeta_when_minimizing_player_win_score_negative(self):
        maximizing_player = Marks.cross
        self.game_board = GameBoard(3)
        self.game_board.set_mark(0, Marks.nought)
        self.game_board.set_mark(1, Marks.nought)
        self.game_board.set_mark(2, Marks.nought)

        negative_score = self.computer.alphabeta(maximizing_player,
                                               self.game_board, -100, 100)
        self.assertEqual(negative_score, -1)

    def test_alphabeta_when_its_a_tie_score_neutral(self):
        maximizing_player = Marks.cross
        self.game_board = GameBoard(3)
        self.game_board.set_mark(0, Marks.nought)
        self.game_board.set_mark(1, Marks.cross)
        self.game_board.set_mark(2, Marks.nought)
        self.game_board.set_mark(3, Marks.nought)
        self.game_board.set_mark(4, Marks.cross)
        self.game_board.set_mark(5, Marks.cross)
        self.game_board.set_mark(6, Marks.cross)
        self.game_board.set_mark(7, Marks.nought)
        self.game_board.set_mark(8, Marks.cross)

        neutral_score = self.computer.alphabeta(maximizing_player,
                                              self.game_board, -100, 100)
        self.assertEqual(neutral_score, 0)

    def test_alphabeta_when_maximizing_player_win_in_both_different_move(self):
        maximizing_player = Marks.nought
        self.game_board = GameBoard(3)
        self.game_board.set_mark(0, Marks.empty)
        self.game_board.set_mark(1, Marks.cross)
        self.game_board.set_mark(2, Marks.nought)
        self.game_board.set_mark(3, Marks.empty)
        self.game_board.set_mark(4, Marks.cross)
        self.game_board.set_mark(5, Marks.cross)
        self.game_board.set_mark(6, Marks.nought)
        self.game_board.set_mark(7, Marks.nought)
        self.game_board.set_mark(8, Marks.cross)

        positive_score = self.computer.alphabeta(maximizing_player,
                                                 self.game_board, -100, 100)
        self.assertEqual(positive_score, 1)

    def test_alphabeta_when_opposant_win_in_both_different_move(self):
        maximizing_player = Marks.cross
        self.game_board = GameBoard(3)
        self.game_board.set_mark(0, Marks.empty)
        self.game_board.set_mark(1, Marks.nought)
        self.game_board.set_mark(2, Marks.cross)
        self.game_board.set_mark(3, Marks.empty)
        self.game_board.set_mark(4, Marks.nought)
        self.game_board.set_mark(5, Marks.nought)
        self.game_board.set_mark(6, Marks.cross)
        self.game_board.set_mark(7, Marks.cross)
        self.game_board.set_mark(8, Marks.nought)

        negative_score = self.computer.alphabeta(maximizing_player,
                                                        self.game_board, -100, 100)
        self.assertEqual(negative_score, -1)

    def test_get_move_when_maximizing_can_win(self):
        maximizing_player = Marks.cross
        self.game_board = GameBoard(3)
        self.game_board.set_mark(0, Marks.cross)
        self.game_board.set_mark(1, Marks.cross)

        win_move = self.computer.get_move(self.game_board)

        self.assertEqual(win_move, 2)

    def test_get_move_when_maximizing_should_block_opposant(self):
        maximizing_player = Marks.cross
        self.game_board = GameBoard(3)
        self.game_board.set_mark(0, Marks.nought)
        self.game_board.set_mark(1, Marks.nought)

        blocking_move = self.computer.get_move(self.game_board)

        self.assertEqual(blocking_move, 2)

    def test_get_move_when_maximizing_playe_create_opportunity_to_win(self):
        maximizing_player = Marks.cross
        self.game_board = GameBoard(3)
        self.game_board.set_mark(0, Marks.cross)
        self.game_board.set_mark(1, Marks.nought)
        self.game_board.set_mark(2, Marks.empty)
        self.game_board.set_mark(3, Marks.cross)
        self.game_board.set_mark(4, Marks.empty)
        self.game_board.set_mark(5, Marks.empty)
        self.game_board.set_mark(6, Marks.nought)
        self.game_board.set_mark(7, Marks.empty)
        self.game_board.set_mark(8, Marks.empty)

        best_move_possible = self.computer.get_move(self.game_board)

        self.assertEqual(best_move_possible, 4)
Esempio n. 13
0
 def setUp(self):
     self.board_width = 3
     self.game_board = GameBoard(self.board_width)
     self.new_game_board = self.game_board.create_board()
Esempio n. 14
0
    def test_get_max_range_when_board_width_three(self):
        board_width = 3
        range_max = board_width*board_width
        game_board = GameBoard(board_width)

        self.assertEqual(game_board.get_max_range(), range_max)