def test_determine_ai_move(self): # Test that computer finds the only valid move on a board game = Othello(4) game.active_color = 'white' game.board.positions = [['white', 'black', 'black', 'black'], ['black', 'black', 'white', 'black'], ['black', 'white', 'black', 'black'], ['black', 'black', 'black', 0]] ai_move = game.determine_ai_move() self.assertEqual(ai_move, [Point(3, 3), Point(2, 2), Point(1, 1)]) # Test that computer picks a valid move from multiple possibilities game = Othello(4) game.active_color = 'white' game.board.positions = [[0, 0, 'white', 0], [0, 'black', 'white', 0], [0, 'white', 'black', 0], [0, 0, 0, 'white']] ai_move = game.determine_ai_move() # Use get_valid_flips function to test that computer's move is valid move_test = (True if game.get_valid_flips(ai_move[0]) else False) self.assertTrue(move_test) # Test computer behavior when it cannot make a valid move game = Othello(4) game.active_color = 'white' game.board.positions = [['black', 'black', 'black', 'black'], ['black', 'black', 'white', 'black'], ['black', 'white', 'white', 'black'], ['black', 'black', 'black', 0]] ai_move = game.determine_ai_move() self.assertIsNone(ai_move)
def test_has_valid_move(self): # Test a board where a valid move exists for black game = Othello(4) game.board.positions = [['black', 'black', 'black', 'black'], ['black', 'black', 'white', 'black'], ['black', 'white', 'black', 'white'], ['black', 'black', 'black', 0]] self.assertTrue(game.has_valid_move()) # Test a board with no valid moves for black game = Othello(4) game.board.positions = [['black', 'black', 'black', 'black'], ['black', 'black', 'white', 'black'], ['black', 'white', 'black', 'black'], ['black', 'black', 'black', 0]] self.assertFalse(game.has_valid_move()) # Test a board where a valid move exists for white game = Othello(4) game.active_color = 'white' game.board.positions = [['white', 'black', 'black', 'black'], ['black', 'black', 'white', 'black'], ['black', 'white', 'black', 'black'], ['black', 'black', 'black', 0]] self.assertTrue(game.has_valid_move()) # Test a board with no valid moves for white game = Othello(4) game.active_color = 'white' game.board.positions = [['black', 'black', 'black', 'black'], ['black', 'black', 'white', 'black'], ['black', 'white', 'black', 'black'], ['black', 'black', 'black', 0]] self.assertFalse(game.has_valid_move())
def test_get_valid_flips(self): # Set up a testable game game = Othello(8) game.active_color = 'white' game.board.record_tile(Point(2, 2), 'white') game.board.record_tile(Point(5, 4), 'black') game.board.record_tile(Point(6, 5), 'black') game.board.record_tile(Point(7, 5), 'white') game.board.record_tile(Point(6, 6), 'white') game.board.record_tile(Point(5, 6), 'black') game.board.record_tile(Point(5, 7), 'black') game.board.record_tile(Point(4, 6), 'black') # Test good input (a move that results in a variety of flips or lack # thereof in each direction) test_move = game.get_valid_flips(Point(5, 5)) expected_outcome = [Point(6, 5), Point(4, 4), Point(3, 3)] self.assertEqual(test_move, expected_outcome) # Test bad inputs: # 1. Move outside the board # 2. Move that targets an occupied square # 3. Argument is None instead of a point outside_board_test = game.get_valid_flips(Point(100, 100)) occupied_board_test = game.get_valid_flips(Point(2, 2)) none_point_test = game.get_valid_flips(None) self.assertEqual(outside_board_test, []) self.assertEqual(occupied_board_test, []) self.assertEqual(none_point_test, [])
def test_eq(self): # Set up test games with different attributes game_one = Othello(8) game_two = Othello(8) game_three = Othello(16) game_four = Othello(8) game_four.active_color = 'white' # Test equality self.assertEqual(game_one, game_two) self.assertNotEqual(game_one, game_three) self.assertNotEqual(game_one, game_four)