use omniparse::extract_from_path;
use std::fs;
use std::time::Instant;
#[test]
fn test_10mb_text_file_performance() {
let test_file = "/tmp/omniparse_perf_test.txt";
let content = "A".repeat(10 * 1024 * 1024); fs::write(test_file, content).expect("Failed to create test file");
let start = Instant::now();
let result = extract_from_path(test_file);
let duration = start.elapsed();
let _ = fs::remove_file(test_file);
assert!(result.is_ok(), "Extraction failed: {:?}", result.err());
println!("Extraction time for 10MB file: {:?}", duration);
assert!(
duration.as_millis() < 500,
"Extraction took too long: {:?} (expected < 500ms)",
duration
);
}
#[test]
fn test_memory_usage_with_large_file() {
let test_file = "/tmp/omniparse_memory_test.txt";
let content = "B".repeat(10 * 1024 * 1024); fs::write(test_file, content).expect("Failed to create test file");
let result = extract_from_path(test_file);
let _ = fs::remove_file(test_file);
assert!(result.is_ok(), "Extraction failed: {:?}", result.err());
let extraction = result.unwrap();
match extraction.content {
omniparse::Content::Text(text) => {
println!("Extracted text length: {} bytes", text.len());
assert!(text.len() > 0, "No content extracted");
}
_ => panic!("Expected text content"),
}
}
#[test]
#[cfg(feature = "parallel")]
fn test_parallel_processing_performance() {
use omniparse::core::Extractor;
use omniparse::utils::parallel::process_files_parallel;
use std::path::PathBuf;
let test_files: Vec<PathBuf> = (0..10)
.map(|i| {
let path = format!("/tmp/omniparse_parallel_test_{}.txt", i);
let content = format!("Test file {} content\n", i).repeat(1000);
fs::write(&path, content).expect("Failed to create test file");
PathBuf::from(path)
})
.collect();
let extractor = Extractor::new();
let start = Instant::now();
let results = process_files_parallel(&extractor, &test_files);
let parallel_duration = start.elapsed();
println!("Parallel processing time for 10 files: {:?}", parallel_duration);
assert_eq!(results.len(), 10, "Not all files were processed");
let success_count = results.iter().filter(|r| r.result.is_ok()).count();
println!("Successfully processed: {}/10 files", success_count);
for file in &test_files {
let _ = fs::remove_file(file);
}
assert!(
success_count >= 8,
"Too many files failed: only {}/10 succeeded",
success_count
);
}
#[test]
fn test_streaming_with_large_file() {
use std::io::Cursor;
let content = "C".repeat(5 * 1024 * 1024);
let mut cursor = Cursor::new(content.as_bytes());
use omniparse::utils::streaming::read_with_limit;
let start = Instant::now();
let result = read_with_limit(&mut cursor, 10 * 1024 * 1024);
let duration = start.elapsed();
println!("Streaming read time for 5MB: {:?}", duration);
assert!(result.is_ok(), "Streaming read failed");
let data = result.unwrap();
assert_eq!(data.len(), 5 * 1024 * 1024, "Incorrect data size");
}