shakmaty 0.27.0

Chess and chess variant rules and operations
Documentation
#[cfg(feature = "variant")]
#[test]
fn white_insufficient_material_in_horde() {
    use serde::Deserialize;
    use serde_with::{serde_as, DisplayFromStr};
    use shakmaty::{fen::Fen, variant::Horde, CastlingMode, Color, Position};

    #[serde_as]
    #[derive(Deserialize)]
    struct Record {
        #[serde_as(as = "DisplayFromStr")]
        fen: Fen,
        white_has_insufficient_material: bool,
        comment: String,
    }

    let mut reader =
        csv::Reader::from_path("tests/horde_insufficient_material.csv").expect("reader");

    for (i, record) in reader.deserialize().enumerate() {
        let record: Record = record.expect("record");
        let pos: Horde = record
            .fen
            .clone()
            .into_position(CastlingMode::Chess960)
            .expect("valid position");

        assert_eq!(
            pos.has_insufficient_material(Color::White),
            record.white_has_insufficient_material,
            "{} with comment {:?} in line {}",
            record.fen,
            record.comment,
            i + 1
        );
    }
}