|
|
|
@ -311,6 +311,128 @@ const int BLACK_CHECK_POS2 = F8;
|
|
|
|
|
const std::vector<int> BCASTLING_CHECK_MOVES = {
|
|
|
|
|
D7, E7, F7
|
|
|
|
|
};
|
|
|
|
|
// Check that the dumb_move function actually moves the rook and the king to the right squares.
|
|
|
|
|
const int CASTLE_FROM_POS = E1;
|
|
|
|
|
const int CASTLE_TO_POS = G1;
|
|
|
|
|
const int BCASTLE_FROM_POS = E8;
|
|
|
|
|
const int BCASTLE_TO_POS = G8;
|
|
|
|
|
|
|
|
|
|
const int CASTLE_FROM_QPOS = E1;
|
|
|
|
|
const int CASTLE_TO_QPOS = C1;
|
|
|
|
|
const int BCASTLE_FROM_QPOS = E8;
|
|
|
|
|
const int BCASTLE_TO_QPOS = C8;
|
|
|
|
|
|
|
|
|
|
const std::array<PieceType, 120> CASTLE_BOARD = {
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, B_ROOK, NONE, NONE, NONE, B_KING, NONE, NONE, B_ROOK, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, W_ROOK, NONE, NONE, NONE, W_KING, NONE, NONE, W_ROOK, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV
|
|
|
|
|
};
|
|
|
|
|
const std::array<PieceType, 120> CASTLE_BOARD_WK = {
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, B_ROOK, NONE, NONE, NONE, B_KING, NONE, NONE, B_ROOK, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, W_ROOK, NONE, NONE, NONE, NONE, W_ROOK, W_KING, NONE, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV
|
|
|
|
|
};
|
|
|
|
|
const std::array<PieceType, 120> CASTLE_BOARD_BK = {
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, B_ROOK, NONE, NONE, NONE, NONE, B_ROOK, B_KING, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, W_ROOK, NONE, NONE, NONE, W_KING, NONE, NONE, W_ROOK, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV
|
|
|
|
|
};
|
|
|
|
|
const std::array<PieceType, 120> CASTLE_BOARD_WQ = {
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, B_ROOK, NONE, NONE, NONE, B_KING, NONE, NONE, B_ROOK, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, W_KING, W_ROOK, NONE, NONE, NONE, W_ROOK, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV
|
|
|
|
|
};
|
|
|
|
|
const std::array<PieceType, 120> CASTLE_BOARD_BQ = {
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, NONE, NONE, B_KING, B_ROOK, NONE, NONE, NONE, B_ROOK, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, W_ROOK, NONE, NONE, NONE, W_KING, NONE, NONE, W_ROOK, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Check that castling is disallowed when there is a piece blocking the rook queenside.
|
|
|
|
|
const int CASTLE_BLOCKED_POS = E1;
|
|
|
|
|
const std::array<PieceType, 120> CASTLE_BLOCKED_BOARD = {
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, B_ROOK, NONE, NONE, NONE, B_KING, NONE, NONE, B_ROOK, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, W_ROOK, W_KNIGHT, NONE, NONE, W_KING, NONE, NONE, W_ROOK, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV
|
|
|
|
|
};
|
|
|
|
|
const std::vector<int> CASTLE_BLOCKED_MOVES = {
|
|
|
|
|
D2, E2, F2,
|
|
|
|
|
F1, D1, G1
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const int CASTLE_BLOCKED_QPOS = E8;
|
|
|
|
|
const std::array<PieceType, 120> CASTLE_BLOCKED_QBOARD = {
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, B_ROOK, B_KNIGHT, NONE, NONE, B_KING, NONE, NONE, B_ROOK, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, INV,
|
|
|
|
|
INV, W_ROOK, W_KNIGHT, NONE, NONE, W_KING, NONE, NONE, W_ROOK, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV,
|
|
|
|
|
INV, INV, INV, INV, INV, INV, INV, INV, INV, INV
|
|
|
|
|
};
|
|
|
|
|
const std::vector<int> CASTLE_BLOCKED_QMOVES = {
|
|
|
|
|
D7, E7, F7,
|
|
|
|
|
F8, D8, G8
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Check tests for king
|
|
|
|
|
|
|
|
|
|