use std::io::Write;
use crate::{Compressor, Decompressor};
use crate::errors::ErrorKind;
#[test]
fn test_errors_do_not_mutate_decompressor() {
let nums = vec![1, 2, 3, 4, 5];
let mut compressor = Compressor::default();
let compressed = compressor.simple_compress(&nums);
let mut decompressor = Decompressor::<i32>::default();
let mut i = 0;
while i < compressed.len() + 1 {
match decompressor.header() {
Ok(_) => break,
Err(e) if matches!(e.kind, ErrorKind::InsufficientData) => (),
Err(e) => panic!("{}", e),
};
decompressor.write_all(&compressed[i..i + 1]).unwrap();
i += 1;
}
while i < compressed.len() + 1 {
match decompressor.chunk_metadata() {
Ok(_) => break,
Err(e) if matches!(e.kind, ErrorKind::InsufficientData) => (),
Err(e) => panic!("{}", e),
};
decompressor.write_all(&compressed[i..i + 1]).unwrap();
i += 1;
}
let mut rec_nums = Vec::new();
while i < compressed.len() + 1 {
match decompressor.chunk_body() {
Ok(x) => {
rec_nums.extend(x);
break
},
Err(e) if matches!(e.kind, ErrorKind::InsufficientData) => (),
Err(e) => panic!("{}", e),
};
decompressor.write_all(&compressed[i..i + 1]).unwrap();
i += 1;
}
assert_eq!(rec_nums, nums);
}