//! The LOC carriage corpus (WAI `live-conformance/loc/`, loc-carriage ยง8): //! //! cargo run -p joule-moq --example loc_vectors -- gen writes vectors.json (never in CI) //! cargo run -p joule-moq --example loc_vectors -- verify checks it //! //! Its HEVC objects carry access units of WAI's `format-probe-conformance/ext/hevc/base_64x64.265`. use joule_moq::loc::corpus; const WAI: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/../../../../wai/"); fn main() -> std::process::ExitCode { let hevc = std::fs::read(format!("{WAI}format-probe-conformance/ext/hevc/base_64x64.265")).expect("the H.265 vector"); let path = format!("{WAI}live-conformance/loc/vectors.json"); match std::env::args().nth(1).as_deref() { Some("gen") => match corpus::generate(&hevc) { Ok(s) => { std::fs::create_dir_all(format!("{WAI}live-conformance/loc")).expect("the corpus directory"); std::fs::write(&path, s).expect("write vectors.json"); println!("wrote {path}"); std::process::ExitCode::SUCCESS } Err(e) => { eprintln!("{e}"); std::process::ExitCode::FAILURE } }, Some("verify") => { let doc: serde_json::Value = serde_json::from_str(&std::fs::read_to_string(&path).expect("vectors.json")).expect("JSON"); let fails = corpus::verify(&doc); for f in &fails { eprintln!("FAIL {f}"); } println!("{} failures", fails.len()); if fails.is_empty() { std::process::ExitCode::SUCCESS } else { std::process::ExitCode::FAILURE } } _ => { eprintln!("usage: loc_vectors gen | verify"); std::process::ExitCode::from(2) } } }