WIP
This commit is contained in:
parent
d5cdf273c8
commit
091cc99cb3
42 changed files with 805 additions and 1662 deletions
|
@ -13,22 +13,25 @@ impl Rights {
|
|||
/// as long as they have not moved their king, or the rook on that side of
|
||||
/// the board.
|
||||
#[must_use]
|
||||
pub fn is_set(self, color: Color, castle: Castle) -> bool {
|
||||
pub fn color_has_right(self, color: Color, castle: Castle) -> bool {
|
||||
(self.0 & (1 << Self::flag_offset(color, castle))) != 0
|
||||
}
|
||||
|
||||
pub fn set(&mut self, color: Color, castle: Castle) {
|
||||
pub fn grant(&mut self, color: Color, castle: Castle) {
|
||||
self.0 |= 1 << Self::flag_offset(color, castle);
|
||||
}
|
||||
|
||||
pub fn clear(&mut self, color: Color, castle: Castle) {
|
||||
pub fn revoke(&mut self, color: Color, castle: Castle) {
|
||||
self.0 &= !(1 << Self::flag_offset(color, castle));
|
||||
}
|
||||
|
||||
pub fn clear_all(&mut self) {
|
||||
/// Revoke castling rights for all colors and all sides of the board.
|
||||
pub fn revoke_all(&mut self) {
|
||||
self.0 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
impl Rights {
|
||||
fn flag_offset(color: Color, castle: Castle) -> usize {
|
||||
((color as usize) << 1) + castle as usize
|
||||
}
|
||||
|
@ -61,21 +64,21 @@ mod tests {
|
|||
#[test]
|
||||
fn default_rights() {
|
||||
let mut rights = Rights::default();
|
||||
assert!(rights.is_set(Color::White, Castle::KingSide));
|
||||
assert!(rights.is_set(Color::White, Castle::QueenSide));
|
||||
assert!(rights.is_set(Color::Black, Castle::KingSide));
|
||||
assert!(rights.is_set(Color::Black, Castle::QueenSide));
|
||||
assert!(rights.color_has_right(Color::White, Castle::KingSide));
|
||||
assert!(rights.color_has_right(Color::White, Castle::QueenSide));
|
||||
assert!(rights.color_has_right(Color::Black, Castle::KingSide));
|
||||
assert!(rights.color_has_right(Color::Black, Castle::QueenSide));
|
||||
|
||||
rights.clear(Color::White, Castle::QueenSide);
|
||||
assert!(rights.is_set(Color::White, Castle::KingSide));
|
||||
assert!(!rights.is_set(Color::White, Castle::QueenSide));
|
||||
assert!(rights.is_set(Color::Black, Castle::KingSide));
|
||||
assert!(rights.is_set(Color::Black, Castle::QueenSide));
|
||||
rights.revoke(Color::White, Castle::QueenSide);
|
||||
assert!(rights.color_has_right(Color::White, Castle::KingSide));
|
||||
assert!(!rights.color_has_right(Color::White, Castle::QueenSide));
|
||||
assert!(rights.color_has_right(Color::Black, Castle::KingSide));
|
||||
assert!(rights.color_has_right(Color::Black, Castle::QueenSide));
|
||||
|
||||
rights.set(Color::White, Castle::QueenSide);
|
||||
assert!(rights.is_set(Color::White, Castle::KingSide));
|
||||
assert!(rights.is_set(Color::White, Castle::QueenSide));
|
||||
assert!(rights.is_set(Color::Black, Castle::KingSide));
|
||||
assert!(rights.is_set(Color::Black, Castle::QueenSide));
|
||||
rights.grant(Color::White, Castle::QueenSide);
|
||||
assert!(rights.color_has_right(Color::White, Castle::KingSide));
|
||||
assert!(rights.color_has_right(Color::White, Castle::QueenSide));
|
||||
assert!(rights.color_has_right(Color::Black, Castle::KingSide));
|
||||
assert!(rights.color_has_right(Color::Black, Castle::QueenSide));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue