use std::collections::HashSet;
use crate::readers::{AdaptiveStrategy, ChunkedFileReader, Strategy};
use crate::tests::{TestLogPattern, create_test_file};
#[test]
fn adaptation_works_as_expected() {
let test_file = create_test_file(50_000, TestLogPattern::Mixed);
let mut reader = ChunkedFileReader::new(&test_file).expect("test file should exist");
let mut chunk_sizes = Vec::new();
while let Some(chunk) = reader.read_chunk().expect("reading should work") {
chunk_sizes.push(chunk.size());
}
let unique_sizes: HashSet<_> = chunk_sizes.iter().collect();
assert!(unique_sizes.len() > 1, "Should have adapted chunk size");
let first_10_avg = chunk_sizes[..10.min(chunk_sizes.len())].iter().sum::<usize>() / 10.min(chunk_sizes.len());
let last_10_avg = chunk_sizes[chunk_sizes.len().saturating_sub(10)..]
.iter()
.sum::<usize>()
/ 10.min(chunk_sizes.len());
eprintln!(
"Adaptation stats: {} unique sizes, early avg: {first_10_avg}, late avg: {last_10_avg}, total chunks: {}",
unique_sizes.len(),
chunk_sizes.len()
);
}
#[test]
fn test_adaptive_integration() {
let temp_file = create_test_file(25_000, TestLogPattern::Canonical); let strategy = Strategy::Adaptive(AdaptiveStrategy::default());
let mut reader = ChunkedFileReader::with_strategy(&temp_file, strategy).expect("test fixtures should work");
let mut chunk_sizes = Vec::new();
while let Some(chunk) = reader.read_chunk().expect("should read fixtures successfully") {
chunk_sizes.push(chunk.size());
}
let unique: std::collections::HashSet<_> = chunk_sizes.iter().collect();
assert!(unique.len() > 1);
}
#[test]
fn handles_memory_pressure() {
let test_file = create_test_file(10_000, TestLogPattern::Message);
let _memory_hog: Vec<u8> = vec![0; 150 * 1024 * 1024];
let mut reader = ChunkedFileReader::new(&test_file).expect("test file should be created");
let chunk = reader.read_chunk().expect("double").expect("expect");
assert!(chunk.size() <= 32 * 1024, "Should use small chunks under pressure");
}