[board] Test to verify the king can't move into or stay in check
Write a test on the king move generator to verify the king can't move to a square where it would still be in check.
This commit is contained in:
parent
b002442b42
commit
1e77bc5ebb
1 changed files with 37 additions and 1 deletions
|
@ -74,7 +74,7 @@ impl MoveGeneratorInternal for KingMoveGenerator {
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::position;
|
use crate::{position, r#move::AlgebraicMoveFormatter, PositionBuilder};
|
||||||
use chessfriend_bitboard::bitboard;
|
use chessfriend_bitboard::bitboard;
|
||||||
use chessfriend_core::{piece, Square};
|
use chessfriend_core::{piece, Square};
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
|
@ -154,4 +154,40 @@ mod tests {
|
||||||
generated_moves
|
generated_moves
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn black_king_in_check_by_rook() {
|
||||||
|
let pos = PositionBuilder::new()
|
||||||
|
.place_piece(piece!(White King on E1))
|
||||||
|
.place_piece(piece!(White Rook on E4))
|
||||||
|
.place_piece(piece!(Black King on E7))
|
||||||
|
.to_move(Color::Black)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
assert!(pos.is_king_in_check());
|
||||||
|
|
||||||
|
let generator = KingMoveGenerator::new(&pos, Color::Black);
|
||||||
|
let generated_moves: HashSet<Move> = generator.iter().cloned().collect();
|
||||||
|
|
||||||
|
let king = piece!(Black King);
|
||||||
|
let from_square = Square::E7;
|
||||||
|
let expected_moves = HashSet::from_iter([
|
||||||
|
MoveBuilder::new(king, from_square, Square::D6).build(),
|
||||||
|
MoveBuilder::new(king, from_square, Square::D7).build(),
|
||||||
|
MoveBuilder::new(king, from_square, Square::D8).build(),
|
||||||
|
MoveBuilder::new(king, from_square, Square::F6).build(),
|
||||||
|
MoveBuilder::new(king, from_square, Square::F7).build(),
|
||||||
|
MoveBuilder::new(king, from_square, Square::F8).build(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
generated_moves,
|
||||||
|
expected_moves,
|
||||||
|
"Difference: {:?}",
|
||||||
|
generated_moves
|
||||||
|
.symmetric_difference(&expected_moves)
|
||||||
|
.map(|mv| format!("{}", AlgebraicMoveFormatter::new(mv, &pos)))
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue