rsshogi 1.0.2

Reusable Rust shogi primitives for board state, move generation, legality, and record parsing.
Documentation
use crate::types::{Move32, PieceType, Square};

#[test]
fn test_pawn_drop_mate_reference_position_detected() {
    let sfen = "l+N4knl/6g2/4+P2p1/p2s1Pp1p/1pp1l2P1/P1sK2P1P/1P3S1r1/5G3/LN7 w R2BGSN4Pgp 106";
    let pos = crate::board::position_from_sfen(sfen).expect("valid SFEN");

    let to = Square::from_usi("6e").expect("valid square");
    let drop = Move32::drop(PieceType::PAWN, to, pos.turn());
    assert!(pos.gives_check_move32(drop), "drop should give check");
    assert!(!pos.is_legal_pawn_drop(pos.turn(), to));
    assert!(!pos.is_legal_move32(drop), "pawn drop mate must be rejected by is_legal");
}

#[test]
fn test_pawn_drop_mate_reference_position_not_detected() {
    let sfen = "l+N4knl/6g2/4+P2p1/p1s2Pp1p/1pp1l2P1/P1sK2P1P/1P3S1r1/5G3/LN7 w R2BGSN3Pg2p 1";
    let pos = crate::board::position_from_sfen(sfen).expect("valid SFEN");

    let to = Square::from_usi("6e").expect("valid square");
    let drop = Move32::drop(PieceType::PAWN, to, pos.turn());
    assert!(pos.gives_check_move32(drop), "drop should give check");
    assert!(pos.is_legal_pawn_drop(pos.turn(), to));
    assert!(pos.is_legal_move32(drop), "non-mating pawn drop must be legal");
}