//! The track switching corpus and the probe corpus (WAI `moqt-conformance/switching/` and //! `moqt-conformance/probe/`; `draft-ugur-moq-fast-switching-00`, `draft-gurel-moq-probing-00`): //! //! cargo run -p joule-moq --example adaptation_vectors -- gen writes both (never in CI) //! cargo run -p joule-moq --example adaptation_vectors -- verify checks both use joule_moq::{probe, switching}; const WAI: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/../../../../wai/"); fn main() -> std::process::ExitCode { let path = |corpus: &str| format!("{WAI}moqt-conformance/{corpus}/vectors.json"); match std::env::args().nth(1).as_deref() { Some("gen") => { for (corpus, text) in [("switching", switching::corpus::generate()), ("probe", probe::corpus::generate())] { std::fs::create_dir_all(format!("{WAI}moqt-conformance/{corpus}")).expect("the corpus directory"); std::fs::write(path(corpus), text).expect("write vectors.json"); println!("wrote {}", path(corpus)); } std::process::ExitCode::SUCCESS } Some("verify") => { let read = |corpus: &str| std::fs::read_to_string(path(corpus)).ok().and_then(|s| serde_json::from_str::(&s).ok()); let mut fails = Vec::new(); match read("switching") { Some(doc) => fails.extend(switching::corpus::verify(&doc)), None => fails.push("the switching vectors do not read".into()), } match read("probe") { Some(doc) => fails.extend(probe::corpus::verify(&doc)), None => fails.push("the probe vectors do not read".into()), } 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: adaptation_vectors gen | verify"); std::process::ExitCode::from(2) } } }