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}