mirror of
https://github.com/MSWS/Chess.git
synced 2025-12-05 21:30:23 -08:00
``` Add comprehensive test cases for chess scenarios and validate JSON parsing in integration tests - Add `integration_test.go` to handle JSON test cases, parse data, and validate chess move generation against expected results. - Add `checkmates.json` with test cases for various checkmate scenarios, including mirrors and edge cases. - Add `famous.json` detailing positions and test sequences from historical chess games for validation. - Add `standard.json` to test and verify early-game chess positions and standard move transitions. - Add `promotions.json` with detailed cases for pawn promotions, including edge scenarios and forced moves. - Add additional JSON files (`castling.json`, `taxing.json`, `pawns.json`, `stalemates.json`) with test data for specific chess rule validations and edge cases like castling, stalemates, and en passant captures. ``` [testdata/integration_test.go] - Adds a new test file to validate JSON-defined chess scenarios against board states and expected moves. - Defines structs for handling test data, including descriptions, starting positions, and expected outcomes. - Implements a test function to read JSON files in the directory, parse them, and execute tests on the data. - Introduces helper functions to parse JSON data and iterate through test cases. - Adds logic to compare expected moves from JSON with generated moves from the chess board state. - Includes error handling for file reading, JSON unmarshalling, and position validation from the chess board. [testdata/checkmates.json] - Added a new JSON file containing test cases for checkmate scenarios. - Each test case includes a FEN description and an expected output. - Descriptions and tests cover specific checkmate types: ladder mate, smothered mate, en passant situations, and minimal-piece mates. - Added transposed positions for each checkmate scenario to validate mirrored setups. [testdata/famous.json] - Added new JSON file containing chess positions and test cases. - Included a "description" field specifying the context of the chess problems. - Each test case specifies a starting position (given by a FEN string) and a list of moves along with their corresponding resulting positions (also as FEN strings). - Added detailed test cases for two famous chess games: "The Game of the Century" and "The Gold Coins Game". - For "The Game of the Century", provided multiple legal move sequences and their outcomes from a specific mid-game position. - For "The Gold Coins Game", included potential moves and their resulting positions leading to the iconic "Gold Coin move". - Enriched some moves with descriptive comments for historical or tactical significance. - Added various chess scenarios to thoroughly test a move generator's capability to handle diverse situations. [testdata/standard.json] - Added a new JSON file containing test cases for specific chess board positions. - The JSON includes: - Definitions of starting positions using FEN strings. - Descriptions of the starting positions, such as "Standard starting position" and "Ruy Lopez opening". - Expected potential moves with resulting FEN states after each move. These moves explore various legal possibilities from the starting positions. - The file contains test cases primarily for validating early-game configurations and various move transitions in chess. [testdata/promotions.json] - Added a new file containing JSON data describing chess test cases focused on pawn promotions. - Included multiple scenarios covering basic promotion, transposed positions, and edge cases such as forced promotion to escape check or mate. - Detailed expected moves and resulting board configurations in FEN format for each scenario. - Descriptions accompanied each test case to clarify the situations being tested, like promoting via capture, forced promotions, or specific checks on the king. - Covered scenarios where multiple promotion options exist, including promotions resulting in check or checkmate. [testdata/castling.json] - Added a new JSON file for castling test cases. - Created test cases for all possible castling scenarios, including: - Normal castling for both sides. - Castling when prohibited due to an attacking piece (rook, bishop, knight, queen, king, and pawn). - Castling into or through check. - Castling when the king or rooks have moved. - Implemented edge cases, including en passant and pawn-promotion interference with castling rights. - Included transposed positions to test symmetry and equivalence in board states. - Supported scenarios where attacks on rooks do not affect castling ability. - Verified that castling remains allowed despite irrelevant pawn attacks or unoccupied intermediate squares. [testdata/taxing.json] - Added a large JSON file containing test cases and expected results for chess positions. - Introduced different scenarios to analyze edge cases: - Positions with pieces in maximal quantity for a specific type (e.g., maximum knights, maximum queens, maximum bishops). - Transposed positions to verify symmetric behavior. - Special rules scenarios like prohibited en passant captures due to check. - Organized data with a `description` for each scenario, `start` positions in FEN format, and corresponding `expected` moves with their resulting positions. - Ensured diverse test coverage, including: - Positions designed to stress test move generation. - Positions covering intricate rules interactions like pawn structure scenarios (en passant). - Positions with multiple complexity levels (low-mobility vs high-mobility positions). [testdata/pawns.json] - Added a new JSON file defining test cases involving pawn positions in chess. - The test cases cover various scenarios with en passant possibilities, moves without en passant, and full pawn setups. - Each test scenario details the starting board position (FEN), a description, and expected moves along with the resulting FEN after each move. - Includes mirrored or transposed versions of positions to test symmetry and edge cases. - Scenarios test both legal and illegal moves, focusing on edge cases like restricted en passant and pawn movement logic. - Ensures test coverage for complex pawn interactions, including rows with dense pawn positions and potential captures. - Scenarios also evaluate king movements in relation to pawns. - Emphasizes positions where rule-specific mechanics, like en passant, are critical to validate correctness. [testdata/stalemates.json] - Added a new JSON test data file for stalemate cases in chess. - Included multiple test cases with starting positions (FEN notation) and expected results. - Each test case represents a specific stalemate scenario or its transpose (mirrored version). - Some descriptions provide details about positions, such as the shortest stalemate possible. - Empty arrays are used for expected outputs, implying no further data is expected from these stalemate setups.
1317 lines
35 KiB
JSON
1317 lines
35 KiB
JSON
{
|
|
"description": "Test cases involving pawn promotions.",
|
|
"testCases": [
|
|
{
|
|
"start": {
|
|
"fen": "1k6/5P2/8/8/8/8/8/4K3 w - - 20 1",
|
|
"description": "A simple promotion, with some chances to check opposing king."
|
|
},
|
|
"expected": [
|
|
{
|
|
"move": "Kd1",
|
|
"fen": "1k6/5P2/8/8/8/8/8/3K4 b - - 21 1"
|
|
},
|
|
{
|
|
"move": "Kf1",
|
|
"fen": "1k6/5P2/8/8/8/8/8/5K2 b - - 21 1"
|
|
},
|
|
{
|
|
"move": "Kd2",
|
|
"fen": "1k6/5P2/8/8/8/8/3K4/8 b - - 21 1"
|
|
},
|
|
{
|
|
"move": "Ke2",
|
|
"fen": "1k6/5P2/8/8/8/8/4K3/8 b - - 21 1"
|
|
},
|
|
{
|
|
"move": "Kf2",
|
|
"fen": "1k6/5P2/8/8/8/8/5K2/8 b - - 21 1"
|
|
},
|
|
{
|
|
"move": "f8=Q+",
|
|
"fen": "1k3Q2/8/8/8/8/8/8/4K3 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "f8=R+",
|
|
"fen": "1k3R2/8/8/8/8/8/8/4K3 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "f8=N",
|
|
"fen": "1k3N2/8/8/8/8/8/8/4K3 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "f8=B",
|
|
"fen": "1k3B2/8/8/8/8/8/8/4K3 b - - 0 1"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "Transpose of 1k6/5P2/8/8/8/8/8/4K3 w - - 20 1",
|
|
"start": {
|
|
"fen": "4k3/8/8/8/8/8/5p2/1K6 b - - 20 1",
|
|
"description": "A simple promotion, with some chances to check opposing king."
|
|
},
|
|
"expected": [
|
|
{
|
|
"move": "f1=Q+",
|
|
"fen": "4k3/8/8/8/8/8/8/1K3q2 w - - 0 2"
|
|
},
|
|
{
|
|
"move": "f1=R+",
|
|
"fen": "4k3/8/8/8/8/8/8/1K3r2 w - - 0 2"
|
|
},
|
|
{
|
|
"move": "f1=N",
|
|
"fen": "4k3/8/8/8/8/8/8/1K3n2 w - - 0 2"
|
|
},
|
|
{
|
|
"move": "f1=B",
|
|
"fen": "4k3/8/8/8/8/8/8/1K3b2 w - - 0 2"
|
|
},
|
|
{
|
|
"move": "Kd7",
|
|
"fen": "8/3k4/8/8/8/8/5p2/1K6 w - - 21 2"
|
|
},
|
|
{
|
|
"move": "Ke7",
|
|
"fen": "8/4k3/8/8/8/8/5p2/1K6 w - - 21 2"
|
|
},
|
|
{
|
|
"move": "Kf7",
|
|
"fen": "8/5k2/8/8/8/8/5p2/1K6 w - - 21 2"
|
|
},
|
|
{
|
|
"move": "Kd8",
|
|
"fen": "3k4/8/8/8/8/8/5p2/1K6 w - - 21 2"
|
|
},
|
|
{
|
|
"move": "Kf8",
|
|
"fen": "5k2/8/8/8/8/8/5p2/1K6 w - - 21 2"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"start": {
|
|
"fen": "3k4/8/1K6/8/8/8/pppppppp/RRRRRRRR b - - 0 1",
|
|
"description": "Eight black pawns all promoting via capture."
|
|
},
|
|
"expected": [
|
|
{
|
|
"move": "axb1=Q",
|
|
"fen": "3k4/8/1K6/8/8/8/1ppppppp/RqRRRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "axb1=R",
|
|
"fen": "3k4/8/1K6/8/8/8/1ppppppp/RrRRRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "axb1=N",
|
|
"fen": "3k4/8/1K6/8/8/8/1ppppppp/RnRRRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "axb1=B",
|
|
"fen": "3k4/8/1K6/8/8/8/1ppppppp/RbRRRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxa1=Q",
|
|
"fen": "3k4/8/1K6/8/8/8/p1pppppp/qRRRRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxa1=R",
|
|
"fen": "3k4/8/1K6/8/8/8/p1pppppp/rRRRRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxa1=N",
|
|
"fen": "3k4/8/1K6/8/8/8/p1pppppp/nRRRRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxa1=B",
|
|
"fen": "3k4/8/1K6/8/8/8/p1pppppp/bRRRRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxc1=Q",
|
|
"fen": "3k4/8/1K6/8/8/8/p1pppppp/RRqRRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxc1=R",
|
|
"fen": "3k4/8/1K6/8/8/8/p1pppppp/RRrRRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxc1=N",
|
|
"fen": "3k4/8/1K6/8/8/8/p1pppppp/RRnRRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxc1=B",
|
|
"fen": "3k4/8/1K6/8/8/8/p1pppppp/RRbRRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "cxb1=Q",
|
|
"fen": "3k4/8/1K6/8/8/8/pp1ppppp/RqRRRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "cxb1=R",
|
|
"fen": "3k4/8/1K6/8/8/8/pp1ppppp/RrRRRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "cxb1=N",
|
|
"fen": "3k4/8/1K6/8/8/8/pp1ppppp/RnRRRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "cxb1=B",
|
|
"fen": "3k4/8/1K6/8/8/8/pp1ppppp/RbRRRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "cxd1=Q",
|
|
"fen": "3k4/8/1K6/8/8/8/pp1ppppp/RRRqRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "cxd1=R",
|
|
"fen": "3k4/8/1K6/8/8/8/pp1ppppp/RRRrRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "cxd1=N",
|
|
"fen": "3k4/8/1K6/8/8/8/pp1ppppp/RRRnRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "cxd1=B",
|
|
"fen": "3k4/8/1K6/8/8/8/pp1ppppp/RRRbRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "exd1=Q",
|
|
"fen": "3k4/8/1K6/8/8/8/pppp1ppp/RRRqRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "exd1=R",
|
|
"fen": "3k4/8/1K6/8/8/8/pppp1ppp/RRRrRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "exd1=N",
|
|
"fen": "3k4/8/1K6/8/8/8/pppp1ppp/RRRnRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "exd1=B",
|
|
"fen": "3k4/8/1K6/8/8/8/pppp1ppp/RRRbRRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "exf1=Q",
|
|
"fen": "3k4/8/1K6/8/8/8/pppp1ppp/RRRRRqRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "exf1=R",
|
|
"fen": "3k4/8/1K6/8/8/8/pppp1ppp/RRRRRrRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "exf1=N",
|
|
"fen": "3k4/8/1K6/8/8/8/pppp1ppp/RRRRRnRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "exf1=B",
|
|
"fen": "3k4/8/1K6/8/8/8/pppp1ppp/RRRRRbRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "fxe1=Q",
|
|
"fen": "3k4/8/1K6/8/8/8/ppppp1pp/RRRRqRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "fxe1=R",
|
|
"fen": "3k4/8/1K6/8/8/8/ppppp1pp/RRRRrRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "fxe1=N",
|
|
"fen": "3k4/8/1K6/8/8/8/ppppp1pp/RRRRnRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "fxe1=B",
|
|
"fen": "3k4/8/1K6/8/8/8/ppppp1pp/RRRRbRRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "fxg1=Q+",
|
|
"fen": "3k4/8/1K6/8/8/8/ppppp1pp/RRRRRRqR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "fxg1=R",
|
|
"fen": "3k4/8/1K6/8/8/8/ppppp1pp/RRRRRRrR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "fxg1=N",
|
|
"fen": "3k4/8/1K6/8/8/8/ppppp1pp/RRRRRRnR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "fxg1=B+",
|
|
"fen": "3k4/8/1K6/8/8/8/ppppp1pp/RRRRRRbR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "gxf1=Q",
|
|
"fen": "3k4/8/1K6/8/8/8/pppppp1p/RRRRRqRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "gxf1=R",
|
|
"fen": "3k4/8/1K6/8/8/8/pppppp1p/RRRRRrRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "gxf1=N",
|
|
"fen": "3k4/8/1K6/8/8/8/pppppp1p/RRRRRnRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "gxf1=B",
|
|
"fen": "3k4/8/1K6/8/8/8/pppppp1p/RRRRRbRR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "gxh1=Q",
|
|
"fen": "3k4/8/1K6/8/8/8/pppppp1p/RRRRRRRq w - - 0 2"
|
|
},
|
|
{
|
|
"move": "gxh1=R",
|
|
"fen": "3k4/8/1K6/8/8/8/pppppp1p/RRRRRRRr w - - 0 2"
|
|
},
|
|
{
|
|
"move": "gxh1=N",
|
|
"fen": "3k4/8/1K6/8/8/8/pppppp1p/RRRRRRRn w - - 0 2"
|
|
},
|
|
{
|
|
"move": "gxh1=B",
|
|
"fen": "3k4/8/1K6/8/8/8/pppppp1p/RRRRRRRb w - - 0 2"
|
|
},
|
|
{
|
|
"move": "hxg1=Q",
|
|
"fen": "3k4/8/1K6/8/8/8/ppppppp1/RRRRRRqR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "hxg1=R",
|
|
"fen": "3k4/8/1K6/8/8/8/ppppppp1/RRRRRRrR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "hxg1=N",
|
|
"fen": "3k4/8/1K6/8/8/8/ppppppp1/RRRRRRnR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "hxg1=B",
|
|
"fen": "3k4/8/1K6/8/8/8/ppppppp1/RRRRRRbR w - - 0 2"
|
|
},
|
|
{
|
|
"move": "Kd7",
|
|
"fen": "8/3k4/1K6/8/8/8/pppppppp/RRRRRRRR w - - 1 2"
|
|
},
|
|
{
|
|
"move": "Ke7",
|
|
"fen": "8/4k3/1K6/8/8/8/pppppppp/RRRRRRRR w - - 1 2"
|
|
},
|
|
{
|
|
"move": "Kc8",
|
|
"fen": "2k5/8/1K6/8/8/8/pppppppp/RRRRRRRR w - - 1 2"
|
|
},
|
|
{
|
|
"move": "Ke8",
|
|
"fen": "4k3/8/1K6/8/8/8/pppppppp/RRRRRRRR w - - 1 2"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "Transpose of 3k4/8/1K6/8/8/8/pppppppp/RRRRRRRR b - - 0 1",
|
|
"start": {
|
|
"fen": "rrrrrrrr/PPPPPPPP/8/8/8/1k6/8/3K4 w - - 0 1",
|
|
"description": "Eight white pawns all promoting via capture."
|
|
},
|
|
"expected": [
|
|
{
|
|
"move": "Kc1",
|
|
"fen": "rrrrrrrr/PPPPPPPP/8/8/8/1k6/8/2K5 b - - 1 1"
|
|
},
|
|
{
|
|
"move": "Ke1",
|
|
"fen": "rrrrrrrr/PPPPPPPP/8/8/8/1k6/8/4K3 b - - 1 1"
|
|
},
|
|
{
|
|
"move": "Kd2",
|
|
"fen": "rrrrrrrr/PPPPPPPP/8/8/8/1k6/3K4/8 b - - 1 1"
|
|
},
|
|
{
|
|
"move": "Ke2",
|
|
"fen": "rrrrrrrr/PPPPPPPP/8/8/8/1k6/4K3/8 b - - 1 1"
|
|
},
|
|
{
|
|
"move": "axb8=Q",
|
|
"fen": "rQrrrrrr/1PPPPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "axb8=R",
|
|
"fen": "rRrrrrrr/1PPPPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "axb8=N",
|
|
"fen": "rNrrrrrr/1PPPPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "axb8=B",
|
|
"fen": "rBrrrrrr/1PPPPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxa8=Q",
|
|
"fen": "Qrrrrrrr/P1PPPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxa8=R",
|
|
"fen": "Rrrrrrrr/P1PPPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxa8=N",
|
|
"fen": "Nrrrrrrr/P1PPPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxa8=B",
|
|
"fen": "Brrrrrrr/P1PPPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxc8=Q",
|
|
"fen": "rrQrrrrr/P1PPPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxc8=R",
|
|
"fen": "rrRrrrrr/P1PPPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxc8=N",
|
|
"fen": "rrNrrrrr/P1PPPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxc8=B",
|
|
"fen": "rrBrrrrr/P1PPPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "cxb8=Q",
|
|
"fen": "rQrrrrrr/PP1PPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "cxb8=R",
|
|
"fen": "rRrrrrrr/PP1PPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "cxb8=N",
|
|
"fen": "rNrrrrrr/PP1PPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "cxb8=B",
|
|
"fen": "rBrrrrrr/PP1PPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "cxd8=Q",
|
|
"fen": "rrrQrrrr/PP1PPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "cxd8=R",
|
|
"fen": "rrrRrrrr/PP1PPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "cxd8=N",
|
|
"fen": "rrrNrrrr/PP1PPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "cxd8=B",
|
|
"fen": "rrrBrrrr/PP1PPPPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "exd8=Q",
|
|
"fen": "rrrQrrrr/PPPP1PPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "exd8=R",
|
|
"fen": "rrrRrrrr/PPPP1PPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "exd8=N",
|
|
"fen": "rrrNrrrr/PPPP1PPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "exd8=B",
|
|
"fen": "rrrBrrrr/PPPP1PPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "exf8=Q",
|
|
"fen": "rrrrrQrr/PPPP1PPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "exf8=R",
|
|
"fen": "rrrrrRrr/PPPP1PPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "exf8=N",
|
|
"fen": "rrrrrNrr/PPPP1PPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "exf8=B",
|
|
"fen": "rrrrrBrr/PPPP1PPP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "fxe8=Q",
|
|
"fen": "rrrrQrrr/PPPPP1PP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "fxe8=R",
|
|
"fen": "rrrrRrrr/PPPPP1PP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "fxe8=N",
|
|
"fen": "rrrrNrrr/PPPPP1PP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "fxe8=B",
|
|
"fen": "rrrrBrrr/PPPPP1PP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "fxg8=Q+",
|
|
"fen": "rrrrrrQr/PPPPP1PP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "fxg8=R",
|
|
"fen": "rrrrrrRr/PPPPP1PP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "fxg8=N",
|
|
"fen": "rrrrrrNr/PPPPP1PP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "fxg8=B+",
|
|
"fen": "rrrrrrBr/PPPPP1PP/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "gxf8=Q",
|
|
"fen": "rrrrrQrr/PPPPPP1P/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "gxf8=R",
|
|
"fen": "rrrrrRrr/PPPPPP1P/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "gxf8=N",
|
|
"fen": "rrrrrNrr/PPPPPP1P/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "gxf8=B",
|
|
"fen": "rrrrrBrr/PPPPPP1P/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "gxh8=Q",
|
|
"fen": "rrrrrrrQ/PPPPPP1P/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "gxh8=R",
|
|
"fen": "rrrrrrrR/PPPPPP1P/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "gxh8=N",
|
|
"fen": "rrrrrrrN/PPPPPP1P/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "gxh8=B",
|
|
"fen": "rrrrrrrB/PPPPPP1P/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "hxg8=Q",
|
|
"fen": "rrrrrrQr/PPPPPPP1/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "hxg8=R",
|
|
"fen": "rrrrrrRr/PPPPPPP1/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "hxg8=N",
|
|
"fen": "rrrrrrNr/PPPPPPP1/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "hxg8=B",
|
|
"fen": "rrrrrrBr/PPPPPPP1/8/8/8/1k6/8/3K4 b - - 0 1"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"start": {
|
|
"fen": "nnnnnnnn/PPPPPPPP/8/8/8/8/8/K6k w - - 0 1",
|
|
"description": "Eight white pawns all capable of promoting via capture."
|
|
},
|
|
"expected": [
|
|
{
|
|
"move": "Kb1",
|
|
"fen": "nnnnnnnn/PPPPPPPP/8/8/8/8/8/1K5k b - - 1 1"
|
|
},
|
|
{
|
|
"move": "Ka2",
|
|
"fen": "nnnnnnnn/PPPPPPPP/8/8/8/8/K7/7k b - - 1 1"
|
|
},
|
|
{
|
|
"move": "Kb2",
|
|
"fen": "nnnnnnnn/PPPPPPPP/8/8/8/8/1K6/7k b - - 1 1"
|
|
},
|
|
{
|
|
"move": "axb8=Q",
|
|
"fen": "nQnnnnnn/1PPPPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "axb8=R",
|
|
"fen": "nRnnnnnn/1PPPPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "axb8=N",
|
|
"fen": "nNnnnnnn/1PPPPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "axb8=B",
|
|
"fen": "nBnnnnnn/1PPPPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxa8=Q+",
|
|
"fen": "Qnnnnnnn/P1PPPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxa8=R",
|
|
"fen": "Rnnnnnnn/P1PPPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxa8=N",
|
|
"fen": "Nnnnnnnn/P1PPPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxa8=B+",
|
|
"fen": "Bnnnnnnn/P1PPPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxc8=Q",
|
|
"fen": "nnQnnnnn/P1PPPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxc8=R",
|
|
"fen": "nnRnnnnn/P1PPPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxc8=N",
|
|
"fen": "nnNnnnnn/P1PPPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxc8=B",
|
|
"fen": "nnBnnnnn/P1PPPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "cxb8=Q",
|
|
"fen": "nQnnnnnn/PP1PPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "cxb8=R",
|
|
"fen": "nRnnnnnn/PP1PPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "cxb8=N",
|
|
"fen": "nNnnnnnn/PP1PPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "cxb8=B",
|
|
"fen": "nBnnnnnn/PP1PPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "cxd8=Q",
|
|
"fen": "nnnQnnnn/PP1PPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "cxd8=R",
|
|
"fen": "nnnRnnnn/PP1PPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "cxd8=N",
|
|
"fen": "nnnNnnnn/PP1PPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "cxd8=B",
|
|
"fen": "nnnBnnnn/PP1PPPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "dxc8=Q",
|
|
"fen": "nnQnnnnn/PPP1PPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "dxc8=R",
|
|
"fen": "nnRnnnnn/PPP1PPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "dxc8=N",
|
|
"fen": "nnNnnnnn/PPP1PPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "dxc8=B",
|
|
"fen": "nnBnnnnn/PPP1PPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "dxe8=Q",
|
|
"fen": "nnnnQnnn/PPP1PPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "dxe8=R",
|
|
"fen": "nnnnRnnn/PPP1PPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "dxe8=N",
|
|
"fen": "nnnnNnnn/PPP1PPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "dxe8=B",
|
|
"fen": "nnnnBnnn/PPP1PPPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "exd8=Q",
|
|
"fen": "nnnQnnnn/PPPP1PPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "exd8=R",
|
|
"fen": "nnnRnnnn/PPPP1PPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "exd8=N",
|
|
"fen": "nnnNnnnn/PPPP1PPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "exd8=B",
|
|
"fen": "nnnBnnnn/PPPP1PPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "exf8=Q",
|
|
"fen": "nnnnnQnn/PPPP1PPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "exf8=R",
|
|
"fen": "nnnnnRnn/PPPP1PPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "exf8=N",
|
|
"fen": "nnnnnNnn/PPPP1PPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "exf8=B",
|
|
"fen": "nnnnnBnn/PPPP1PPP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "fxe8=Q",
|
|
"fen": "nnnnQnnn/PPPPP1PP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "fxe8=R",
|
|
"fen": "nnnnRnnn/PPPPP1PP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "fxe8=N",
|
|
"fen": "nnnnNnnn/PPPPP1PP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "fxe8=B",
|
|
"fen": "nnnnBnnn/PPPPP1PP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "fxg8=Q",
|
|
"fen": "nnnnnnQn/PPPPP1PP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "fxg8=R",
|
|
"fen": "nnnnnnRn/PPPPP1PP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "fxg8=N",
|
|
"fen": "nnnnnnNn/PPPPP1PP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "fxg8=B",
|
|
"fen": "nnnnnnBn/PPPPP1PP/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "gxf8=Q",
|
|
"fen": "nnnnnQnn/PPPPPP1P/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "gxf8=R",
|
|
"fen": "nnnnnRnn/PPPPPP1P/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "gxf8=N",
|
|
"fen": "nnnnnNnn/PPPPPP1P/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "gxf8=B",
|
|
"fen": "nnnnnBnn/PPPPPP1P/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "gxh8=Q",
|
|
"fen": "nnnnnnnQ/PPPPPP1P/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "gxh8=R",
|
|
"fen": "nnnnnnnR/PPPPPP1P/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "gxh8=N",
|
|
"fen": "nnnnnnnN/PPPPPP1P/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "gxh8=B",
|
|
"fen": "nnnnnnnB/PPPPPP1P/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "hxg8=Q",
|
|
"fen": "nnnnnnQn/PPPPPPP1/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "hxg8=R",
|
|
"fen": "nnnnnnRn/PPPPPPP1/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "hxg8=N",
|
|
"fen": "nnnnnnNn/PPPPPPP1/8/8/8/8/8/K6k b - - 0 1"
|
|
},
|
|
{
|
|
"move": "hxg8=B",
|
|
"fen": "nnnnnnBn/PPPPPPP1/8/8/8/8/8/K6k b - - 0 1"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "Transpose of nnnnnnnn/PPPPPPPP/8/8/8/8/8/K6k w - - 0 1",
|
|
"start": {
|
|
"fen": "k6K/8/8/8/8/8/pppppppp/NNNNNNNN b - - 0 1",
|
|
"description": "Eight black pawns all capable of promoting via capture."
|
|
},
|
|
"expected": [
|
|
{
|
|
"move": "axb1=Q",
|
|
"fen": "k6K/8/8/8/8/8/1ppppppp/NqNNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "axb1=R",
|
|
"fen": "k6K/8/8/8/8/8/1ppppppp/NrNNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "axb1=N",
|
|
"fen": "k6K/8/8/8/8/8/1ppppppp/NnNNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "axb1=B",
|
|
"fen": "k6K/8/8/8/8/8/1ppppppp/NbNNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxa1=Q+",
|
|
"fen": "k6K/8/8/8/8/8/p1pppppp/qNNNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxa1=R",
|
|
"fen": "k6K/8/8/8/8/8/p1pppppp/rNNNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxa1=N",
|
|
"fen": "k6K/8/8/8/8/8/p1pppppp/nNNNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxa1=B+",
|
|
"fen": "k6K/8/8/8/8/8/p1pppppp/bNNNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxc1=Q",
|
|
"fen": "k6K/8/8/8/8/8/p1pppppp/NNqNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxc1=R",
|
|
"fen": "k6K/8/8/8/8/8/p1pppppp/NNrNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxc1=N",
|
|
"fen": "k6K/8/8/8/8/8/p1pppppp/NNnNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxc1=B",
|
|
"fen": "k6K/8/8/8/8/8/p1pppppp/NNbNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "cxb1=Q",
|
|
"fen": "k6K/8/8/8/8/8/pp1ppppp/NqNNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "cxb1=R",
|
|
"fen": "k6K/8/8/8/8/8/pp1ppppp/NrNNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "cxb1=N",
|
|
"fen": "k6K/8/8/8/8/8/pp1ppppp/NnNNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "cxb1=B",
|
|
"fen": "k6K/8/8/8/8/8/pp1ppppp/NbNNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "cxd1=Q",
|
|
"fen": "k6K/8/8/8/8/8/pp1ppppp/NNNqNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "cxd1=R",
|
|
"fen": "k6K/8/8/8/8/8/pp1ppppp/NNNrNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "cxd1=N",
|
|
"fen": "k6K/8/8/8/8/8/pp1ppppp/NNNnNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "cxd1=B",
|
|
"fen": "k6K/8/8/8/8/8/pp1ppppp/NNNbNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "dxc1=Q",
|
|
"fen": "k6K/8/8/8/8/8/ppp1pppp/NNqNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "dxc1=R",
|
|
"fen": "k6K/8/8/8/8/8/ppp1pppp/NNrNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "dxc1=N",
|
|
"fen": "k6K/8/8/8/8/8/ppp1pppp/NNnNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "dxc1=B",
|
|
"fen": "k6K/8/8/8/8/8/ppp1pppp/NNbNNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "dxe1=Q",
|
|
"fen": "k6K/8/8/8/8/8/ppp1pppp/NNNNqNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "dxe1=R",
|
|
"fen": "k6K/8/8/8/8/8/ppp1pppp/NNNNrNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "dxe1=N",
|
|
"fen": "k6K/8/8/8/8/8/ppp1pppp/NNNNnNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "dxe1=B",
|
|
"fen": "k6K/8/8/8/8/8/ppp1pppp/NNNNbNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "exd1=Q",
|
|
"fen": "k6K/8/8/8/8/8/pppp1ppp/NNNqNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "exd1=R",
|
|
"fen": "k6K/8/8/8/8/8/pppp1ppp/NNNrNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "exd1=N",
|
|
"fen": "k6K/8/8/8/8/8/pppp1ppp/NNNnNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "exd1=B",
|
|
"fen": "k6K/8/8/8/8/8/pppp1ppp/NNNbNNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "exf1=Q",
|
|
"fen": "k6K/8/8/8/8/8/pppp1ppp/NNNNNqNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "exf1=R",
|
|
"fen": "k6K/8/8/8/8/8/pppp1ppp/NNNNNrNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "exf1=N",
|
|
"fen": "k6K/8/8/8/8/8/pppp1ppp/NNNNNnNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "exf1=B",
|
|
"fen": "k6K/8/8/8/8/8/pppp1ppp/NNNNNbNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "fxe1=Q",
|
|
"fen": "k6K/8/8/8/8/8/ppppp1pp/NNNNqNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "fxe1=R",
|
|
"fen": "k6K/8/8/8/8/8/ppppp1pp/NNNNrNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "fxe1=N",
|
|
"fen": "k6K/8/8/8/8/8/ppppp1pp/NNNNnNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "fxe1=B",
|
|
"fen": "k6K/8/8/8/8/8/ppppp1pp/NNNNbNNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "fxg1=Q",
|
|
"fen": "k6K/8/8/8/8/8/ppppp1pp/NNNNNNqN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "fxg1=R",
|
|
"fen": "k6K/8/8/8/8/8/ppppp1pp/NNNNNNrN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "fxg1=N",
|
|
"fen": "k6K/8/8/8/8/8/ppppp1pp/NNNNNNnN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "fxg1=B",
|
|
"fen": "k6K/8/8/8/8/8/ppppp1pp/NNNNNNbN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "gxf1=Q",
|
|
"fen": "k6K/8/8/8/8/8/pppppp1p/NNNNNqNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "gxf1=R",
|
|
"fen": "k6K/8/8/8/8/8/pppppp1p/NNNNNrNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "gxf1=N",
|
|
"fen": "k6K/8/8/8/8/8/pppppp1p/NNNNNnNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "gxf1=B",
|
|
"fen": "k6K/8/8/8/8/8/pppppp1p/NNNNNbNN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "gxh1=Q",
|
|
"fen": "k6K/8/8/8/8/8/pppppp1p/NNNNNNNq w - - 0 2"
|
|
},
|
|
{
|
|
"move": "gxh1=R",
|
|
"fen": "k6K/8/8/8/8/8/pppppp1p/NNNNNNNr w - - 0 2"
|
|
},
|
|
{
|
|
"move": "gxh1=N",
|
|
"fen": "k6K/8/8/8/8/8/pppppp1p/NNNNNNNn w - - 0 2"
|
|
},
|
|
{
|
|
"move": "gxh1=B",
|
|
"fen": "k6K/8/8/8/8/8/pppppp1p/NNNNNNNb w - - 0 2"
|
|
},
|
|
{
|
|
"move": "hxg1=Q",
|
|
"fen": "k6K/8/8/8/8/8/ppppppp1/NNNNNNqN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "hxg1=R",
|
|
"fen": "k6K/8/8/8/8/8/ppppppp1/NNNNNNrN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "hxg1=N",
|
|
"fen": "k6K/8/8/8/8/8/ppppppp1/NNNNNNnN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "hxg1=B",
|
|
"fen": "k6K/8/8/8/8/8/ppppppp1/NNNNNNbN w - - 0 2"
|
|
},
|
|
{
|
|
"move": "Ka7",
|
|
"fen": "7K/k7/8/8/8/8/pppppppp/NNNNNNNN w - - 1 2"
|
|
},
|
|
{
|
|
"move": "Kb7",
|
|
"fen": "7K/1k6/8/8/8/8/pppppppp/NNNNNNNN w - - 1 2"
|
|
},
|
|
{
|
|
"move": "Kb8",
|
|
"fen": "1k5K/8/8/8/8/8/pppppppp/NNNNNNNN w - - 1 2"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"start": {
|
|
"fen": "8/ppp3p1/8/8/3p4/8/1ppp2K1/brk2Q1n b - - 12 7",
|
|
"description": "Black must block check by promotion."
|
|
},
|
|
"expected": [
|
|
{
|
|
"move": "d1=Q",
|
|
"fen": "8/ppp3p1/8/8/3p4/8/1pp3K1/brkq1Q1n w - - 0 8"
|
|
},
|
|
{
|
|
"move": "d1=R",
|
|
"fen": "8/ppp3p1/8/8/3p4/8/1pp3K1/brkr1Q1n w - - 0 8"
|
|
},
|
|
{
|
|
"move": "d1=N",
|
|
"fen": "8/ppp3p1/8/8/3p4/8/1pp3K1/brkn1Q1n w - - 0 8"
|
|
},
|
|
{
|
|
"move": "d1=B",
|
|
"fen": "8/ppp3p1/8/8/3p4/8/1pp3K1/brkb1Q1n w - - 0 8"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "Transpose of 8/ppp3p1/8/8/3p4/8/1ppp2K1/brk2Q1n b - - 12 7",
|
|
"start": {
|
|
"fen": "BRK2q1N/1PPP2k1/8/3P4/8/8/PPP3P1/8 w - - 12 7",
|
|
"description": "White must block check by promotion."
|
|
},
|
|
"expected": [
|
|
{
|
|
"move": "d8=Q",
|
|
"fen": "BRKQ1q1N/1PP3k1/8/3P4/8/8/PPP3P1/8 b - - 0 7"
|
|
},
|
|
{
|
|
"move": "d8=R",
|
|
"fen": "BRKR1q1N/1PP3k1/8/3P4/8/8/PPP3P1/8 b - - 0 7"
|
|
},
|
|
{
|
|
"move": "d8=N",
|
|
"fen": "BRKN1q1N/1PP3k1/8/3P4/8/8/PPP3P1/8 b - - 0 7"
|
|
},
|
|
{
|
|
"move": "d8=B",
|
|
"fen": "BRKB1q1N/1PP3k1/8/3P4/8/8/PPP3P1/8 b - - 0 7"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"start": {
|
|
"fen": "5N1N/4k1P1/8/8/8/8/8/K7 w - - 0 1",
|
|
"description": "White can promote and check black king if promoting to knight."
|
|
},
|
|
"expected": [
|
|
{
|
|
"move": "Kb1",
|
|
"fen": "5N1N/4k1P1/8/8/8/8/8/1K6 b - - 1 1"
|
|
},
|
|
{
|
|
"move": "Ka2",
|
|
"fen": "5N1N/4k1P1/8/8/8/8/K7/8 b - - 1 1"
|
|
},
|
|
{
|
|
"move": "Kb2",
|
|
"fen": "5N1N/4k1P1/8/8/8/8/1K6/8 b - - 1 1"
|
|
},
|
|
{
|
|
"move": "g8=Q",
|
|
"fen": "5NQN/4k3/8/8/8/8/8/K7 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "g8=R",
|
|
"fen": "5NRN/4k3/8/8/8/8/8/K7 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "g8=N+",
|
|
"fen": "5NNN/4k3/8/8/8/8/8/K7 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "g8=B",
|
|
"fen": "5NBN/4k3/8/8/8/8/8/K7 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "Ne6",
|
|
"fen": "7N/4k1P1/4N3/8/8/8/8/K7 b - - 1 1"
|
|
},
|
|
{
|
|
"move": "Nfg6+",
|
|
"fen": "7N/4k1P1/6N1/8/8/8/8/K7 b - - 1 1"
|
|
},
|
|
{
|
|
"move": "Nd7",
|
|
"fen": "7N/3Nk1P1/8/8/8/8/8/K7 b - - 1 1"
|
|
},
|
|
{
|
|
"move": "Nh7",
|
|
"fen": "7N/4k1PN/8/8/8/8/8/K7 b - - 1 1"
|
|
},
|
|
{
|
|
"move": "Nhg6+",
|
|
"fen": "5N2/4k1P1/6N1/8/8/8/8/K7 b - - 1 1"
|
|
},
|
|
{
|
|
"move": "Nf7",
|
|
"fen": "5N2/4kNP1/8/8/8/8/8/K7 b - - 1 1"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "Transpose of 5N1N/4k1P1/8/8/8/8/8/K7 w - - 0 1",
|
|
"start": {
|
|
"fen": "k7/8/8/8/8/8/4K1p1/5n1n b - - 0 1",
|
|
"description": "Black can promote and check white king if promoting to knight."
|
|
},
|
|
"expected": [
|
|
{
|
|
"move": "Nd2",
|
|
"fen": "k7/8/8/8/8/8/3nK1p1/7n w - - 1 2"
|
|
},
|
|
{
|
|
"move": "Nh2",
|
|
"fen": "k7/8/8/8/8/8/4K1pn/7n w - - 1 2"
|
|
},
|
|
{
|
|
"move": "Ne3",
|
|
"fen": "k7/8/8/8/8/4n3/4K1p1/7n w - - 1 2"
|
|
},
|
|
{
|
|
"move": "Nfg3+",
|
|
"fen": "k7/8/8/8/8/6n1/4K1p1/7n w - - 1 2"
|
|
},
|
|
{
|
|
"move": "Nf2",
|
|
"fen": "k7/8/8/8/8/8/4Knp1/5n2 w - - 1 2"
|
|
},
|
|
{
|
|
"move": "Nhg3+",
|
|
"fen": "k7/8/8/8/8/6n1/4K1p1/5n2 w - - 1 2"
|
|
},
|
|
{
|
|
"move": "g1=Q",
|
|
"fen": "k7/8/8/8/8/8/4K3/5nqn w - - 0 2"
|
|
},
|
|
{
|
|
"move": "g1=R",
|
|
"fen": "k7/8/8/8/8/8/4K3/5nrn w - - 0 2"
|
|
},
|
|
{
|
|
"move": "g1=N+",
|
|
"fen": "k7/8/8/8/8/8/4K3/5nnn w - - 0 2"
|
|
},
|
|
{
|
|
"move": "g1=B",
|
|
"fen": "k7/8/8/8/8/8/4K3/5nbn w - - 0 2"
|
|
},
|
|
{
|
|
"move": "Ka7",
|
|
"fen": "8/k7/8/8/8/8/4K1p1/5n1n w - - 1 2"
|
|
},
|
|
{
|
|
"move": "Kb7",
|
|
"fen": "8/1k6/8/8/8/8/4K1p1/5n1n w - - 1 2"
|
|
},
|
|
{
|
|
"move": "Kb8",
|
|
"fen": "1k6/8/8/8/8/8/4K1p1/5n1n w - - 1 2"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"start": {
|
|
"fen": "NBQKRBRN/PPPPPPPP/8/8/8/8/3k4/8 w - - 0 1",
|
|
"description": "White has eight pawns ready to promote, but none can."
|
|
},
|
|
"expected": [
|
|
{
|
|
"move": "Nb6",
|
|
"fen": "1BQKRBRN/PPPPPPPP/1N6/8/8/8/3k4/8 b - - 1 1"
|
|
},
|
|
{
|
|
"move": "Ng6",
|
|
"fen": "NBQKRBR1/PPPPPPPP/6N1/8/8/8/3k4/8 b - - 1 1"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "Transpose of NBQKRBRN/PPPPPPPP/8/8/8/8/3k4/8 w - - 0 1",
|
|
"start": {
|
|
"fen": "8/3K4/8/8/8/8/pppppppp/nbqkrbrn b - - 0 1",
|
|
"description": "Black has eight pawns ready to promote, but none can."
|
|
},
|
|
"expected": [
|
|
{
|
|
"move": "Nb3",
|
|
"fen": "8/3K4/8/8/8/1n6/pppppppp/1bqkrbrn w - - 1 2"
|
|
},
|
|
{
|
|
"move": "Ng3",
|
|
"fen": "8/3K4/8/8/8/6n1/pppppppp/nbqkrbr1 w - - 1 2"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"start": {
|
|
"fen": "3K3r/2PPP3/8/2k5/8/8/8/8 w - - 0 1",
|
|
"description": "White must promote to escape check."
|
|
},
|
|
"expected": [
|
|
{
|
|
"move": "e8=Q",
|
|
"fen": "3KQ2r/2PP4/8/2k5/8/8/8/8 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "e8=R",
|
|
"fen": "3KR2r/2PP4/8/2k5/8/8/8/8 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "e8=N",
|
|
"fen": "3KN2r/2PP4/8/2k5/8/8/8/8 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "e8=B",
|
|
"fen": "3KB2r/2PP4/8/2k5/8/8/8/8 b - - 0 1"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "Transpose of 3K3r/2PPP3/8/2k5/8/8/8/8 w - - 0 1",
|
|
"start": {
|
|
"fen": "8/8/8/8/2K5/8/2ppp3/3k3R b - - 0 1",
|
|
"description": "Black must promote to escape check."
|
|
},
|
|
"expected": [
|
|
{
|
|
"move": "e1=Q",
|
|
"fen": "8/8/8/8/2K5/8/2pp4/3kq2R w - - 0 2"
|
|
},
|
|
{
|
|
"move": "e1=R",
|
|
"fen": "8/8/8/8/2K5/8/2pp4/3kr2R w - - 0 2"
|
|
},
|
|
{
|
|
"move": "e1=N",
|
|
"fen": "8/8/8/8/2K5/8/2pp4/3kn2R w - - 0 2"
|
|
},
|
|
{
|
|
"move": "e1=B",
|
|
"fen": "8/8/8/8/2K5/8/2pp4/3kb2R w - - 0 2"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"start": {
|
|
"fen": "q7/1PPPPPPP/8/8/8/K1k5/8/8 w - - 0 1",
|
|
"description": "White must capture and promote to escape mate."
|
|
},
|
|
"expected": [
|
|
{
|
|
"move": "bxa8=Q",
|
|
"fen": "Q7/2PPPPPP/8/8/8/K1k5/8/8 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxa8=R",
|
|
"fen": "R7/2PPPPPP/8/8/8/K1k5/8/8 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxa8=N",
|
|
"fen": "N7/2PPPPPP/8/8/8/K1k5/8/8 b - - 0 1"
|
|
},
|
|
{
|
|
"move": "bxa8=B",
|
|
"fen": "B7/2PPPPPP/8/8/8/K1k5/8/8 b - - 0 1"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"description": "Transpose of q7/1PPPPPPP/8/8/8/K1k5/8/8 w - - 0 1",
|
|
"start": {
|
|
"fen": "8/8/k1K5/8/8/8/1ppppppp/Q7 b - - 0 1",
|
|
"description": "Black must capture and promote to escape mate."
|
|
},
|
|
"expected": [
|
|
{
|
|
"move": "bxa1=Q",
|
|
"fen": "8/8/k1K5/8/8/8/2pppppp/q7 w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxa1=R",
|
|
"fen": "8/8/k1K5/8/8/8/2pppppp/r7 w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxa1=N",
|
|
"fen": "8/8/k1K5/8/8/8/2pppppp/n7 w - - 0 2"
|
|
},
|
|
{
|
|
"move": "bxa1=B",
|
|
"fen": "8/8/k1K5/8/8/8/2pppppp/b7 w - - 0 2"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
} |