Get en passant move building working (again?)

This commit is contained in:
Eryn Wells 2024-02-13 11:05:02 -07:00
parent 5d1ad73be6
commit 047eb4fd77
3 changed files with 28 additions and 16 deletions

View file

@ -270,14 +270,19 @@ impl Builder<Push> {
}
pub fn capturing_en_passant_on(self, square: Square) -> Builder<EnPassantCapture> {
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!(),
}
}

View file

@ -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()?;

View file

@ -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);