qsolve 1.0.0

A command-line tool for solving Queens puzzles
Documentation
use std::{ffi::OsStr, fs};

use anyhow::Result;

use qsolve::{
    file::QueensFile,
    heuristic::all_heuristics,
    solveiter::solve_iter,
    solvestate::{SolveState, SolveStrategy},
};

#[test]
fn solves_all_folder() -> Result<()> {
    for dir_entry in fs::read_dir("games/")? {
        let dir_entry = dir_entry?;
        if dir_entry.path().extension().and_then(OsStr::to_str) != Some("txt") {
            continue;
        }
        let queens_file = QueensFile::try_from_text_file(&dir_entry.path())?;
        let solve_state = SolveState::from(&queens_file);
        let heuristics = all_heuristics(solve_state.board);
        let state_iter_items =
            solve_iter(solve_state, SolveStrategy::Fast, &heuristics).collect::<Vec<_>>();
        let final_state = &state_iter_items.iter().last().unwrap().solve_state;
        assert!(
            final_state.complete(),
            "Testing final state completion for {:?}",
            dir_entry.path()
        );
    }
    Ok(())
}