Commit graph

58 commits

Author SHA1 Message Date
9dea85054d Add 'ChessBoard::checkers' 2024-04-01 22:20:39 +01:00
f582a76e70 Test for opponent being in check during validation 2024-04-01 22:20:39 +01:00
58d8743106 Use 'ChessBoard::occupancy' 2024-04-01 22:20:39 +01:00
d9e4f16ec8 Add 'ChessBoard::occupancy' 2024-04-01 22:20:39 +01:00
08ce3787df Check kings' position in 'ChessBoard::is_valid' 2024-04-01 22:20:39 +01:00
6976c60fe6 Add 'TryInto<Square>' for 'Bitboard' 2024-04-01 22:20:39 +01:00
bc67ee3e9a Test 'ChessBoard::{do,undo}_move' machinery 2024-04-01 22:20:39 +01:00
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
3cd2601f07 Add 'ChessBoard::is_valid' 2024-04-01 22:20:39 +01:00
c112ddc4cd Implement 'Default' for 'ChessBoard' 2024-04-01 22:20:39 +01:00
ce3ebf05ee Add 'ChessBoard::{,un}do_move' 2024-04-01 22:20:39 +01:00
d44461e35c Add 'ChessBoard' 2024-04-01 22:20:39 +01:00
4d69d34fa0 Add 'Move' 2024-04-01 22:20:39 +01:00
0b9318cdf3 Add 'Bitboard::has_more_than_one' 2024-04-01 22:20:39 +01:00
e673e20a63 Add 'Color::third_rank' 2024-04-01 22:20:39 +01:00
0cc1fcf912 Add 'CastleRights::with_{king,queen}_side' 2024-04-01 22:20:39 +01:00
072a1ea13c Add '*Assign' operators to 'Bitboard' 2024-04-01 22:20:39 +01:00
3b1735da79 Add 'BitboardIterator::new' 2024-04-01 22:20:39 +01:00
bd9238d686 Add 'Color::iter' 2024-04-01 22:20:39 +01:00
bed7ec3be2 Remove spurious links in 'Square' documentation 2024-04-01 22:20:39 +01:00
4491e5be00 Remove spurious links in 'Bitboard' documentation 2024-04-01 22:20:39 +01:00
8d03242e83 Add 'Bitboard::iter_powerset' 2024-04-01 22:20:39 +01:00
a3a9f64213 Add 'Piece' enum 2024-04-01 22:20:39 +01:00
d919b956ed Add 'NUM_VARIANTS' constant to all 'board' enums 2024-04-01 22:20:39 +01:00
407f85c19b Consistently use 'Self' type in 'impl' blocks 2024-04-01 22:20:39 +01:00
b68dd132e8 Fix typo in 'board::Color' documentation 2024-04-01 22:20:39 +01:00
2c1142324c Add 'Color::slide_board_with_blockers' 2024-04-01 22:20:39 +01:00
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
f3a83065da Add 'Color::{forward,backward}_direction' 2024-04-01 22:20:39 +01:00
0812d916ff Add 'CastleRights::unmoved_rooks' 2024-04-01 22:20:39 +01:00
e84ec552fe Add 'CastleRights::without_{king,queen}_side' 2024-04-01 22:20:39 +01:00
a21841c0ad Add 'CastleRights::has_{king,queen}_side' 2024-04-01 22:20:39 +01:00
88e74d5fff Add 'CastleRights' enum 2024-04-01 22:20:39 +01:00
f351f056a9 Add 'Color' enum 2024-04-01 22:20:39 +01:00
042f5dbc4d Rename 'board::direction{s,}' 2024-04-01 22:20:39 +01:00
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
643b688384 Add 'Bitboard::{LIGHT,DARK}_SQUARES 2024-04-01 22:20:39 +01:00
659e3f1c9a Make use of 'Bitboard::is_empty' 2024-04-01 22:20:39 +01:00
f66b0276d8 Add 'Bitboard::is_empty' 2024-04-01 22:20:39 +01:00
9ef600c1bb Add 'Direction::slide_{square,board}' 2024-04-01 22:20:39 +01:00
dc974ec0e9 Add 'Bitboard::{ANTI_,}DIAGONAL' 2024-04-01 22:20:39 +01:00
251c10cbc7 Add 'Direction::move_square' 2024-04-01 22:20:39 +01:00
1ab024fce8 Add 'Direction::iter_{rook,bishop,royalty,knight}' 2024-04-01 22:20:39 +01:00
924689ec02 Add 'Direction::move_board'
Encapsulates the way to move a piece on a board, avoiding the need to
mask and shift by hand.
2024-04-01 22:20:39 +01:00
b840bfc570 Add 'board::Direction' enum 2024-04-01 22:20:39 +01:00
c177d13b75 Use 'Square::index' in 'Square::{file,rank}_index' 2024-04-01 22:20:39 +01:00
281c79556a Add 'Square::index' 2024-04-01 22:20:39 +01:00
8261b0c06b Add 'Bitboard::count' 2024-04-01 22:20:39 +01:00
7a7e7f3665 Add 'Rank::{up,down}' 2024-04-01 22:20:39 +01:00
2b4797ec47 Add 'File::{left,right}' 2024-04-01 22:20:39 +01:00