use anyhow::Result;
use fastalp::{Encoder, decompress};
fn main() -> Result<()> {
let mut encoder = Encoder::<f64>::with_capacity(1024);
let chunk_a: Vec<f64> = (0..1024).map(|i| 25.0 + (i as f64) * 0.25).collect();
let chunk_b: Vec<f64> = (1024..2048).map(|i| 25.0 + (i as f64) * 0.25).collect();
let mut compressed = Vec::new();
encoder.compress_into(&chunk_a, &mut compressed);
let params_a = encoder.cached_params.expect("parameters should be cached");
println!(
"Chunk A cached params: exp={}, fac={}, use_div={}",
params_a.exp, params_a.fac, params_a.use_div
);
let restored_a: Vec<f64> = decompress(&compressed)?;
assert_eq!(restored_a, chunk_a);
compressed.clear();
encoder.compress_into(&chunk_b, &mut compressed);
assert_eq!(encoder.cached_params, Some(params_a));
let restored_b: Vec<f64> = decompress(&compressed)?;
assert_eq!(restored_b, chunk_b);
let mut chunk_c: Vec<f64> = vec![1.0, 2.0, 3.0, 4.0];
for i in 4..1024 {
chunk_c.push(100.0 + (i as f64) * 0.000001);
}
compressed.clear();
encoder.compress_into(&chunk_c, &mut compressed);
let params_c = encoder.cached_params.expect("parameters should be updated");
println!(
"Chunk C updated params: exp={}, fac={}, use_div={}",
params_c.exp, params_c.fac, params_c.use_div
);
assert_eq!(params_c.exp, 6);
let restored_c: Vec<f64> = decompress(&compressed)?;
assert_eq!(restored_c, chunk_c);
encoder.reset();
assert!(encoder.cached_params.is_none());
println!("Stateful encoder roundtrip completed successfully");
Ok(())
}