#[macro_use] extern crate bencher; extern crate crc32fast; extern crate rand; use bencher::Bencher; use crc32fast::Hasher; use rand::Rng; fn bench(b: &mut Bencher, size: usize, hasher_init: Hasher) { let mut bytes = vec![0u8; size]; rand::thread_rng().fill(&mut bytes[..]); b.iter(|| { let mut hasher = hasher_init.clone(); hasher.update(&bytes); bencher::black_box(hasher.finalize()) }); b.bytes = size as u64; } fn bench_kilobyte_baseline(b: &mut Bencher) { bench(b, 1024, Hasher::internal_new_baseline(0, 0)) } fn bench_kilobyte_specialized(b: &mut Bencher) { bench(b, 1024, Hasher::internal_new_specialized(0, 0).unwrap()) } fn bench_megabyte_baseline(b: &mut Bencher) { bench(b, 1024 * 1024, Hasher::internal_new_baseline(0, 0)) } fn bench_megabyte_specialized(b: &mut Bencher) { bench( b, 1024 * 1024, Hasher::internal_new_specialized(0, 0).unwrap(), ) } benchmark_group!( bench_baseline, bench_kilobyte_baseline, bench_megabyte_baseline ); benchmark_group!( bench_specialized, bench_kilobyte_specialized, bench_megabyte_specialized ); benchmark_main!(bench_baseline, bench_specialized);