use std::path::PathBuf;
pub fn vectors_dir() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
.join("tests")
.join("vectors")
}
#[allow(dead_code)] pub struct Vector {
pub name: String,
pub raw: Vec<u8>,
pub lzma: Vec<u8>,
}
pub fn load_all() -> Vec<Vector> {
let dir = vectors_dir();
if !dir.exists() {
return vec![];
}
let mut names: Vec<String> = std::fs::read_dir(&dir)
.expect("read tests/vectors/")
.filter_map(|e| e.ok())
.filter_map(|e| {
let p = e.path();
if p.extension().and_then(|s| s.to_str()) == Some("raw") {
p.file_stem().and_then(|s| s.to_str()).map(|s| s.to_owned())
} else {
None
}
})
.collect();
names.sort();
names
.into_iter()
.filter_map(|name| {
let raw_path = dir.join(format!("{name}.raw"));
let lzma_path = dir.join(format!("{name}.lzma"));
if raw_path.exists() && lzma_path.exists() {
Some(Vector {
name: name.clone(),
raw: std::fs::read(&raw_path)
.unwrap_or_else(|_| panic!("read {}", raw_path.display())),
lzma: std::fs::read(&lzma_path)
.unwrap_or_else(|_| panic!("read {}", lzma_path.display())),
})
} else {
None
}
})
.collect()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn load_all_does_not_panic() {
let vecs = load_all();
let _ = vecs.len();
}
}