Minor changes, add more tests

This commit is contained in:
Mattia Giambirtone 2024-04-13 21:23:12 +02:00
parent 7a885b65a0
commit 75d93a0d59
2 changed files with 172 additions and 130 deletions

View File

@ -81,14 +81,14 @@ type
# Number of half-moves that were performed
# to reach this position starting from the
# root of the tree
plyFromRoot: int16
plyFromRoot: int8
# Number of half moves since
# last piece capture or pawn movement.
# Used for the 50-move rule
halfMoveClock: int8
# Full move counter. Increments
# every 2 ply
fullMoveCount: int16
fullMoveCount: int8
# En passant target square (see https://en.wikipedia.org/wiki/En_passant)
enPassantSquare*: Location
# Locations of all pieces
@ -676,6 +676,24 @@ proc inCheck*(self: ChessBoard, color: PieceColor = None): bool =
discard
proc inDoubleCheck*(self: ChessBoard, color: PieceColor = None): bool =
## Returns whether the given color's
## king is in double check. If the color is
## set to None, checks are checked
## for the active color's king
var color = color
if color == None:
color = self.getActiveColor()
case color:
of White:
result = self.getAttackers(self.position.pieces.white.king, Black).len() > 1
of Black:
result = self.getAttackers(self.position.pieces.black.king, White).len() > 1
else:
# Unreachable
discard
proc canCastle*(self: ChessBoard, color: PieceColor = None): tuple[queen, king: bool] {.inline.} =
## Returns the sides on which castling is allowed
## for the given color. If the color is None, the
@ -2330,6 +2348,8 @@ proc main: int =
when isMainModule:
proc testPiece(piece: Piece, kind: PieceKind, color: PieceColor) =
doAssert piece.kind == kind and piece.color == color, &"expected piece of kind {kind} and color {color}, got {piece.kind} / {piece.color} instead"

View File

