Ejemplo n.º 1
0
def test_12_possibilities_with_pawn_capture_and_promotion():
    g = BerkeleyGame()
    g._board.clear()
    g._board.set_piece_at(chess.A7, chess.Piece(chess.PAWN, chess.WHITE))
    g._board.set_piece_at(chess.H1, chess.Piece(chess.KING, chess.BLACK))
    g._board.set_piece_at(chess.A1, chess.Piece(chess.KING, chess.WHITE))
    g._generate_possible_to_ask_list()
    assert len(g.possible_to_ask) == 12
Ejemplo n.º 2
0
def test_impossible_to_promotion_without_piece_spesification():
    g = BerkeleyGame()
    g._board.clear()
    g._board.set_piece_at(chess.A7, chess.Piece(chess.PAWN, chess.WHITE))
    g._board.set_piece_at(chess.H1, chess.Piece(chess.KING, chess.BLACK))
    g._board.set_piece_at(chess.A1, chess.Piece(chess.KING, chess.WHITE))
    g._generate_possible_to_ask_list()
    assert g.ask_for(KSMove(QA.COMMON, chess.Move(
        chess.A7, chess.A8))) == KSAnswer(MA.IMPOSSIBLE_TO_ASK)
Ejemplo n.º 3
0
def test_possible_capture_with_promotion():
    g = BerkeleyGame()
    g._board.clear()
    g._board.set_piece_at(chess.A7, chess.Piece(chess.PAWN, chess.WHITE))
    g._board.set_piece_at(chess.H1, chess.Piece(chess.KING, chess.BLACK))
    g._board.set_piece_at(chess.A1, chess.Piece(chess.KING, chess.WHITE))
    g._generate_possible_to_ask_list()
    assert KSMove(QA.COMMON,
                  chess.Move(chess.A7, chess.B8,
                             promotion=chess.BISHOP)) in g.possible_to_ask
Ejemplo n.º 4
0
def test_mate_is_game_over_2():
    g = BerkeleyGame()
    g._board.clear()
    g._board.set_piece_at(chess.C2, chess.Piece(chess.KING, chess.WHITE))
    g._board.set_piece_at(chess.H8, chess.Piece(chess.KING, chess.BLACK))
    g._board.set_piece_at(chess.G1, chess.Piece(chess.ROOK, chess.WHITE))
    g._board.set_piece_at(chess.A1, chess.Piece(chess.ROOK, chess.WHITE))
    g._generate_possible_to_ask_list()
    # Stalemate
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.A1, chess.A7)))
    assert g.is_game_over() == True
Ejemplo n.º 5
0
def test_check_double_check_2():
    g = BerkeleyGame()
    g._board.clear()
    g._board.set_piece_at(chess.C2, chess.Piece(chess.KING, chess.WHITE))
    g._board.set_piece_at(chess.H8, chess.Piece(chess.KING, chess.BLACK))
    g._board.set_piece_at(chess.E2, chess.Piece(chess.QUEEN, chess.BLACK))
    g._board.set_piece_at(chess.D2, chess.Piece(chess.KNIGHT, chess.BLACK))
    g._generate_possible_to_ask_list()
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.C2, chess.B2)))
    res = g.ask_for(KSMove(QA.COMMON, chess.Move(chess.D2, chess.C4)))
    assert res.check_2 in [SCA.CHECK_RANK, SCA.CHECK_KNIGHT]
Ejemplo n.º 6
0
def test_check_rank():
    g = BerkeleyGame()
    g._board.clear()
    g._board.set_piece_at(chess.B2, chess.Piece(chess.KING, chess.WHITE))
    g._board.set_piece_at(chess.H8, chess.Piece(chess.KING, chess.BLACK))
    g._board.set_piece_at(chess.D1, chess.Piece(chess.QUEEN, chess.BLACK))
    g._generate_possible_to_ask_list()
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.B2, chess.A3)))
    assert g.ask_for(KSMove(QA.COMMON, chess.Move(
        chess.D1, chess.D3))) == KSAnswer(MA.REGULAR_MOVE,
                                          special_announcement=SCA.CHECK_RANK)
Ejemplo n.º 7
0
def test_stalemate():
    g = BerkeleyGame()
    g._board.clear()
    g._board.set_piece_at(chess.C2, chess.Piece(chess.KING, chess.WHITE))
    g._board.set_piece_at(chess.H8, chess.Piece(chess.KING, chess.BLACK))
    g._board.set_piece_at(chess.G1, chess.Piece(chess.ROOK, chess.WHITE))
    g._board.set_piece_at(chess.A1, chess.Piece(chess.ROOK, chess.WHITE))
    g._generate_possible_to_ask_list()
    assert g.ask_for(KSMove(QA.COMMON,
                            chess.Move(chess.A1, chess.A7))) == KSAnswer(
                                MA.REGULAR_MOVE,
                                special_announcement=SCA.DRAW_STALEMATE)
