Commit graph

134 commits

Author SHA1 Message Date
Bruno BELANYI 1c8a101689 Simplify 'Move'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
Making 'Move' lightweight sounds like a better idea now that I am
looking at it with fresh eyes...
2024-04-05 22:41:24 +01:00
Bruno BELANYI adad4118ae Account for captures in 'ChessBoard::{,un}do_move'
This is a silly thing to forget...
2024-04-05 22:23:16 +01:00
Bruno BELANYI 1646c055fd Use 'from_gdb' constructors in GDB utils
All checks were successful
ci/woodpecker/push/check Pipeline was successful
Makes it much more readable.
2024-04-04 00:55:41 +01:00
Bruno BELANYI fcbcc3cdef Add 'from_gdb' constructors in GDB utils 2024-04-04 00:55:41 +01:00
Bruno BELANYI f0edd0abc7 Properly handle 'Optional' in pretty-printers 2024-04-04 00:49:00 +01:00
Bruno BELANYI b289927e3a Loosen GDB utils constructors 2024-04-04 00:49:00 +01:00
Bruno BELANYI cb06fc10c8 Fix broken link in documentation
All checks were successful
ci/woodpecker/push/check Pipeline was successful
2024-04-03 21:26:18 +01:00
Bruno BELANYI b0e9e3cbcc Add explicit 'rustfmt' configuration 2024-04-03 21:26:18 +01:00
Bruno BELANYI d74605ba5c Use 'NUM_VARIANTS' where appropriate 2024-04-03 21:26:18 +01:00
Bruno BELANYI 8e688a0cac Add 'try_from_index' implementations 2024-04-03 21:26:18 +01:00
Bruno BELANYI 753f1590d1 Add 'Panics' section to 'from_index' methods 2024-04-03 21:26:18 +01:00
Bruno BELANYI 7d9c5edb99 Rename 'ValidationError'
This is a better, clearer name.
2024-04-03 21:26:18 +01:00
Bruno BELANYI 6f161d067d Use 'ChessBoardBuilder' in more validation tests 2024-04-03 20:07:50 +01:00
Bruno BELANYI 388c26f4ac Use 'writeln' in magic seed generation 2024-04-03 20:01:00 +01:00
Bruno BELANYI a4aa4ae1e4 Make 'half_move_clock' a 'u32'
All checks were successful
ci/woodpecker/push/check Pipeline was successful
It *could* be set to a high value due to e.g: starting the engine in the
middle of a game.

Moving from a `u8` to a `u32` does not change the size of the type, so
let's just do that.

Use that opportunity to fix the comment about the number of
*half-moves* (it's 50 moves *per player*).
2024-04-01 23:14:11 +01:00
Bruno BELANYI 353271f427 Simplify 'FromFen' for 'ChessBoard' 2024-04-01 23:11:43 +01:00
Bruno BELANYI 08f010ed32 Add total plie count validation 2024-04-01 22:59:06 +01:00
Bruno BELANYI f4764f2174 Use turn counts in 'ChessBoardBuilder'
This makes more sense from a user's perspective.
2024-04-01 22:48:55 +01:00
Bruno BELANYI ef3a1e4695 Add half-move clock validation 2024-04-01 22:47:59 +01:00
Bruno BELANYI 2853cec7c9 Add tests for en-passant validation 2024-04-01 22:47:59 +01:00
Bruno BELANYI ff7bea0508 Validate en-passant square's rank in 'ChessBoard' 2024-04-01 22:47:59 +01:00
Bruno BELANYI 62c2be48c4 Move FEN-related tests to its module 2024-04-01 22:47:59 +01:00
Bruno BELANYI c3be661719 Move 'FromFen' for 'ChessBoard' into 'fen' module 2024-04-01 22:47:59 +01:00
Bruno BELANYI b9cc60be9c Use 'ChessBoardBuilder' in 'FromFen'
This will allow taking this *out* of the module, now that we don't need
to reach into the internals of 'ChessBoard'.
2024-04-01 22:47:59 +01:00
Bruno BELANYI 829362dbce Add 'From<InvalidError>' for 'FenError' 2024-04-01 22:47:59 +01:00
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