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)})
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')
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)
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')
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) })
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
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
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))