//! Benchmarks for dataset_hash //! //! Compares BLAKE3 hashing performance use criterion::{black_box, criterion_group, criterion_main, Criterion}; use dataset_hash::{hash_file, hash_directory_batch, hash_directory_combined}; use std::io::Write; use tempfile::TempDir; fn create_test_file(dir: &TempDir, name: &str, size: usize) -> std::path::PathBuf { let path = dir.path().join(name); let mut file = std::fs::File::create(&path).unwrap(); let data = vec![0u8; size]; file.write_all(&data).unwrap(); path } fn bench_hash_file_small(c: &mut Criterion) { let temp = TempDir::new().unwrap(); let path = create_test_file(&temp, "small.bin", 1024); // 1KB c.bench_function("rust_hash_file_1kb", |b| { b.iter(|| { black_box(hash_file(&path).unwrap()); }); }); } fn bench_hash_file_medium(c: &mut Criterion) { let temp = TempDir::new().unwrap(); let path = create_test_file(&temp, "medium.bin", 1024 * 1024); // 1MB c.bench_function("rust_hash_file_1mb", |b| { b.iter(|| { black_box(hash_file(&path).unwrap()); }); }); } fn bench_hash_directory_batch(c: &mut Criterion) { let temp = TempDir::new().unwrap(); // Create 100 small files for i in 0..100 { create_test_file(&temp, &format!("file_{}.bin", i), 1024); } c.bench_function("rust_hash_dir_100files", |b| { b.iter(|| { black_box(hash_directory_batch(temp.path()).unwrap()); }); }); } fn bench_hash_directory_combined(c: &mut Criterion) { let temp = TempDir::new().unwrap(); // Create 100 small files for i in 0..100 { create_test_file(&temp, &format!("file_{}.bin", i), 1024); } c.bench_function("rust_hash_dir_combined", |b| { b.iter(|| { black_box(hash_directory_combined(temp.path()).unwrap()); }); }); } criterion_group!(benches, bench_hash_file_small, bench_hash_file_medium, bench_hash_directory_batch, bench_hash_directory_combined ); criterion_main!(benches);