1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
//! A library for chess variant rules and operations.
//!
//! # Examples
//!
//! Generate legal moves in the starting position:
//!
//! ```
//! use shakmaty::{Chess, Position};
//!
//! let pos = Chess::default();
//! let legals = pos.legal_moves();
//! assert_eq!(legals.len(), 20);
//! ```
//!
//! Play moves:
//!
//! ```
//! # use shakmaty::{Chess, Position};
//! use shakmaty::{Square, Move, Role};
//! #
//! # let pos = Chess::default();
//!
//! // 1. e4
//! let pos = pos.play(Move::Normal {
//! role: Role::Pawn,
//! from: Square::E2,
//! to: Square::E4,
//! capture: None,
//! promotion: None,
//! })?;
//! # Ok::<_, shakmaty::PlayError<_>>(())
//! ```
//!
//! Detect game end conditions:
//!
//! ```
//! # use shakmaty::{Chess, Position, Outcome};
//! # let pos = Chess::default();
//! assert!(!pos.is_checkmate());
//! assert!(!pos.is_stalemate());
//! assert!(!pos.is_insufficient_material());
//! assert_eq!(pos.outcome(), Outcome::Unknown); // no winner yet
//! ```
//!
//! Also supports [FEN](fen), [SAN](san) and
//! [UCI](uci) formats for positions and moves.
//!
//! # Feature flags
//!
//! Inherent features:
//!
//! * `alloc`: Enables APIs which require the
//! [`alloc`](https://doc.rust-lang.org/stable/alloc/index.html) crate
//! (e.g. FEN string rendering).
//! * `std`: Implies `alloc`. Enabled by default.
//! For `no_std` environments, this must be disabled with `default-features = false`.
//! * `magics`: Allows using large attack tables (currently 694 KiB precomputed
//! at compile time). Gains ~20% perft speed on x86, ~5% on ARM, but generally
//! much less outside of tight benchmark scenarios. Enabled by default.
//! * `variant`: Enables support for all Lichess variants.
//!
//! Optional dependencies:
//!
//! * `arbitrary`: Implements [`arbitrary::Arbitrary`](https://docs.rs/arbitrary/1/arbitrary/trait.Arbitrary.html)
//! for vocabulary types.
//! * `bincode`: Implements [`bincode`](https://docs.rs/bincode/2)
//! encoding/decoding for vocabulary types.
//!
//! Changing encodings is considered a semver breaking change and will be
//! noted in the changelog. But note that in such a case a migration
//! by unpacking with the previous version may be required.
//! * `serde`: Implements [`serde`](https://docs.rs/serde/1)
//! serialization/deserialization for types with unique natural
//! representations.
//! * `nohash-hasher`: Implements
//! [`nohash_hasher::IsEnabled`](https://docs.rs/nohash-hasher/0.2/nohash_hasher/trait.IsEnabled.html)
//! for sensible types.
//!
//! # Related crates
//!
//! * [shakmaty-syzygy](https://docs.rs/shakmaty-syzygy)
//! * [pgn-reader](https://docs.rs/pgn-reader)
extern crate alloc;
extern crate std;
pub use Bitboard;
pub use Board;
pub use ;
pub use ;
pub use ;
pub use perft;
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;