@ -1,128 +1,150 @@
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1
4k3/8/8/8/8/8/8/4K2R w K - 0 1
4k3/8/8/8/8/8/8/R3K3 w Q - 0 1
4k2r/8/8/8/8/8/8/4K3 w k - 0 1
r3k3/8/8/8/8/8/8/4K3 w q - 0 1
4k3/8/8/8/8/8/8/R3K2R w KQ - 0 1
r3k2r/8/8/8/8/8/8/4K3 w kq - 0 1
8/8/8/8/8/8/6k1/4K2R w K - 0 1
8/8/8/8/8/8/1k6/R3K3 w Q - 0 1
4k2r/6K1/8/8/8/8/8/8 w k - 0 1
r3k3/1K6/8/8/8/8/8/8 w q - 0 1
r3k2r/8/8/8/8/8/8/R3K2R w KQkq - 0 1
r3k2r/8/8/8/8/8/8/1R2K2R w Kkq - 0 1
r3k2r/8/8/8/8/8/8/2R1K2R w Kkq - 0 1
r3k2r/8/8/8/8/8/8/R3K1R1 w Qkq - 0 1
1r2k2r/8/8/8/8/8/8/R3K2R w KQk - 0 1
2r1k2r/8/8/8/8/8/8/R3K2R w KQk - 0 1
r3k1r1/8/8/8/8/8/8/R3K2R w KQq - 0 1
4k3/8/8/8/8/8/8/4K2R b K - 0 1
4k3/8/8/8/8/8/8/R3K3 b Q - 0 1
4k2r/8/8/8/8/8/8/4K3 b k - 0 1
r3k3/8/8/8/8/8/8/4K3 b q - 0 1
4k3/8/8/8/8/8/8/R3K2R b KQ - 0 1
r3k2r/8/8/8/8/8/8/4K3 b kq - 0 1
8/8/8/8/8/8/6k1/4K2R b K - 0 1
8/8/8/8/8/8/1k6/R3K3 b Q - 0 1
4k2r/6K1/8/8/8/8/8/8 b k - 0 1
r3k3/1K6/8/8/8/8/8/8 b q - 0 1
r3k2r/8/8/8/8/8/8/R3K2R b KQkq - 0 1
r3k2r/8/8/8/8/8/8/1R2K2R b Kkq - 0 1
r3k2r/8/8/8/8/8/8/2R1K2R b Kkq - 0 1
r3k2r/8/8/8/8/8/8/R3K1R1 b Qkq - 0 1
1r2k2r/8/8/8/8/8/8/R3K2R b KQk - 0 1
2r1k2r/8/8/8/8/8/8/R3K2R b KQk - 0 1
r3k1r1/8/8/8/8/8/8/R3K2R b KQq - 0 1
8/1n4N1/2k5/8/8/5K2/1N4n1/8 w - - 0 1
8/1k6/8/5N2/8/4n3/8/2K5 w - - 0 1
8/8/4k3/3Nn3/3nN3/4K3/8/8 w - - 0 1
K7/8/2n5/1n6/8/8/8/k6N w - - 0 1
k7/8/2N5/1N6/8/8/8/K6n w - - 0 1
8/1n4N1/2k5/8/8/5K2/1N4n1/8 b - - 0 1
8/1k6/8/5N2/8/4n3/8/2K5 b - - 0 1
8/8/3K4/3Nn3/3nN3/4k3/8/8 b - - 0 1
K7/8/2n5/1n6/8/8/8/k6N b - - 0 1
k7/8/2N5/1N6/8/8/8/K6n b - - 0 1
B6b/8/8/8/2K5/4k3/8/b6B w - - 0 1
8/8/1B6/7b/7k/8/2B1b3/7K w - - 0 1
k7/B7/1B6/1B6/8/8/8/K6b w - - 0 1
K7/b7/1b6/1b6/8/8/8/k6B w - - 0 1
B6b/8/8/8/2K5/5k2/8/b6B b - - 0 1
8/8/1B6/7b/7k/8/2B1b3/7K b - - 0 1
k7/B7/1B6/1B6/8/8/8/K6b b - - 0 1
K7/b7/1b6/1b6/8/8/8/k6B b - - 0 1
7k/RR6/8/8/8/8/rr6/7K w - - 0 1
R6r/8/8/2K5/5k2/8/8/r6R w - - 0 1
7k/RR6/8/8/8/8/rr6/7K b - - 0 1
R6r/8/8/2K5/5k2/8/8/r6R b - - 0 1
6kq/8/8/8/8/8/8/7K w - - 0 1
6KQ/8/8/8/8/8/8/7k b - - 0 1
K7/8/8/3Q4/4q3/8/8/7k w - - 0 1
6qk/8/8/8/8/8/8/7K b - - 0 1
6KQ/8/8/8/8/8/8/7k b - - 0 1
K7/8/8/3Q4/4q3/8/8/7k b - - 0 1
8/8/8/8/8/K7/P7/k7 w - - 0 1
8/8/8/8/8/7K/7P/7k w - - 0 1
K7/p7/k7/8/8/8/8/8 w - - 0 1
7K/7p/7k/8/8/8/8/8 w - - 0 1
8/2k1p3/3pP3/3P2K1/8/8/8/8 w - - 0 1
8/8/8/8/8/K7/P7/k7 b - - 0 1
8/8/8/8/8/7K/7P/7k b - - 0 1
K7/p7/k7/8/8/8/8/8 b - - 0 1
7K/7p/7k/8/8/8/8/8 b - - 0 1
8/2k1p3/3pP3/3P2K1/8/8/8/8 b - - 0 1
8/8/8/8/8/4k3/4P3/4K3 w - - 0 1
4k3/4p3/4K3/8/8/8/8/8 b - - 0 1
8/8/7k/7p/7P/7K/8/8 w - - 0 1
8/8/k7/p7/P7/K7/8/8 w - - 0 1
8/8/3k4/3p4/3P4/3K4/8/8 w - - 0 1
8/3k4/3p4/8/3P4/3K4/8/8 w - - 0 1
8/8/3k4/3p4/8/3P4/3K4/8 w - - 0 1
k7/8/3p4/8/3P4/8/8/7K w - - 0 1
8/8/7k/7p/7P/7K/8/8 b - - 0 1
8/8/k7/p7/P7/K7/8/8 b - - 0 1
8/8/3k4/3p4/3P4/3K4/8/8 b - - 0 1
8/3k4/3p4/8/3P4/3K4/8/8 b - - 0 1
8/8/3k4/3p4/8/3P4/3K4/8 b - - 0 1
k7/8/3p4/8/3P4/8/8/7K b - - 0 1
7k/3p4/8/8/3P4/8/8/K7 w - - 0 1
7k/8/8/3p4/8/8/3P4/K7 w - - 0 1
k7/8/8/7p/6P1/8/8/K7 w - - 0 1
k7/8/7p/8/8/6P1/8/K7 w - - 0 1
k7/8/8/6p1/7P/8/8/K7 w - - 0 1
k7/8/6p1/8/8/7P/8/K7 w - - 0 1
k7/8/8/3p4/4p3/8/8/7K w - - 0 1
k7/8/3p4/8/8/4P3/8/7K w - - 0 1
7k/3p4/8/8/3P4/8/8/K7 b - - 0 1
7k/8/8/3p4/8/8/3P4/K7 b - - 0 1
k7/8/8/7p/6P1/8/8/K7 b - - 0 1
k7/8/7p/8/8/6P1/8/K7 b - - 0 1
k7/8/8/6p1/7P/8/8/K7 b - - 0 1
k7/8/6p1/8/8/7P/8/K7 b - - 0 1
k7/8/8/3p4/4p3/8/8/7K b - - 0 1
k7/8/3p4/8/8/4P3/8/7K b - - 0 1
7k/8/8/p7/1P6/8/8/7K w - - 0 1
7k/8/p7/8/8/1P6/8/7K w - - 0 1
7k/8/8/1p6/P7/8/8/7K w - - 0 1
7k/8/1p6/8/8/P7/8/7K w - - 0 1
k7/7p/8/8/8/8/6P1/K7 w - - 0 1
k7/6p1/8/8/8/8/7P/K7 w - - 0 1
3k4/3pp3/8/8/8/8/3PP3/3K4 w - - 0 1
7k/8/8/p7/1P6/8/8/7K b - - 0 1
7k/8/p7/8/8/1P6/8/7K b - - 0 1
7k/8/8/1p6/P7/8/8/7K b - - 0 1
7k/8/1p6/8/8/P7/8/7K b - - 0 1
k7/7p/8/8/8/8/6P1/K7 b - - 0 1
k7/6p1/8/8/8/8/7P/K7 b - - 0 1
3k4/3pp3/8/8/8/8/3PP3/3K4 b - - 0 1
8/Pk6/8/8/8/8/6Kp/8 w - - 0 1
n1n5/1Pk5/8/8/8/8/5Kp1/5N1N w - - 0 1
8/PPPk4/8/8/8/8/4Kppp/8 w - - 0 1
n1n5/PPPk4/8/8/8/8/4Kppp/5N1N w - - 0 1
8/Pk6/8/8/8/8/6Kp/8 b - - 0 1
n1n5/1Pk5/8/8/8/8/5Kp1/5N1N b - - 0 1
8/PPPk4/8/8/8/8/4Kppp/8 b - - 0 1
n1n5/PPPk4/8/8/8/8/4Kppp/5N1N b - - 0 1
8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - - 0 1
rnbqkb1r/ppppp1pp/7n/4Pp2/8/8/PPPP1PPP/RNBQKBNR w KQkq f6 0 3
1r2k2r/8/8/8/8/8/8/R3K2R b KQk - 0 1
1r2k2r/8/8/8/8/8/8/R3K2R w KQk - 0 1
2K2r2/4P3/8/8/8/8/8/3k4 w - - 0 1
2kr3r/p1ppqpb1/bn2Qnp1/3PN3/1p2P3/2N5/PPPBBPPP/R3K2R b KQ - 3 2
2r1k2r/8/8/8/8/8/8/R3K2R b KQk - 0 1
2r1k2r/8/8/8/8/8/8/R3K2R w KQk - 0 1
2r5/3pk3/8/2P5/8/2K5/8/8 w - - 5 4
3k4/3p4/8/K1P4r/8/8/8/8 b - - 0 1
3k4/3pp3/8/8/8/8/3PP3/3K4 b - - 0 1
3k4/3pp3/8/8/8/8/3PP3/3K4 w - - 0 1
3k4/8/8/8/8/8/8/R3K3 w Q - 0 1
4k2r/6K1/8/8/8/8/8/8 b k - 0 1
4k2r/6K1/8/8/8/8/8/8 w k - 0 1
4k2r/8/8/8/8/8/8/4K3 b k - 0 1
4k2r/8/8/8/8/8/8/4K3 w k - 0 1
4k3/1P6/8/8/8/8/K7/8 w - - 0 1
4k3/4p3/4K3/8/8/8/8/8 b - - 0 1
4k3/8/8/8/8/8/8/4K2R b K - 0 1
4k3/8/8/8/8/8/8/4K2R w K - 0 1
4k3/8/8/8/8/8/8/R3K2R b KQ - 0 1
4k3/8/8/8/8/8/8/R3K2R w KQ - 0 1
4k3/8/8/8/8/8/8/R3K3 b Q - 0 1
4k3/8/8/8/8/8/8/R3K3 w Q - 0 1
5k2/8/8/8/8/8/8/4K2R w K - 0 1
6KQ/8/8/8/8/8/8/7k b - - 0 1
6kq/8/8/8/8/8/8/7K w - - 0 1
6qk/8/8/8/8/8/8/7K b - - 0 1
7k/3p4/8/8/3P4/8/8/K7 b - - 0 1
7k/3p4/8/8/3P4/8/8/K7 w - - 0 1
7K/7p/7k/8/8/8/8/8 b - - 0 1
7K/7p/7k/8/8/8/8/8 w - - 0 1
7k/8/1p6/8/8/P7/8/7K b - - 0 1
7k/8/1p6/8/8/P7/8/7K w - - 0 1
7k/8/8/1p6/P7/8/8/7K b - - 0 1
7k/8/8/1p6/P7/8/8/7K w - - 0 1
7k/8/8/3p4/8/8/3P4/K7 b - - 0 1
7k/8/8/3p4/8/8/3P4/K7 w - - 0 1
7k/8/8/p7/1P6/8/8/7K b - - 0 1
7k/8/8/p7/1P6/8/8/7K w - - 0 1
7k/8/p7/8/8/1P6/8/7K b - - 0 1
7k/8/p7/8/8/1P6/8/7K w - - 0 1
7k/RR6/8/8/8/8/rr6/7K b - - 0 1
7k/RR6/8/8/8/8/rr6/7K w - - 0 1
8/1k6/8/5N2/8/4n3/8/2K5 b - - 0 1
8/1k6/8/5N2/8/4n3/8/2K5 w - - 0 1
8/1n4N1/2k5/8/8/5K2/1N4n1/8 b - - 0 1
8/1n4N1/2k5/8/8/5K2/1N4n1/8 w - - 0 1
8/2k1p3/3pP3/3P2K1/8/8/8/8 b - - 0 1
8/2k1p3/3pP3/3P2K1/8/8/8/8 w - - 0 1
8/2p5/3p4/KP5r/1R3p1k/8/4P1P1/8 w - - 0 1
8/3k4/3p4/8/3P4/3K4/8/8 b - - 0 1
8/3k4/3p4/8/3P4/3K4/8/8 w - - 0 1
8/8/1B6/7b/7k/8/2B1b3/7K b - - 0 1
8/8/1B6/7b/7k/8/2B1b3/7K w - - 0 1
8/8/1k6/2b5/2pP4/8/5K2/8 b - d3 0 1
8/8/1P2K3/8/2n5/1q6/8/5k2 b - - 0 1
8/8/2k5/5q2/5n2/8/5K2/8 b - - 0 1
8/8/3K4/3Nn3/3nN3/4k3/8/8 b - - 0 1
8/8/3k4/3p4/3P4/3K4/8/8 b - - 0 1
8/8/3k4/3p4/3P4/3K4/8/8 w - - 0 1
8/8/3k4/3p4/8/3P4/3K4/8 b - - 0 1
8/8/3k4/3p4/8/3P4/3K4/8 w - - 0 1
8/8/4k3/3Nn3/3nN3/4K3/8/8 w - - 0 1
8/8/4k3/8/2p5/8/B2P2K1/8 w - - 0 1
8/8/7k/7p/7P/7K/8/8 b - - 0 1
8/8/7k/7p/7P/7K/8/8 w - - 0 1
8/8/8/2k5/2pP4/8/B7/4K3 b - d3 0 3
8/8/8/8/8/4k3/4P3/4K3 w - - 0 1
8/8/8/8/8/7K/7P/7k b - - 0 1
8/8/8/8/8/7K/7P/7k w - - 0 1
8/8/8/8/8/8/1k6/R3K3 b Q - 0 1
8/8/8/8/8/8/1k6/R3K3 w Q - 0 1
8/8/8/8/8/8/6k1/4K2R b K - 0 1
8/8/8/8/8/8/6k1/4K2R w K - 0 1
8/8/8/8/8/K7/P7/k7 b - - 0 1
8/8/8/8/8/K7/P7/k7 w - - 0 1
8/8/k7/p7/P7/K7/8/8 b - - 0 1
8/8/k7/p7/P7/K7/8/8 w - - 0 1
8/k1P5/8/1K6/8/8/8/8 w - - 0 1
8/P1k5/K7/8/8/8/8/8 w - - 0 1
8/Pk6/8/8/8/8/6Kp/8 b - - 0 1
8/Pk6/8/8/8/8/6Kp/8 w - - 0 1
8/PPPk4/8/8/8/8/4Kppp/8 b - - 0 1
8/PPPk4/8/8/8/8/4Kppp/8 w - - 0 1
B6b/8/8/8/2K5/4k3/8/b6B w - - 0 1
B6b/8/8/8/2K5/5k2/8/b6B b - - 0 1
K1k5/8/P7/8/8/8/8/8 w - - 0 1
k7/6p1/8/8/8/8/7P/K7 b - - 0 1
k7/6p1/8/8/8/8/7P/K7 w - - 0 1
k7/7p/8/8/8/8/6P1/K7 b - - 0 1
k7/7p/8/8/8/8/6P1/K7 w - - 0 1
K7/8/2n5/1n6/8/8/8/k6N b - - 0 1
k7/8/2N5/1N6/8/8/8/K6n b - - 0 1
K7/8/2n5/1n6/8/8/8/k6N w - - 0 1
k7/8/2N5/1N6/8/8/8/K6n w - - 0 1
k7/8/3p4/8/3P4/8/8/7K b - - 0 1
k7/8/3p4/8/3P4/8/8/7K w - - 0 1
k7/8/3p4/8/8/4P3/8/7K b - - 0 1
k7/8/3p4/8/8/4P3/8/7K w - - 0 1
k7/8/6p1/8/8/7P/8/K7 b - - 0 1
k7/8/6p1/8/8/7P/8/K7 w - - 0 1
k7/8/7p/8/8/6P1/8/K7 b - - 0 1
k7/8/7p/8/8/6P1/8/K7 w - - 0 1
k7/8/8/3p4/4p3/8/8/7K b - - 0 1
k7/8/8/3p4/4p3/8/8/7K w - - 0 1
K7/8/8/3Q4/4q3/8/8/7k b - - 0 1
K7/8/8/3Q4/4q3/8/8/7k w - - 0 1
k7/8/8/6p1/7P/8/8/K7 b - - 0 1
k7/8/8/6p1/7P/8/8/K7 w - - 0 1
k7/8/8/7p/6P1/8/8/K7 b - - 0 1
k7/8/8/7p/6P1/8/8/K7 w - - 0 1
k7/B7/1B6/1B6/8/8/8/K6b b - - 0 1
K7/b7/1b6/1b6/8/8/8/k6B b - - 0 1
k7/B7/1B6/1B6/8/8/8/K6b w - - 0 1
K7/b7/1b6/1b6/8/8/8/k6B w - - 0 1
K7/p7/k7/8/8/8/8/8 b - - 0 1
K7/p7/k7/8/8/8/8/8 w - - 0 1
n1n5/1Pk5/8/8/8/8/5Kp1/5N1N b - - 0 1
n1n5/1Pk5/8/8/8/8/5Kp1/5N1N w - - 0 1
n1n5/PPPk4/8/8/8/8/4Kppp/5N1N b - - 0 1
n1n5/PPPk4/8/8/8/8/4Kppp/5N1N w - - 0 1
r1bqkbnr/pppppppp/n7/8/8/P7/1PPPPPPP/RNBQKBNR w KQkq - 2 2
r3k1r1/8/8/8/8/8/8/R3K2R b KQq - 0 1
r3k1r1/8/8/8/8/8/8/R3K2R w KQq - 0 1
r3k2r/1b4bq/8/8/8/8/7B/R3K2R w KQkq - 0 1
r3k2r/8/3Q4/8/8/5q2/8/R3K2R b KQkq - 0 1
r3k2r/8/8/8/8/8/8/1R2K2R b Kkq - 0 1
r3k2r/8/8/8/8/8/8/1R2K2R w Kkq - 0 1
r3k2r/8/8/8/8/8/8/2R1K2R b Kkq - 0 1
r3k2r/8/8/8/8/8/8/2R1K2R w Kkq - 0 1
r3k2r/8/8/8/8/8/8/4K3 b kq - 0 1
r3k2r/8/8/8/8/8/8/4K3 w kq - 0 1
r3k2r/8/8/8/8/8/8/R3K1R1 b Qkq - 0 1
r3k2r/8/8/8/8/8/8/R3K1R1 w Qkq - 0 1
r3k2r/8/8/8/8/8/8/R3K2R b KQkq - 0 1
r3k2r/8/8/8/8/8/8/R3K2R w KQkq - 0 1
r3k2r/p1pp1pb1/bn2Qnp1/2qPN3/1p2P3/2N5/PPPBBPPP/R3K2R b KQkq - 3 2
r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1
r3k3/1K6/8/8/8/8/8/8 b q - 0 1
r3k3/1K6/8/8/8/8/8/8 w q - 0 1
r3k3/8/8/8/8/8/8/4K3 b q - 0 1
r3k3/8/8/8/8/8/8/4K3 w q - 0 1
r4rk1/1pp1qppp/p1np1n2/2b1p1B1/2B1P1b1/P1NP1N2/1PP1QPPP/R4RK1 w - - 0 10
r6r/1b2k1bq/8/8/7B/8/8/R3K2R b KQ - 3 2
R6r/8/8/2K5/5k2/8/8/r6R b - - 0 1
R6r/8/8/2K5/5k2/8/8/r6R w - - 0 1
rnb2k1r/pp1Pbppp/2p5/q7/2B5/8/PPPQNnPP/RNB1K2R w KQ - 3 9
rnbq1k1r/pp1Pbppp/2p5/8/2B5/8/PPP1NnPP/RNBQK2R w KQ - 1 8
rnbqkb1r/ppppp1pp/7n/4Pp2/8/8/PPPP1PPP/RNBQKBNR w KQkq f6 0 3
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1