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)
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)
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_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_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)
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)
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_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_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)
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)
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)
def setUp(self): self.board_width = 3 self.game_board = GameBoard(self.board_width) self.new_game_board = self.game_board.create_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)