use std::env;
use structured_zstd::encoding::{CompressionLevel, FrameCompressor};
#[cfg(feature = "dhat-heap")]
#[global_allocator]
static ALLOC: dhat::Alloc = dhat::Alloc;
fn main() {
#[cfg(feature = "dhat-heap")]
let _dhat = dhat::Profiler::new_heap();
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 corpus_path: Option<&str> = args.get(3).map(|s| s.as_str());
let src: Vec<u8> = if let Some(path) = corpus_path {
std::fs::read(path).expect("read corpus file")
} else {
let n = 1_048_576usize;
let mut src = Vec::with_capacity(n);
let mut state: u64 = 0x517cc1b727220a95;
while src.len() < n {
state = state
.wrapping_mul(6364136223846793005)
.wrapping_add(1442695040888963407);
src.push((state >> 56) as u8);
}
src
};
let cap = src
.len()
.checked_add(src.len() >> 3)
.and_then(|v| v.checked_add(4096))
.expect("corpus too large: output-capacity bound overflows usize");
let mut out: Vec<u8> = Vec::with_capacity(cap);
let compressor_level = CompressionLevel::from_level(level);
let mut frame_enc: FrameCompressor = FrameCompressor::new(compressor_level);
frame_enc.set_source_size_hint(src.len() as u64);
let mut sink: usize = 0;
for _ in 0..iters {
frame_enc.compress_independent_frame_into(src.as_slice(), &mut out);
sink = sink.wrapping_add(out.len());
core::hint::black_box(&out);
}
eprintln!(
"encoded {} bytes × {} iters at level {} (reused compressor); last-out-sum={}",
src.len(),
iters,
level,
sink
);
}