diff --git a/moves/src/builder.rs b/moves/src/builder.rs index e8144a1..f18e5d1 100644 --- a/moves/src/builder.rs +++ b/moves/src/builder.rs @@ -270,14 +270,19 @@ impl Builder { } pub fn capturing_en_passant_on(self, square: Square) -> Builder { - let mut style = self.style; - style.to = Some(square); + match EnPassant::from_target_square(square) { + Some(en_passant) => { + let mut style = self.style; + style.to = Some(en_passant.target_square()); - Builder { - style: EnPassantCapture { - push: self.style, - capture: Some(square), - }, + Builder { + style: EnPassantCapture { + push: style, + capture: Some(en_passant.capture_square()), + }, + } + } + None => todo!(), } } diff --git a/moves/tests/flags.rs b/moves/tests/flags.rs index cff0841..2e56389 100644 --- a/moves/tests/flags.rs +++ b/moves/tests/flags.rs @@ -27,7 +27,9 @@ macro_rules! assert_flags { #[test] fn move_flags_quiet() -> Result<(), BuilderError> { - let mv = Builder::push(&piece!(White Pawn on A4), Square::A5).build()?; + let mv = Builder::push(&piece!(White Pawn on A4)) + .to(Square::A5) + .build()?; assert_flags!(mv, true, false, false, false, false, false); Ok(()) @@ -57,21 +59,23 @@ fn move_flags_capture() -> Result<(), BuilderError> { fn move_flags_en_passant_capture() -> Result<(), BuilderError> { let mv = unsafe { Builder::new() - .from(Square::A5) - .capturing_en_passant_on(Square::B4) - .build_unchecked()? + .from(Square::A4) + .capturing_en_passant_on(Square::B3) + .build_unchecked() }; assert_flags!(mv, false, false, true, true, false, false); - assert_eq!(mv.origin_square(), Square::A5); - assert_eq!(mv.target_square(), Square::B4); + assert_eq!(mv.origin_square(), Square::A4); + assert_eq!(mv.target_square(), Square::B3); + assert_eq!(mv.capture_square(), Some(Square::B4)); Ok(()) } #[test] fn move_flags_promotion() -> Result<(), BuilderError> { - let mv = Builder::push(&piece!(White Pawn on H7), Square::H8) + let mv = Builder::push(&piece!(White Pawn on H7)) + .to(Square::H8) .promoting_to(PromotionShape::Queen) .build()?; @@ -83,7 +87,8 @@ fn move_flags_promotion() -> Result<(), BuilderError> { #[test] fn move_flags_capture_promotion() -> Result<(), BuilderError> { - let mv = Builder::push(&piece!(White Pawn on H7), Square::H8) + let mv = Builder::push(&piece!(White Pawn on H7)) + .to(Square::H8) .capturing_piece(&piece!(Black Knight on G8)) .promoting_to(PromotionShape::Queen) .build()?; diff --git a/moves/tests/pushes.rs b/moves/tests/pushes.rs index 0ef2a2f..ad66152 100644 --- a/moves/tests/pushes.rs +++ b/moves/tests/pushes.rs @@ -5,7 +5,9 @@ use chessfriend_moves::{Builder, BuilderError}; #[test] fn pawn_push() -> Result<(), BuilderError> { - let mv = Builder::push(&piece!(White Pawn on A3), Square::A4).build()?; + let mv = Builder::push(&piece!(White Pawn on A3)) + .to(Square::A4) + .build()?; assert!(mv.is_quiet()); assert_eq!(mv.origin_square(), Square::A3);