Replace uses of types in r#move with types from the moves package types
This commit is contained in:
parent
aaad991899
commit
d668091d0d
16 changed files with 273 additions and 280 deletions
|
@ -6,15 +6,13 @@
|
|||
//! [1]: https://peterellisjones.com
|
||||
//! [2]: https://peterellisjones.com/posts/generating-legal-chess-moves-efficiently/
|
||||
|
||||
use crate::{
|
||||
assert_move_list, formatted_move_list, move_generator::Moves, r#move::AlgebraicMoveFormatter,
|
||||
test_position, Move, MoveBuilder,
|
||||
};
|
||||
use crate::{assert_move_list, formatted_move_list, test_position, testing::*};
|
||||
use chessfriend_core::{piece, Square};
|
||||
use chessfriend_moves::Builder as MoveBuilder;
|
||||
use std::collections::HashSet;
|
||||
|
||||
#[test]
|
||||
fn pseudo_legal_move_generation() -> Result<(), String> {
|
||||
fn pseudo_legal_move_generation() -> TestResult {
|
||||
let pos = test_position!(Black, [
|
||||
Black King on E8,
|
||||
White King on E1,
|
||||
|
@ -24,7 +22,7 @@ fn pseudo_legal_move_generation() -> Result<(), String> {
|
|||
let generated_moves = pos.moves();
|
||||
let king_moves = generated_moves
|
||||
.moves_for_piece(&piece!(Black King on E8))
|
||||
.ok_or("No valid king moves")?;
|
||||
.ok_or(TestError::NoLegalMoves)?;
|
||||
|
||||
assert!(!king_moves.can_move_to_square(Square::F8));
|
||||
assert!(!king_moves.can_move_to_square(Square::F7));
|
||||
|
@ -33,7 +31,7 @@ fn pseudo_legal_move_generation() -> Result<(), String> {
|
|||
}
|
||||
|
||||
#[test]
|
||||
fn gotcha_king_moves_away_from_a_checking_slider() -> Result<(), String> {
|
||||
fn gotcha_king_moves_away_from_a_checking_slider() -> TestResult {
|
||||
let pos = test_position!(Black, [
|
||||
Black King on E7,
|
||||
White King on E1,
|
||||
|
@ -43,7 +41,7 @@ fn gotcha_king_moves_away_from_a_checking_slider() -> Result<(), String> {
|
|||
let generated_moves = pos.moves();
|
||||
let king_moves = generated_moves
|
||||
.moves_for_piece(&piece!(Black King on E7))
|
||||
.ok_or("No valid king moves")?;
|
||||
.ok_or(TestError::NoLegalMoves)?;
|
||||
|
||||
assert!(!king_moves.can_move_to_square(Square::E8));
|
||||
|
||||
|
@ -51,7 +49,7 @@ fn gotcha_king_moves_away_from_a_checking_slider() -> Result<(), String> {
|
|||
}
|
||||
|
||||
#[test]
|
||||
fn check_evasions_1() {
|
||||
fn check_evasions_1() -> TestResult {
|
||||
let pos = test_position!(Black, [
|
||||
Black King on E8,
|
||||
White King on E1,
|
||||
|
@ -60,11 +58,12 @@ fn check_evasions_1() {
|
|||
|
||||
let generated_moves = pos.moves();
|
||||
|
||||
let builder = MoveBuilder::push(&piece!(Black King on E8));
|
||||
let expected_moves = HashSet::from_iter([
|
||||
MoveBuilder::new(piece!(Black King), Square::E8, Square::D8).build(),
|
||||
MoveBuilder::new(piece!(Black King), Square::E8, Square::E7).build(),
|
||||
MoveBuilder::new(piece!(Black King), Square::E8, Square::F7).build(),
|
||||
MoveBuilder::new(piece!(Black King), Square::E8, Square::F8).build(),
|
||||
builder.clone().to(Square::D8).build()?,
|
||||
builder.clone().to(Square::E7).build()?,
|
||||
builder.clone().to(Square::F7).build()?,
|
||||
builder.clone().to(Square::F8).build()?,
|
||||
]);
|
||||
|
||||
assert_move_list!(
|
||||
|
@ -72,10 +71,12 @@ fn check_evasions_1() {
|
|||
expected_moves,
|
||||
pos
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn check_evasions_double_check() {
|
||||
fn check_evasions_double_check() -> TestResult {
|
||||
let pos = test_position!(Black, [
|
||||
Black King on E8,
|
||||
Black Bishop on F6,
|
||||
|
@ -86,11 +87,12 @@ fn check_evasions_double_check() {
|
|||
|
||||
let generated_moves = pos.moves();
|
||||
|
||||
let builder = MoveBuilder::push(&piece!(Black King on E8));
|
||||
let expected_moves = HashSet::from_iter([
|
||||
MoveBuilder::new(piece!(Black King), Square::E8, Square::D8).build(),
|
||||
MoveBuilder::new(piece!(Black King), Square::E8, Square::D7).build(),
|
||||
MoveBuilder::new(piece!(Black King), Square::E8, Square::F7).build(),
|
||||
MoveBuilder::new(piece!(Black King), Square::E8, Square::F8).build(),
|
||||
builder.clone().to(Square::D8).build()?,
|
||||
builder.clone().to(Square::D7).build()?,
|
||||
builder.clone().to(Square::F7).build()?,
|
||||
builder.clone().to(Square::F8).build()?,
|
||||
]);
|
||||
|
||||
assert_move_list!(
|
||||
|
@ -98,10 +100,12 @@ fn check_evasions_double_check() {
|
|||
expected_moves,
|
||||
pos
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn single_check_with_blocker() {
|
||||
fn single_check_with_blocker() -> TestResult {
|
||||
let pos = test_position!(Black, [
|
||||
Black King on E8,
|
||||
Black Knight on G6,
|
||||
|
@ -111,15 +115,15 @@ fn single_check_with_blocker() {
|
|||
|
||||
let generated_moves = pos.moves();
|
||||
|
||||
let king_builder = MoveBuilder::push(&piece!(Black King on E8));
|
||||
let knight_builder = MoveBuilder::push(&piece!(Black Knight on G6));
|
||||
let expected_moves = HashSet::from_iter([
|
||||
MoveBuilder::new(piece!(Black King), Square::E8, Square::D8).build(),
|
||||
MoveBuilder::new(piece!(Black King), Square::E8, Square::D7).build(),
|
||||
MoveBuilder::new(piece!(Black King), Square::E8, Square::F7).build(),
|
||||
MoveBuilder::new(piece!(Black King), Square::E8, Square::F8).build(),
|
||||
MoveBuilder::new(piece!(Black Knight), Square::G6, Square::E7).build(),
|
||||
MoveBuilder::new(piece!(Black Knight), Square::G6, Square::E5)
|
||||
.capturing(piece!(White Rook on E5))
|
||||
.build(),
|
||||
king_builder.clone().to(Square::D8).build()?,
|
||||
king_builder.clone().to(Square::D7).build()?,
|
||||
king_builder.clone().to(Square::F7).build()?,
|
||||
king_builder.clone().to(Square::F8).build()?,
|
||||
knight_builder.clone().to(Square::E7).build()?,
|
||||
knight_builder.clone().capturing_on(Square::E5).build()?,
|
||||
]);
|
||||
|
||||
assert_move_list!(
|
||||
|
@ -127,10 +131,12 @@ fn single_check_with_blocker() {
|
|||
expected_moves,
|
||||
pos
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn en_passant_check_capture() {
|
||||
fn en_passant_check_capture() -> TestResult {
|
||||
let pos = test_position!(Black, [
|
||||
Black King on C5,
|
||||
Black Pawn on E4,
|
||||
|
@ -143,17 +149,19 @@ fn en_passant_check_capture() {
|
|||
|
||||
assert!(
|
||||
generated_moves.contains(
|
||||
&MoveBuilder::new(piece!(Black Pawn), Square::E4, Square::D3)
|
||||
.capturing_en_passant(piece!(White Pawn on D4))
|
||||
.build()
|
||||
&MoveBuilder::push(&piece!(Black Pawn on E4))
|
||||
.capturing_en_passant_on(Square::D4)
|
||||
.build()?
|
||||
),
|
||||
"Valid moves: {:?}",
|
||||
formatted_move_list!(generated_moves, pos)
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn en_passant_check_block() {
|
||||
fn en_passant_check_block() -> TestResult {
|
||||
let pos = test_position!(Black, [
|
||||
Black King on B5,
|
||||
Black Pawn on E4,
|
||||
|
@ -167,13 +175,15 @@ fn en_passant_check_block() {
|
|||
|
||||
assert!(
|
||||
generated_moves.contains(
|
||||
&MoveBuilder::new(piece!(Black Pawn), Square::E4, Square::D3)
|
||||
.capturing_en_passant(piece!(White Pawn on D4))
|
||||
.build()
|
||||
&MoveBuilder::push(&piece!(Black Pawn on E4))
|
||||
.capturing_en_passant_on(Square::D4)
|
||||
.build()?
|
||||
),
|
||||
"Valid moves: {:?}",
|
||||
formatted_move_list!(generated_moves, pos)
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -204,7 +214,7 @@ fn pinned_pieces_rook_cannot_move_out_of_pin() -> Result<(), String> {
|
|||
}
|
||||
|
||||
#[test]
|
||||
fn en_passant_discovered_check() {
|
||||
fn en_passant_discovered_check() -> TestResult {
|
||||
let pos = test_position!(Black, [
|
||||
Black King on A4,
|
||||
Black Pawn on E4,
|
||||
|
@ -214,13 +224,15 @@ fn en_passant_discovered_check() {
|
|||
|
||||
let generated_moves = pos.moves().iter().collect::<HashSet<_>>();
|
||||
|
||||
let unexpected_move = MoveBuilder::new(piece!(Black Pawn), Square::E4, Square::D3)
|
||||
.capturing_en_passant(piece!(White Pawn on D4))
|
||||
.build();
|
||||
let unexpected_move = MoveBuilder::push(&piece!(Black Pawn on E4))
|
||||
.capturing_en_passant_on(Square::D4)
|
||||
.build()?;
|
||||
|
||||
assert!(
|
||||
!generated_moves.contains(&unexpected_move),
|
||||
"Valid moves: {:?}",
|
||||
formatted_move_list!(generated_moves, pos)
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue