Get en passant move building working (again?)
This commit is contained in:
		
							parent
							
								
									5d1ad73be6
								
							
						
					
					
						commit
						047eb4fd77
					
				
					 3 changed files with 28 additions and 16 deletions
				
			
		| 
						 | 
				
			
			@ -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!(),
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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()?;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue