예제 #1
0
    def test_valid_moves_can_accept_other_piece(self):
        game = Game()

        # Remove all black pieces, but keep game turn as white
        game._board._board[:, :2] = EmptyPiece()

        assert game.valid_moves("black") == []
예제 #2
0
    def test_that_move_returns_True_if_move_made(self):
        game = Game(None, None)
        game._board.reset()

        move_made = game.move("25-22")
        assert move_made

        move_made = game.move("11-1")
        assert not move_made
예제 #3
0
    def test_valid_moves_do_not_include_backwards_moves(self):
        game = Game()
        game.reset()

        game.move("26-23")
        game.move("7-11")

        assert "23-26" not in game.valid_moves("white")
        assert "11-7" not in game.valid_moves("black")
예제 #4
0
    def test_valid_moves_considers_player_turn(self):
        game = Game()
        game.turn = "black"

        # Remove existing black pieces
        game._board._board[:, :2] = EmptyPiece()
        game._board._board[0, 3] = Piece("black", None)

        assert game.valid_moves() == ["2-6", "2-7"]
예제 #5
0
    def test_that_move_returns_True_if_move_made(self):
        game = Game()
        game._board.reset()

        move_made = game.move("25-22")
        assert move_made
        assert game.turn == "black"

        move_made = game.move("11-1")
        assert not move_made
        assert game.turn == "black"
예제 #6
0
    def test_that_king_takes_are_included_in_valid_moves(self):
        game = Game()

        game._board._board[4, 3] = King("white", None)
        game._board._board[3, 4] = King("black", None)
        game._board._board[5, 4] = King("black", None)
        game._board._board[2, 3] = King("white", None)

        assert "18-11" in game.valid_moves("white")
        assert "15-22" in game.valid_moves("black")
        assert "18-27" in game.valid_moves("white")
        assert "15-6" in game.valid_moves("black")
예제 #7
0
    def test_takes_included_in_valid_moves(self):
        game = Game()

        game._board._board[4, 3] = Piece("white", None)
        game._board._board[3, 4] = Piece("black", None)
        game._board._board[5, 4] = Piece("black", None)
        game._board._board[2, 3] = Piece("white", None)

        assert "18-11" in game.valid_moves("white")
        assert "15-22" in game.valid_moves("black")
        assert "18-27" not in game.valid_moves(
            "white")  # because piece can't move backwards
        assert "15-6" not in game.valid_moves("black")
예제 #8
0
    def test_black_wins_if_white_has_no_pieces(self):
        game = Game()
        game.reset()
        game.change_turn()

        for _ in range(8):
            game._remove_piece()

        assert game.game_over()
        assert game.result == "black"
예제 #9
0
    def test_remove_piece_removes_from_opposite_player(self):
        game = Game()
        assert game._pieces_remaining == {"white": 8, "black": 8}

        game._remove_piece()
        assert game._pieces_remaining == {"white": 8, "black": 7}

        game.change_turn()
        game._remove_piece()
        assert game._pieces_remaining == {"white": 7, "black": 7}
예제 #10
0
    def test_game_is_over_if_no_pieces_remaining(self):
        game = Game()
        game.reset()
        assert not game.game_over()

        for _ in range(8):
            game._remove_piece()

        assert game.game_over()
        assert game.result == "white"
예제 #11
0
    def test_other_play_wins_if_no_valid_moves(self):
        game = Game()
        game.reset()
        game.valid_moves = mock.Mock(return_value=[])

        assert game.game_over()
        assert game.result == "black"

        game.turn = "black"
        assert game.game_over()
        assert game.result == "white"
예제 #12
0
    def test_move_returns_False_if_move_string_is_not_a_move(self):
        game = Game()
        game.reset()

        assert not game.move("invalid move")
        assert not game.move("5.5-4.4")
        assert not game.move("18 14")
        assert not game.move("18_14")
예제 #13
0
    def test_game_is_over_if_no_pieces_remaining(self):
        game = Game(None, None)
        assert not game.game_over()

        for _ in range(8):
            game._remove_piece()

        assert game.game_over()
예제 #14
0
    def test_that_reset_resets_game(self):
        game = Game()
        game._board._board[5, 4] = Piece("white", None)
        game._move_list = [1, 2, 3, 4]
        game.turn = "black"
        game._pieces_remaining = {"white": 5, "black": 6}

        game.reset()

        assert np.array_equal(game._board._board, new_board)
        assert game._move_list == []
        assert game.turn == "white"
        assert game._pieces_remaining == {"white": 8, "black": 8}
예제 #15
0
    def test_that_cant_move_if_game_is_over(self):
        game = Game()
        game._board = mock.Mock(autospec=Board)

        for _ in range(8):
            game._remove_piece()

        move_made = game.move("25-22")
        assert not move_made

        # Confirm that move wasn't validated (because the game was over anyway)
        assert game._board.validate_move.call_count == 0
예제 #16
0
    def test_can_change_turn(self):
        game = Game()

        # Check that turn starts on white
        assert game.turn == "white"

        # Check that can change to black
        game.change_turn()
        assert game.turn == "black"

        # Check that can change back to white
        game.change_turn()
        assert game.turn == "white"
예제 #17
0
    def test_valid_moves_include_backwards_moves_for_kings(self):
        game = Game()
        game.reset()

        game._board._board[4, 3] = King("white", None)
        game._board._board[4, 5] = King("black", None)

        white_moves = game.valid_moves("white")
        for move in ["18-14", "18-15", "18-22", "18-23"]:
            assert move in white_moves

        black_moves = game.valid_moves("black")
        for move in ["19-15", "19-16", "19-23", "19-24"]:
            assert move in black_moves
예제 #18
0
 def test_can_parse_valid_move(self):
     game = Game()
     assert game._parse_move("7-11") == (7, 11)
     assert game._parse_move("11-7") == (11, 7)
예제 #19
0
 def test_that_move_without_integers_returns_None(self):
     game = Game()
     assert game._parse_move("Seven-Eleven") == (None, None)
예제 #20
0
    def test_that_move_removes_piece_if_white_takes_black(self):
        game = Game()
        game.reset()

        game.move("25-22")
        game.move("5-9")
        game.move("22-18")
        game.move("9-14")

        # White takes black in this move
        game.move("18-9")

        assert game.turn == "white"
        assert game._pieces_remaining["black"] == 7
예제 #21
0
    def test_that_move_removes_piece_if_black_takes_white(self):
        game = Game()
        game.reset()

        game.move("25-22")
        game.move("5-9")
        game.move("22-18")
        game.move("9-14")
        game.move("29-25")

        # Black takes white in this move
        game.move("14-23")

        assert game.turn == "black"
        assert game._pieces_remaining["white"] == 7
예제 #22
0
 def test_that_move_without_hyphen_returns_None(self):
     game = Game()
     assert game._parse_move("7.11") == (None, None)
예제 #23
0
    def test_result_is_draw_if_forty_moves_without_take(self):
        game = Game()
        game.reset()

        assert not game.game_over()

        game.reset()
        game._moves_since_take = 39
        assert not game.game_over()

        game.reset()
        game._moves_since_take = 40
        assert game.game_over()

        game.reset()
        game._moves_since_take = 92
        assert game.game_over()
예제 #24
0
 def test_valid_moves_returns_empty_list_if_no_moves(self):
     game = Game()
     # game._board is initialised to an empty array
     # no pieces == no moves
     assert game.valid_moves() == []