Esempio n. 1
0
def test_queen_captures():
    fen = 'rnbqkbnr/pppppppp/8/8/8/3P4/PPP1PPPP/RNBQKBNR w KQkq - 0 1'
    moves = set(BitBoardState.from_fen(fen).queen_captures())
    assert_equal(moves, set())

    fen = 'rnbqkbnr/pppppppp/8/8/8/3p4/PPP1PPPP/RNBQKBNR w KQkq - 0 1'
    moves = set(BitBoardState.from_fen(fen).queen_captures())
    assert_equal(moves, {Move(3, 19)})

    fen = 'rnbqkbnr/pppppppp/8/8/8/1pPP4/PP2PPPP/RNBQKBNR w KQkq - 0 1'
    moves = set(BitBoardState.from_fen(fen).queen_captures())
    assert_equal(moves, {Move(3, 17)})

    # Make sure a pinned queen doesn't move out of the pin ray
    fen = 'rnb1kbnr/4q3/8/8/8/8/PPPPRPPP/RNBQKBNR b KQkq - 0 1'
    moves = set(BitBoardState.from_fen(fen).queen_captures())
    assert_equal(moves, {Move(52, 52 - 40)})
Esempio n. 2
0
def test_long_form_move_formats():
    starting_fen = 'rnbqkbnr/pppppppr/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1'
    board = BitBoardState.from_fen(starting_fen)
    mv = Move.from_long_form(True, 'e2-e4')
    assert_equal(mv.to_long_form(), 'e2-e4')
    board.make_move(mv)
    assert_equal(
        board.to_fen(),
        'rnbqkbnr/pppppppr/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1')
Esempio n. 3
0
def test_promotion():
    fen = '4k3/P7/8/8/8/8/8/8 w - - 0 100'
    board = BitBoardState.from_fen(fen)
    move = Move(48, 56, 'Q')
    record = board.make_move(move)
    assert_equal(record.promoted_from, 'P')
    assert_equal(board.to_fen(), 'Q3k3/8/8/8/8/8/8/8 b - - 0 100')
    board.unmake_move(record)
    assert_equal(board.to_fen(), fen)
