[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)]
 | 
			
		||||
mod tests {
 | 
			
		||||
    use super::*;
 | 
			
		||||
    use crate::position;
 | 
			
		||||
    use crate::{position, r#move::AlgebraicMoveFormatter, PositionBuilder};
 | 
			
		||||
    use chessfriend_bitboard::bitboard;
 | 
			
		||||
    use chessfriend_core::{piece, Square};
 | 
			
		||||
    use std::collections::HashSet;
 | 
			
		||||
| 
						 | 
				
			
			@ -154,4 +154,40 @@ mod tests {
 | 
			
		|||
            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