main.rs

1.5 kB · rust · 52 lines

1mod checks;2mod ledger;3mod registry;4mod report;56use registry::{Cost, Verdict};7use report::Run;8use std::path::Path;910#[test]11fn the_ledger_claims_hold() {12    let all = std::env::var("MRLY_CLAIMS")13        .map(|name| name == "all")14        .unwrap_or(false);15    let lane = if all { Cost::Dear } else { Cost::Cheap };16    let folder = Path::new(env!("CARGO_MANIFEST_DIR")).join("../../research/claims");17    let mut files: Vec<_> = std::fs::read_dir(&folder)18        .expect("the claims folder is readable")19        .map(|entry| entry.expect("an entry reads").path())20        .filter(|path| path.extension().is_some_and(|ext| ext == "md"))21        .collect();22    files.sort();23    let text: String = files24        .iter()25        .map(|path| std::fs::read_to_string(path).expect("a claims file is readable"))26        .collect::<Vec<_>>()27        .join("\n");28    let book = match ledger::parse(&text) {29        Ok(book) => book,30        Err(why) => panic!("{why}"),31    };32    let mut runs = Vec::new();33    for &(key, cost, check) in registry::entries() {34        let outcome = match (cost, lane) {35            (Cost::Dear, Cost::Cheap) => None,36            _ => Some(check()),37        };38        runs.push(Run { key, outcome });39    }40    let sheet = report::tally(&book, &runs);41    report::print(&sheet);42    assert_eq!(43        sheet.count(Verdict::Failed),44        0,45        "the ledger holds failed claims"46    );47    assert_eq!(48        sheet.count(Verdict::Orphan),49        0,50        "the registry holds orphan checks"51    );52}