Commit Graph

155 Commits

Author SHA1 Message Date
Bruno BELANYI 127dea25b4 Add validation error detail in 'FenError' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 714feedbd2 Add 'ChessBoard::validate' 2024-04-01 22:20:39 +01:00
Bruno BELANYI d3386bcb52 Add 'chess_board::InvalidError' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 463b2a1a8f Move 'ChessBoard' to its own sub-folder 2024-04-01 22:20:39 +01:00
Bruno BELANYI 46ff51552a Check all piece counts in 'ChessBoard::is_valid' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 3fa56b36a4 Check for invalid pawns in 'ChessBoard::is_valid' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 33eb5d0707 Add 'print-board' GDB command 2024-04-01 22:20:39 +01:00
Bruno BELANYI dcd76c5bef Add 'Bitboard.at' in GDB utils 2024-04-01 22:20:39 +01:00
Bruno BELANYI a1005c1bec Add convenience 'Square' constructor in GDB utils 2024-04-01 22:20:39 +01:00
Bruno BELANYI 83a29cae2a Add 'CastleRights' GDB pretty-printing 2024-04-01 22:20:39 +01:00
Bruno BELANYI 52772167a6 Pre-generate the magic bitboard seeds
My naive RNG implementation takes about ~40 seconds to generate the
magic bitboards for both bishops and rooks (or ~1 second in release
mode).

If we pre-generate the seeds, we can instead make it ~instantaneous.

The self-modifying code is inspired by matklad [1].

[1]: https://matklad.github.io/2022/03/26/self-modifying-code.html
2024-04-01 22:20:39 +01:00
Bruno BELANYI 9dea85054d Add 'ChessBoard::checkers' 2024-04-01 22:20:39 +01:00
Bruno BELANYI f582a76e70 Test for opponent being in check during validation 2024-04-01 22:20:39 +01:00
Bruno BELANYI 58d8743106 Use 'ChessBoard::occupancy' 2024-04-01 22:20:39 +01:00
Bruno BELANYI d9e4f16ec8 Add 'ChessBoard::occupancy' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 08ce3787df Check kings' position in 'ChessBoard::is_valid' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 6976c60fe6 Add 'TryInto<Square>' for 'Bitboard' 2024-04-01 22:20:39 +01:00
Bruno BELANYI bc67ee3e9a Test 'ChessBoard::{do,undo}_move' machinery 2024-04-01 22:20:39 +01:00
Bruno BELANYI c1419f0e44 Add FEN board parsing
Unfortunately, given that I *don't* want to expose all the `ChessBoard`
fields to the rest of the crate, this implementation will have to live
alongside its module instead of inside `crate::fen`...
2024-04-01 22:20:39 +01:00
Bruno BELANYI 3cd2601f07 Add 'ChessBoard::is_valid' 2024-04-01 22:20:39 +01:00
Bruno BELANYI ddcef6f9c0 Add 'FenError::InvalidPosition' variant 2024-04-01 22:20:39 +01:00
Bruno BELANYI c112ddc4cd Implement 'Default' for 'ChessBoard' 2024-04-01 22:20:39 +01:00
Bruno BELANYI ce3ebf05ee Add 'ChessBoard::{,un}do_move' 2024-04-01 22:20:39 +01:00
Bruno BELANYI d44461e35c Add 'ChessBoard' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 64e93b39fd Add FEN castling rights parsing 2024-04-01 22:20:39 +01:00
Bruno BELANYI 7c896d5dba Add FEN piece type parsing 2024-04-01 22:20:39 +01:00
Bruno BELANYI b5365f8a82 Add FEN en-passant target square parsing 2024-04-01 22:20:39 +01:00
Bruno BELANYI 3c2a5a412e Add FEN side to move parsing 2024-04-01 22:20:39 +01:00
Bruno BELANYI bd662fdd27 Introduce 'FenError' enum 2024-04-01 22:20:39 +01:00
Bruno BELANYI 0fd9766db0 Add 'FromFen' trait 2024-04-01 22:20:39 +01:00
Bruno BELANYI de27c186d3 Add 'Move' GDB pretty-printing 2024-04-01 22:20:39 +01:00
Bruno BELANYI 3b530b324f Add 'Piece' GDB pretty-printing 2024-04-01 22:20:39 +01:00
Bruno BELANYI 93e9a51589 Add 'Rank' GDB pretty-printing 2024-04-01 22:20:39 +01:00
Bruno BELANYI d3c3790db4 Add 'File' GDB pretty-printing 2024-04-01 22:20:39 +01:00
Bruno BELANYI 8f3687d862 Add 'Color' GDB pretty-printing 2024-04-01 22:20:39 +01:00
Bruno BELANYI 4d69d34fa0 Add 'Move' 2024-04-01 22:20:39 +01:00
Bruno BELANYI be8024d176 Deny warnings in 'clippy' pre-commit hook 2024-04-01 22:20:39 +01:00
Bruno BELANYI 0b9318cdf3 Add 'Bitboard::has_more_than_one' 2024-04-01 22:20:39 +01:00
Bruno BELANYI e673e20a63 Add 'Color::third_rank' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 0cc1fcf912 Add 'CastleRights::with_{king,queen}_side' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 072a1ea13c Add '*Assign' operators to 'Bitboard' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 02768b6d96 Remove all useless 'allow(unused)' 2024-04-01 22:20:39 +01:00
Bruno BELANYI af421a9452 Tighten item visibilities 2024-04-01 22:20:39 +01:00
Bruno BELANYI 3b1735da79 Add 'BitboardIterator::new' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 06087358de Add bitboard-based move generation 2024-04-01 22:20:39 +01:00
Bruno BELANYI 459b878342 Expose magic bitboard generation to parent module 2024-04-01 22:20:39 +01:00
Bruno BELANYI 2bdfbbf467 Add 'MagicMoves' 2024-04-01 22:20:39 +01:00
Bruno BELANYI d519cfb817 Make 'Magic' 'pub(crate)' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 25494700d7 Add missing derives to 'Magic' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 028c4543e7 Move 'Magic' to 'wizardry' submodule 2024-04-01 22:20:39 +01:00