shakmaty
A Rust library for chess move generation
Features
-
Generate legal moves:
use ; let pos = default; let legals = pos.legals; assert_eq!; -
Play moves:
use ; // 1. e4 let pos = pos.play?; -
Detect game end conditions:
pos.is_checkmate(),pos.is_stalemate(),pos.is_insufficient_material(),pos.outcome(). -
Read and write FENs, SANs and UCIs.
-
Supports Standard chess and Chess960. Provides vocabulary to implement other variants.
-
Bitboards and compact fixed shift magic attack tables.
Documentation
Changelog
- 0.6.0
- Split
impl From<Move> for Uciintouci()andchess960_uci(). - Fix display of pawn drops.
- Move generating methods clear the move buffer (and therefor no longer panic on too full buffers).
- Added
Position.is_chess960(),Bitboard.without_all(),Role.upper_char(),Board.stepper().
- Split
- 0.5.1
- Fix
Uci::to_move()for en passant moves. Thanks zxqfl.
- Fix
- 0.5.0
- Use
u64instead ofusizeforperft(). - Export error type
InvalidSquareName. - New methods:
CastlingSide.is_{queen|king}_side(),San.matches(),Move.is_capture(),Move.is_promotion(),Move.castling_side(),Position.is_check(). - Derive
OrdandPartialOrdforRole. - Support running benchmarks on stable.
- Use
- 0.4.2
- Fix build error on beta due to the new nightly
option_filterfeature. - Fix unterminated code block in documentation.
- Fix build error on beta due to the new nightly
- 0.4.1
- Fix build error due to the new nightly
option_filterfeature.
- Fix build error due to the new nightly
- 0.4.0
- Rename
Color::from_bool()toColor::from_white(), addColor::from_black(). - Add
Move::role(),Move::is_en_passant()andMove::is_castle(). - Add
Position::en_passant_moves()andPosition::capture_moves(). - Implement
BitXor<bool>forColor. - Implement
FusedIteratorandTrustedLenonBitboard.
- Rename
- 0.3.0
- Switch to
#[repr(i8)]forSquare. Implement all lossless integer conversionsFrom<Square>. - Add
Square::flip_horizontal(),flip_vertical()andflip_diagonal(). - Efficiently implement
CarryRippler::last()by @nvzqz. - Eliminate some unchecked indexing by @nvzqz.
- Faster ASCII case conversions and tests by @nvzqz.
- Switch to
- 0.2.0
Squareis now a#[repr(u8)]enum.- Use
bitflagsforPositionError. - Rename
RemainingChecks::subtract()todecrement(). - Add
Position::swap_turn().
- 0.1.0
- First release with support for stable Rust.
License
Shakmaty is licensed under the GPL-3.0 (or any later version at your option). See the COPYING file for the full license text.