use std::env;
use structured_zstd::encoding::{CompressionLevel, FrameCompressor, compress_bound};
fn main() {
let args: Vec<String> = env::args().collect();
let level: i32 = args.get(1).and_then(|s| s.parse().ok()).unwrap_or(3);
let iters: u32 = args.get(2).and_then(|s| s.parse().ok()).unwrap_or(2000);
let path = args
.get(3)
.map(String::as_str)
.unwrap_or("zstd/decodecorpus_files/z000033");
let src =
std::fs::read(path).unwrap_or_else(|e| panic!("oneshot_loop: cannot read {path}: {e}"));
let compressor_level = CompressionLevel::from_level(level);
let mut out: Vec<u8> = Vec::with_capacity(compress_bound(src.len()));
let mut sink: usize = 0;
for _ in 0..iters {
let mut compressor: FrameCompressor<&[u8], &mut Vec<u8>> =
FrameCompressor::new(compressor_level);
out.clear();
compressor.compress_independent_frame_into(&src[..], &mut out);
sink = sink.wrapping_add(out.len());
core::hint::black_box(&out);
}
eprintln!(
"encoded {} bytes × {iters} iters at level {level} (one-shot); out-sum={sink}",
src.len(),
);
}