1 #[macro_use]
2 extern crate bencher;
3 extern crate crc32fast;
4 extern crate rand;
5 
6 use bencher::Bencher;
7 use crc32fast::Hasher;
8 use rand::Rng;
9 
bench(b: &mut Bencher, size: usize, hasher_init: Hasher)10 fn bench(b: &mut Bencher, size: usize, hasher_init: Hasher) {
11     let mut bytes = vec![0u8; size];
12     rand::thread_rng().fill(&mut bytes[..]);
13 
14     b.iter(|| {
15         let mut hasher = hasher_init.clone();
16         hasher.update(&bytes);
17         bencher::black_box(hasher.finalize())
18     });
19 
20     b.bytes = size as u64;
21 }
22 
bench_kilobyte_baseline(b: &mut Bencher)23 fn bench_kilobyte_baseline(b: &mut Bencher) {
24     bench(b, 1024, Hasher::internal_new_baseline(0, 0))
25 }
26 
bench_kilobyte_specialized(b: &mut Bencher)27 fn bench_kilobyte_specialized(b: &mut Bencher) {
28     bench(b, 1024, Hasher::internal_new_specialized(0, 0).unwrap())
29 }
30 
bench_megabyte_baseline(b: &mut Bencher)31 fn bench_megabyte_baseline(b: &mut Bencher) {
32     bench(b, 1024 * 1024, Hasher::internal_new_baseline(0, 0))
33 }
34 
bench_megabyte_specialized(b: &mut Bencher)35 fn bench_megabyte_specialized(b: &mut Bencher) {
36     bench(
37         b,
38         1024 * 1024,
39         Hasher::internal_new_specialized(0, 0).unwrap(),
40     )
41 }
42 
43 benchmark_group!(
44     bench_baseline,
45     bench_kilobyte_baseline,
46     bench_megabyte_baseline
47 );
48 benchmark_group!(
49     bench_specialized,
50     bench_kilobyte_specialized,
51     bench_megabyte_specialized
52 );
53 benchmark_main!(bench_baseline, bench_specialized);
54