Bruno BELANYI
a4aa4ae1e4
Make 'half_move_clock' a 'u32'
...
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
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
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
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
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
4d69d34fa0
Add 'Move'
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
3b1735da79
Add 'BitboardIterator::new'
2024-04-01 22:20:39 +01:00
Bruno BELANYI
bd9238d686
Add 'Color::iter'
2024-04-01 22:20:39 +01:00
Bruno BELANYI
bed7ec3be2
Remove spurious links in 'Square' documentation
2024-04-01 22:20:39 +01:00
Bruno BELANYI
4491e5be00
Remove spurious links in 'Bitboard' documentation
2024-04-01 22:20:39 +01:00
Bruno BELANYI
8d03242e83
Add 'Bitboard::iter_powerset'
2024-04-01 22:20:39 +01:00
Bruno BELANYI
a3a9f64213
Add 'Piece' enum
2024-04-01 22:20:39 +01:00
Bruno BELANYI
d919b956ed
Add 'NUM_VARIANTS' constant to all 'board' enums
2024-04-01 22:20:39 +01:00
Bruno BELANYI
407f85c19b
Consistently use 'Self' type in 'impl' blocks
2024-04-01 22:20:39 +01:00
Bruno BELANYI
b68dd132e8
Fix typo in 'board::Color' documentation
2024-04-01 22:20:39 +01:00
Bruno BELANYI
2c1142324c
Add 'Color::slide_board_with_blockers'
2024-04-01 22:20:39 +01:00
Bruno BELANYI
0315e2fb51
Improve 'board::BitboardIterator'
...
* Accurate 'size_hint'.
* Exact size.
* Fused iterator (keeps returning 'None' after returning 'None' once).
2024-04-01 22:20:39 +01:00
Bruno BELANYI
f3a83065da
Add 'Color::{forward,backward}_direction'
2024-04-01 22:20:39 +01:00
Bruno BELANYI
0812d916ff
Add 'CastleRights::unmoved_rooks'
2024-04-01 22:20:39 +01:00
Bruno BELANYI
e84ec552fe
Add 'CastleRights::without_{king,queen}_side'
2024-04-01 22:20:39 +01:00