Commit graph

66 commits

Author SHA1 Message Date
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
Bruno BELANYI a21841c0ad Add 'CastleRights::has_{king,queen}_side' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 88e74d5fff Add 'CastleRights' enum 2024-04-01 22:20:39 +01:00
Bruno BELANYI f351f056a9 Add 'Color' enum 2024-04-01 22:20:39 +01:00
Bruno BELANYI 042f5dbc4d Rename 'board::direction{s,}' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 585c127381 Statically assert zero-cost invariants
Since some or all of those invariants will come in handy to ensure we
use as little memory as possible, to maximize the speed of the move
generation later on.
2024-04-01 22:20:39 +01:00
Bruno BELANYI 643b688384 Add 'Bitboard::{LIGHT,DARK}_SQUARES 2024-04-01 22:20:39 +01:00
Bruno BELANYI 659e3f1c9a Make use of 'Bitboard::is_empty' 2024-04-01 22:20:39 +01:00
Bruno BELANYI f66b0276d8 Add 'Bitboard::is_empty' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 9ef600c1bb Add 'Direction::slide_{square,board}' 2024-04-01 22:20:39 +01:00
Bruno BELANYI dc974ec0e9 Add 'Bitboard::{ANTI_,}DIAGONAL' 2024-04-01 22:20:39 +01:00
Bruno BELANYI 251c10cbc7 Add 'Direction::move_square' 2024-04-01 22:20:39 +01:00