54 lines
1.2 KiB
Rust
54 lines
1.2 KiB
Rust
#[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);
|