use crate::compress::CompressionBuilder;
use crate::stream::stream_writer;
use std::io::{Cursor, Write};
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_memory_usage_with_large_files() {
let large_content = vec![0u8; 100 * 1024 * 1024];
let mut cursor = Cursor::new(Vec::new());
let compressor = stream_writer(&mut cursor, "large.txt", None)
.with_chunk_size(1024 * 1024); .with_progress_callback(|_| {});
compressor.write_all(&large_content).unwrap();
compressor.finish().unwrap();
let compressed = cursor.into_inner();
assert!(!compressed.is_empty());
assert!(compressed.len() < large_content.len()); }
#[test]
fn test_chunk_size_memory_efficiency() {
let test_data = vec![0u8; 1024];
let chunk_sizes = vec![64 * 1024, 256 * 1024, 1024 * 1024];
for chunk_size in chunk_sizes {
let mut cursor = Cursor::new(Vec::new());
let compressor = stream_writer(&mut cursor, "test.txt", None)
.with_chunk_size(chunk_size);
compressor.write_all(&test_data).unwrap();
compressor.finish().unwrap();
let compressed = cursor.into_inner();
assert!(!compressed.is_empty());
}
}
#[test]
fn test_progress_callback_overhead() {
let test_data = b"x".repeat(1024);
let mut call_count = 0;
let mut cursor = Cursor::new(Vec::new());
let compressor = stream_writer(&mut cursor, "test.txt", None)
.with_progress_callback(|_| {
call_count += 1;
});
for _ in 0..100 {
compressor.write_all(&test_data[..10]).unwrap();
}
compressor.finish().unwrap();
assert!(call_count > 0);
let compressed = cursor.into_inner();
assert!(!compressed.is_empty());
}
#[test]
fn test_cleanup_on_error() {
let test_data = b"test data";
let mut cursor = Cursor::new(Vec::new());
let compressor = stream_writer(&mut cursor, "", None);
let result = compressor.write_all(test_data);
assert!(result.is_err());
drop(compressor);
}
}