|
| 1 | +use criterion::{black_box, criterion_group, criterion_main, Criterion}; |
| 2 | +use rand::Rng; |
| 3 | + |
| 4 | +use multihash::{ |
| 5 | + Blake2b256, Blake2b512, Blake2s128, Blake2s256, Identity, Keccak224, Keccak256, Keccak384, |
| 6 | + Keccak512, Sha1, Sha2_256, Sha2_512, Sha3_224, Sha3_256, Sha3_384, Sha3_512, |
| 7 | +}; |
| 8 | + |
| 9 | +macro_rules! group_digest { |
| 10 | + ($criterion:ident, $( $id:expr => $hash:ident, $input:expr)* ) => {{ |
| 11 | + let mut group = $criterion.benchmark_group("digest"); |
| 12 | + $( |
| 13 | + group.bench_function($id, |b| { |
| 14 | + b.iter(|| { |
| 15 | + let _ = black_box($hash::digest($input)); |
| 16 | + }) |
| 17 | + }); |
| 18 | + )* |
| 19 | + group.finish(); |
| 20 | + }}; |
| 21 | +} |
| 22 | + |
| 23 | +fn bench_digest(c: &mut Criterion) { |
| 24 | + let mut rng = rand::thread_rng(); |
| 25 | + let data: Vec<u8> = (0..1024).map(|_| rng.gen()).collect(); |
| 26 | + group_digest!(c, |
| 27 | + "identity" => Identity, &data |
| 28 | + "sha1" => Sha1, &data |
| 29 | + "sha2_256" => Sha2_256, &data |
| 30 | + "sha2_512" => Sha2_512, &data |
| 31 | + "sha3_224" => Sha3_224, &data |
| 32 | + "sha3_256" => Sha3_256, &data |
| 33 | + "sha3_384" => Sha3_384, &data |
| 34 | + "sha3_512" => Sha3_512, &data |
| 35 | + "keccak_224" => Keccak224, &data |
| 36 | + "keccak_256" => Keccak256, &data |
| 37 | + "keccak_384" => Keccak384, &data |
| 38 | + "keccak_512" => Keccak512, &data |
| 39 | + "blake2b_256" => Blake2b256, &data |
| 40 | + "blake2b_512" => Blake2b512, &data |
| 41 | + "blake2s_128" => Blake2s128, &data |
| 42 | + "blake2s_256" => Blake2s256, &data |
| 43 | + ); |
| 44 | +} |
| 45 | + |
| 46 | +criterion_group!(benches, bench_digest); |
| 47 | +criterion_main!(benches); |
0 commit comments