Ejemplo n.º 8
0
def test_check_short_diagonal_upper_left_quadrant():
    g = BerkeleyGame()
    g._board.clear()
    g._board.set_piece_at(chess.B8, chess.Piece(chess.KING, chess.WHITE))
    g._board.set_piece_at(chess.B7, chess.Piece(chess.QUEEN, chess.WHITE))
    g._board.set_piece_at(chess.H8, chess.Piece(chess.KING, chess.BLACK))
    g._board.set_piece_at(chess.G1, chess.Piece(chess.QUEEN, chess.BLACK))
    g._board.turn = chess.BLACK
    g._generate_possible_to_ask_list()
    assert g.ask_for(KSMove(QA.COMMON,
                            chess.Move(chess.G1, chess.A7))) == KSAnswer(
                                MA.REGULAR_MOVE,
                                special_announcement=SCA.CHECK_SHORT_DIAGONAL)
Ejemplo n.º 9
0
def test_no_legal_moves_after_gameover():
    g = BerkeleyGame()
    g._board.clear()
    g._board.set_piece_at(chess.C2, chess.Piece(chess.KING, chess.BLACK))
    g._board.set_piece_at(chess.H8, chess.Piece(chess.KING, chess.WHITE))
    g._board.set_piece_at(chess.G1, chess.Piece(chess.ROOK, chess.BLACK))
    g._board.set_piece_at(chess.B7, chess.Piece(chess.QUEEN, chess.BLACK))
    g._board.set_piece_at(chess.A1, chess.Piece(chess.ROOK, chess.BLACK))
    g._board.turn = chess.BLACK
    g._generate_possible_to_ask_list()
    # Checkmate
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.A1, chess.A8)))
    assert len(g.possible_to_ask) == 0
Ejemplo n.º 10
0
def test_white_wins():
    g = BerkeleyGame()
    g._board.clear()
    g._board.set_piece_at(chess.C2, chess.Piece(chess.KING, chess.WHITE))
    g._board.set_piece_at(chess.H8, chess.Piece(chess.KING, chess.BLACK))
    g._board.set_piece_at(chess.G1, chess.Piece(chess.ROOK, chess.WHITE))
    g._board.set_piece_at(chess.B7, chess.Piece(chess.QUEEN, chess.WHITE))
    g._board.set_piece_at(chess.A1, chess.Piece(chess.ROOK, chess.WHITE))
    g._generate_possible_to_ask_list()
    assert g.ask_for(KSMove(QA.COMMON,
                            chess.Move(chess.A1, chess.A8))) == KSAnswer(
                                MA.REGULAR_MOVE,
                                special_announcement=SCA.CHECKMATE_WHITE_WINS)
Ejemplo n.º 11
0
def test_promotion_check_long():
    g = BerkeleyGame()
    g._board.clear()
    g._board.set_piece_at(chess.A7, chess.Piece(chess.PAWN, chess.WHITE))
    g._board.set_piece_at(chess.H1, chess.Piece(chess.KING, chess.BLACK))
    g._board.set_piece_at(chess.A1, chess.Piece(chess.KING, chess.WHITE))
    g._generate_possible_to_ask_list()
    assert g.ask_for(
        KSMove(QA.COMMON,
               chess.Move(chess.A7, chess.A8,
                          promotion=chess.QUEEN))) == KSAnswer(
                              MA.REGULAR_MOVE,
                              special_announcement=SCA.CHECK_LONG_DIAGONAL)
Ejemplo n.º 12
0
def test_draw_insufficient():
    g = BerkeleyGame()
    g._board.clear()
    g._board.set_piece_at(chess.A8, chess.Piece(chess.QUEEN, chess.WHITE))
    g._board.set_piece_at(chess.F7, chess.Piece(chess.KING, chess.WHITE))
    g._board.set_piece_at(chess.G4, chess.Piece(chess.BISHOP, chess.WHITE))
    g._board.set_piece_at(chess.D4, chess.Piece(chess.KING, chess.BLACK))
    g._generate_possible_to_ask_list()
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.A8, chess.D5)))
    assert g.ask_for(KSMove(QA.COMMON,
                            chess.Move(chess.D4, chess.D5))) == KSAnswer(
                                MA.CAPTURE_DONE,
                                capture_at_square=chess.D5,
                                special_announcement=SCA.DRAW_INSUFFICIENT)
Ejemplo n.º 13
0
def test_check_double():
    g = BerkeleyGame()
    g._board.clear()
    g._board.set_piece_at(chess.C2, chess.Piece(chess.KING, chess.WHITE))
    g._board.set_piece_at(chess.H8, chess.Piece(chess.KING, chess.BLACK))
    g._board.set_piece_at(chess.E2, chess.Piece(chess.QUEEN, chess.BLACK))
    g._board.set_piece_at(chess.D2, chess.Piece(chess.KNIGHT, chess.BLACK))
    g._generate_possible_to_ask_list()
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.C2, chess.B2)))
    assert g.ask_for(KSMove(QA.COMMON,
                            chess.Move(chess.D2, chess.C4))) == KSAnswer(
                                MA.REGULAR_MOVE,
                                special_announcement=(SCA.CHECK_DOUBLE, [
                                    SCA.CHECK_RANK, SCA.CHECK_KNIGHT
                                ]))
Ejemplo n.º 14
0
def test_promotion_capture_draw():
    g = BerkeleyGame()
    g._board.clear()
    g._board.set_piece_at(chess.B8, chess.Piece(chess.KING, chess.BLACK))
    g._board.set_piece_at(chess.B2, chess.Piece(chess.PAWN, chess.BLACK))
    g._board.set_piece_at(chess.H8, chess.Piece(chess.KING, chess.WHITE))
    g._board.set_piece_at(chess.A1, chess.Piece(chess.QUEEN, chess.WHITE))
    g._board.turn = chess.BLACK
    g._generate_possible_to_ask_list()
    assert g.ask_for(
        KSMove(QA.COMMON,
               chess.Move(chess.B2, chess.A1,
                          promotion=chess.BISHOP))) == KSAnswer(
                              MA.CAPTURE_DONE,
                              capture_at_square=chess.A1,
                              special_announcement=SCA.DRAW_INSUFFICIENT)
Ejemplo n.º 15
0
def test_75_moves_is_not_draw():
    g = BerkeleyGame()
    g._board.clear()
    g._board.set_piece_at(chess.A1, chess.Piece(chess.KING, chess.WHITE))
    g._board.set_piece_at(chess.H8, chess.Piece(chess.KING, chess.BLACK))
    g._board.set_piece_at(chess.D4, chess.Piece(chess.PAWN, chess.WHITE))
    g._generate_possible_to_ask_list()

    white_king_sq = chess.A1
    for _ in range(4):
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq + 1)))
        white_king_sq += 1
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.H8, chess.G8)))
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq + 1)))
        white_king_sq += 1
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.G8, chess.H8)))
    # 14
    for _ in range(4):
        white_king_sq -= 1
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq - 1)))
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.G8, chess.F8)))
        white_king_sq -= 1
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq - 1)))
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.F8, chess.G8)))
    # 28
    for _ in range(4):
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq + 1)))
        white_king_sq += 1
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.F8, chess.E8)))
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq + 1)))
        white_king_sq += 1
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.E8, chess.F8)))
    for _ in range(4):
        white_king_sq -= 1
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq - 1)))
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.E8, chess.D8)))
        white_king_sq -= 1
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq - 1)))
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.D8, chess.E8)))
    # 56
    for _ in range(4):
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq + 1)))
        white_king_sq += 1
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.D8, chess.C8)))
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq + 1)))
        white_king_sq += 1
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.C8, chess.D8)))
    for _ in range(4):
        white_king_sq -= 1
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq - 1)))
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.C8, chess.B8)))
        white_king_sq -= 1
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq - 1)))
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.B8, chess.C8)))
    # 84
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.A1, chess.A2)))
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.B8, chess.C8)))
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.A2, chess.A1)))
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.C8, chess.D8)))
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.A1, chess.A2)))
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.D8, chess.E8)))
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.A2, chess.A1)))
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.E8, chess.F8)))
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.A1, chess.B2)))
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.F8, chess.G8)))
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.B2, chess.A2)))
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.G8, chess.H8)))
    # 96
    white_king_sq = chess.A2
    for _ in range(4):
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq + 1)))
        white_king_sq += 1
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.H8, chess.G8)))
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq + 1)))
        white_king_sq += 1
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.G8, chess.H8)))
    for _ in range(4):
        white_king_sq -= 1
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq - 1)))
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.G8, chess.F8)))
        white_king_sq -= 1
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq - 1)))
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.F8, chess.G8)))
    for _ in range(4):
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq + 1)))
        white_king_sq += 1
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.F8, chess.E8)))
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq + 1)))
        white_king_sq += 1
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.E8, chess.F8)))
    for _ in range(2):
        white_king_sq -= 1
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq - 1)))
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.E8, chess.D8)))
        white_king_sq -= 1
        g.ask_for(
            KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq - 1)))
        g.ask_for(KSMove(QA.COMMON, chess.Move(chess.D8, chess.E8)))
    # 146
    white_king_sq -= 1
    g.ask_for(KSMove(QA.COMMON, chess.Move(white_king_sq, white_king_sq - 1)))
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.E8, chess.D8)))
    # 148
    g.ask_for(KSMove(QA.COMMON, chess.Move(chess.C2, chess.C3)))
    # 149
    assert g.ask_for(KSMove(QA.COMMON,
                            chess.Move(chess.D8,
                                       chess.D7))) == KSAnswer(MA.REGULAR_MOVE)