Esempio n. 4
0
def test_make_move():
    starting_fen = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1'

    # Try moving king's pawn one space
    board = BitBoardState.from_fen(starting_fen)
    record = board.make_move(Move(12, 20))
    assert_equal(board.to_fen(),
                 'rnbqkbnr/pppppppp/8/8/8/4P3/PPPP1PPP/RNBQKBNR b KQkq - 0 1')
    board.unmake_move(record)
    assert_equal(board.to_fen(), starting_fen)

    # Try moving king's pawn two spaces, thus invoking en passant
    board = BitBoardState.from_fen(starting_fen)
    record = board.make_move(Move(12, 28))
    assert_equal(board.get_enpassant(), 20)
    assert_equal(
        board.to_fen(),
        'rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1')
    board.unmake_move(record)
    assert_equal(board.to_fen(), starting_fen)

    # Attempt an en passant capture
    record_stack = []
    fen_stack = [starting_fen]
    board = BitBoardState.from_fen(starting_fen)
    move = Move(12, 28)
    record = board.make_move(move)
    record_stack.append(record)
    assert_equal(record.from_square, move.from_square)
    assert_equal(record.to_square, move.to_square)
    fen_stack.append(board.to_fen())
    assert_equal(
        '''
                 rnbqkbnr
                 pppppppp
                 --------
                 --------
                 ----P---
                 ----*---
                 PPPP-PPP
                 RNBQKBNR
                 '''.replace(' ', '').strip(), board.to_grid())
    move = Move(48, 40)
    record = board.make_move(move)
    record_stack.append(record)
    assert_equal(record.from_square, move.from_square)
    assert_equal(record.to_square, move.to_square)
    fen_stack.append(board.to_fen())
    assert_equal(
        '''
                 rnbqkbnr
                 -ppppppp
                 p-------
                 --------
                 ----P---
                 --------
                 PPPP-PPP
                 RNBQKBNR
                 '''.replace(' ', '').strip(), board.to_grid())
    move = Move(28, 36)
    record = board.make_move(move)
    record_stack.append(record)
    assert_equal(record.from_square, move.from_square)
    assert_equal(record.to_square, move.to_square)
    fen_stack.append(board.to_fen())
    assert_equal(
        '''
                 rnbqkbnr
                 -ppppppp
                 p-------
                 ----P---
                 --------
                 --------
                 PPPP-PPP
                 RNBQKBNR
                 '''.replace(' ', '').strip(), board.to_grid())
    move = Move(51, 35)
    record = board.make_move(move)
    record_stack.append(record)
    assert_equal(record.from_square, move.from_square)
    assert_equal(record.to_square, move.to_square)
    fen_stack.append(board.to_fen())
    assert_equal(
        '''
                 rnbqkbnr
                 -pp-pppp
                 p--*----
                 ---pP---
                 --------
                 --------
                 PPPP-PPP
                 RNBQKBNR
                 '''.replace(' ', '').strip(), board.to_grid())
    assert_equal(board.get_enpassant(), 43)
    move = Move(36, 43)
    record = board.make_move(move)
    record_stack.append(record)
    assert_equal(record.from_square, move.from_square)
    assert_equal(record.to_square, move.to_square)
    fen_stack.append(board.to_fen())
    assert_equal(
        '''
                 rnbqkbnr
                 -pp-pppp
                 p--P----
                 --------
                 --------
                 --------
                 PPPP-PPP
                 RNBQKBNR
                 '''.replace(' ', '').strip(), board.to_grid())
    record_stack.append(board.make_move(Move(52, 36)))
    fen_stack.append(board.to_fen())
    assert_equal(
        '''
                 rnbqkbnr
                 -pp--ppp
                 p--P*---
                 ----p---
                 --------
                 --------
                 PPPP-PPP
                 RNBQKBNR
                 '''.replace(' ', '').strip(), board.to_grid())
    fen = fen_stack.pop(-1)
    assert_equal(fen, board.to_fen())
    while record_stack:
        record = record_stack.pop(-1)
        board.unmake_move(record)
        fen = fen_stack.pop(-1)
        assert_equal(fen, board.to_fen())
    assert_equal(board.to_fen(), starting_fen)

    # Try white castle king side
    board = BitBoardState.from_fen(
        'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQK2R w KQkq - 0 1')
    record = board.make_move(Move(4, 6))
    assert_equal(board.to_fen(),
                 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQ1RK1 b kq - 1 1')
    board.unmake_move(record)
    assert_equal(board.to_fen(),
                 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQK2R w KQkq - 0 1')

    # Try white castle queen side
    board = BitBoardState.from_fen(
        'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/R3KBNR w KQkq - 0 1')
    record = board.make_move(Move(4, 2))
    assert_equal(board.to_fen(),
                 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/2KR1BNR b kq - 1 1')
    board.unmake_move(record)
    assert_equal(board.to_fen(),
                 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/R3KBNR w KQkq - 0 1')

    # Try black castle king side
    board = BitBoardState.from_fen(
        'rnbqk2r/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR b KQkq - 0 1')
    record = board.make_move(Move(60, 62))
    assert_equal(board.to_fen(),
                 'rnbq1rk1/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQ - 1 2')
    board.unmake_move(record)
    assert_equal(board.to_fen(),
                 'rnbqk2r/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR b KQkq - 0 1')

    # Try black castle queen side
    board = BitBoardState.from_fen(
        'r3kbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR b KQkq - 0 1')
    record = board.make_move(Move(60, 58))
    assert_equal(board.to_fen(),
                 '2kr1bnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQ - 1 2')
    board.unmake_move(record)
    assert_equal(board.to_fen(),
                 'r3kbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR b KQkq - 0 1')
Esempio n. 5
0
def test_quiet_queen_moves():
    fen = 'rnbqkbnr/pppppppp/8/8/8/3P4/PPP1PPPP/RNBQKBNR w KQkq - 0 1'
    moves = set(BitBoardState.from_fen(fen).quiet_queen_moves())
    assert_equal(moves, {Move(3, 11)})

    fen = 'rnbqkbnr/pppppppp/8/8/8/2PP4/PP2PPPP/RNBQKBNR w KQkq - 0 1'
    moves = set(BitBoardState.from_fen(fen).quiet_queen_moves())
    assert_equal(moves, {Move(3, 11), Move(3, 10), Move(3, 17), Move(3, 24)})

    fen = 'rnbqkbnr/pppppppp/8/8/8/1pPP4/PP2PPPP/RNBQKBNR w KQkq - 0 1'
    moves = set(BitBoardState.from_fen(fen).quiet_queen_moves())
    assert_equal(moves, {Move(3, 11), Move(3, 10)})

    fen = 'rnbqkbnQ/ppppppp1/8/8/8/1pPP4/PP2PPPP/RNBQKBNR w KQkq - 0 1'
    moves = set(BitBoardState.from_fen(fen).quiet_queen_moves())
    assert_equal(
        moves, {
            Move(3, 11),
            Move(3, 10),
            Move(63, 63 - 8),
            Move(63, 63 - 16),
            Move(63, 63 - 24),
            Move(63, 63 - 32),
            Move(63, 63 - 40)
        })

    fen = 'rnbqkbnr/ppp1pppp/8/8/8/3P4/PPP1PPPP/RNBQKBNR b KQkq - 0 1'
    moves = set(BitBoardState.from_fen(fen).quiet_queen_moves())
    assert_equal(moves, {
        Move(59, 59 - 8),
        Move(59, 59 - 16),
        Move(59, 59 - 24),
        Move(59, 59 - 32)
    })

    # Make sure a pinned queen doesn't move out of the pin ray
    fen = 'rnb1kbnr/4q3/8/8/8/8/PPPPRPPP/RNBQKBNR b KQkq - 0 1'
    moves = set(BitBoardState.from_fen(fen).quiet_queen_moves())
    assert_equal(moves, {
        Move(52, 52 - 8),
        Move(52, 52 - 16),
        Move(52, 52 - 24),
        Move(52, 52 - 32)
    })
Esempio n. 6
0
def chess_move_to_white_move(chess_move):
    promotion_dict = {5: 'Q', 4: 'R', 3: 'B', 2: 'N'}
    mv = Move(
        chess_move.from_square, chess_move.to_square,
        promotion_dict[chess_move.promotion] if chess_move.promotion else 'no')
    return mv
Esempio n. 7
0
def chess_move_to_black_move(chess_move):
    promotion_dict = {5: 'q', 4: 'r', 3: 'b', 2: 'n'}
    mv = Move(
        chess_move.from_square, chess_move.to_square,
        promotion_dict[chess_move.promotion] if chess_move.promotion else 'no')
    return mv
Esempio n. 8
0
 def update(self, move):
     print(move)
     print(Move.from_long_form(self.board.whites_turn, move))
     print(Move.from_long_form(self.board.whites_turn, move).to_long_form())
     self.board.make_move(Move.from_long_form(self.board.whites_turn, move))