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
Bruno BELANYI
2bdfbbf467
Add 'MagicMoves'
2024-04-01 22:20:39 +01:00