[board] Implement a bunch of sight tests
This commit is contained in:
parent
2174bcf009
commit
3ba6722697
2 changed files with 111 additions and 0 deletions
|
@ -236,6 +236,12 @@ impl Position {
|
||||||
.next()
|
.next()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
sight_of_opposing_player.is_set(king_square)
|
sight_of_opposing_player.is_set(king_square)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
impl Position {
|
||||||
|
pub(crate) fn test_set_en_passant_square(&mut self, square: Square) {
|
||||||
|
self.en_passant_square = Some(square);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -153,3 +153,108 @@ impl PlacedPiece {
|
||||||
BitBoard::king_moves(self.square()) & !position.friendly_pieces()
|
BitBoard::king_moves(self.square()) & !position.friendly_pieces()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
macro_rules! sight_test {
|
||||||
|
($test_name:ident, $position:expr, $piece:expr, $bitboard:expr) => {
|
||||||
|
#[test]
|
||||||
|
fn $test_name() {
|
||||||
|
let pos = $position;
|
||||||
|
let pp = $piece;
|
||||||
|
let sight = pp.sight_in_position(&pos);
|
||||||
|
|
||||||
|
assert_eq!(sight, $bitboard);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
($test_name:ident, $piece:expr, $bitboard:expr) => {
|
||||||
|
sight_test! {$test_name, $crate::Position::empty(), $piece, $bitboard}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
mod pawn {
|
||||||
|
use crate::{position, sight::Sight, BitBoard, Position, Square};
|
||||||
|
|
||||||
|
sight_test!(e4_pawn, piece!(White Pawn on E4), bitboard!(D5, F5));
|
||||||
|
|
||||||
|
sight_test!(
|
||||||
|
e4_pawn_one_blocker,
|
||||||
|
position![
|
||||||
|
White Bishop on D5,
|
||||||
|
White Pawn on E4,
|
||||||
|
],
|
||||||
|
piece!(White Pawn on E4),
|
||||||
|
bitboard!(F5)
|
||||||
|
);
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn e4_pawn_two_blocker() {
|
||||||
|
let pos = position!(
|
||||||
|
White Bishop on D5,
|
||||||
|
White Queen on F5,
|
||||||
|
White Pawn on E4,
|
||||||
|
);
|
||||||
|
let pp = piece!(White Pawn on E4);
|
||||||
|
let sight = pp.sight_in_position(&pos);
|
||||||
|
|
||||||
|
assert_eq!(sight, BitBoard::empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn e4_pawn_capturable() {
|
||||||
|
let pos = position!(
|
||||||
|
Black Bishop on D5,
|
||||||
|
White Queen on F5,
|
||||||
|
White Pawn on E4,
|
||||||
|
);
|
||||||
|
let pp = piece!(White Pawn on E4);
|
||||||
|
let sight = pp.sight_in_position(&pos);
|
||||||
|
|
||||||
|
assert_eq!(sight, bitboard!(D5));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn e5_en_passant() {
|
||||||
|
let mut pos = position!(
|
||||||
|
White Pawn on E5,
|
||||||
|
Black Pawn on D5,
|
||||||
|
);
|
||||||
|
pos.test_set_en_passant_square(Square::D6);
|
||||||
|
let pp = piece!(White Pawn on E5);
|
||||||
|
let sight = pp.sight_in_position(&pos);
|
||||||
|
|
||||||
|
assert_eq!(sight, bitboard!(D6, F6));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
mod knight {
|
||||||
|
use crate::{sight::Sight, Position};
|
||||||
|
|
||||||
|
sight_test!(
|
||||||
|
f6_knight,
|
||||||
|
piece!(Black Knight on F6),
|
||||||
|
bitboard!(H7, G8, E8, D7, D5, E4, G4, H5)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
mod bishop {
|
||||||
|
use crate::sight::Sight;
|
||||||
|
|
||||||
|
sight_test!(
|
||||||
|
c2_bishop,
|
||||||
|
piece!(Black Bishop on C2),
|
||||||
|
bitboard!(D1, B3, A4, B1, D3, E4, F5, G6, H7)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
mod rook {
|
||||||
|
use crate::sight::Sight;
|
||||||
|
|
||||||
|
sight_test!(
|
||||||
|
g3_rook,
|
||||||
|
piece!(White Rook on G3),
|
||||||
|
bitboard!(G1, G2, G4, G5, G6, G7, G8, A3, B3, C3, D3, E3, F3, H3)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue