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
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)
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
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
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]
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)
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)
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)
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
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)
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)
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)
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 ]))
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)
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)