Commit graph

109 commits

Author SHA1 Message Date
Bruno BELANYI a676094dc1 Use 'ChessBoardBuilder' in validation tests
The various tests for overlapping can't be triggered with the builder
API, so those have stayed unchanged.
2024-04-01 22:47:59 +01:00
Bruno BELANYI 1cf05b5f55 Add 'ChessBoardBuilder' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 12909377e4 Use 'ChessBoard::validate' in tests
This makes the test more explicit and exact in what they're testing.
2024-04-01 22:20:39 +01:00
Bruno BELANYI 8173fa2ccd Fix 'ChessBoard' validation test
It wasn't actually testing the right thing due to the typo...
2024-04-01 22:20:39 +01:00
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