Skip to content

Commit

Permalink
bench(digest): Add benchmarks for digests
Browse files Browse the repository at this point in the history
  • Loading branch information
hauleth committed Oct 25, 2015
1 parent 4f2f034 commit 0771653
Show file tree
Hide file tree
Showing 8 changed files with 171 additions and 0 deletions.
10 changes: 10 additions & 0 deletions benches/digest/md4.rs
@@ -0,0 +1,10 @@
use test::Bencher;

use octavo::digest::md4::Md4;

bench_digest!(bench_16, Md4, 16);
bench_digest!(bench_128, Md4, 128);
bench_digest!(bench_256, Md4, 256);
bench_digest!(bench_512, Md4, 512);
bench_digest!(bench_1k, Md4, 1024);
bench_digest!(bench_10k, Md4, 10240);
10 changes: 10 additions & 0 deletions benches/digest/md5.rs
@@ -0,0 +1,10 @@
use test::Bencher;

use octavo::digest::md5::Md5;

bench_digest!(bench_16, Md5, 16);
bench_digest!(bench_128, Md5, 128);
bench_digest!(bench_256, Md5, 256);
bench_digest!(bench_512, Md5, 512);
bench_digest!(bench_1k, Md5, 1024);
bench_digest!(bench_10k, Md5, 10240);
23 changes: 23 additions & 0 deletions benches/digest/mod.rs
@@ -0,0 +1,23 @@
macro_rules! bench_digest {
($name:ident, $engine:path, $bytes:expr) => {
#[bench]
fn $name(b: &mut Bencher) {
use octavo::digest::Digest;

let mut d = <$engine>::default();
let data = [0; $bytes];

b.iter(|| {
d.update(&data[..]);

This comment has been minimized.

Copy link
@briansmith

briansmith Oct 25, 2015

IMO, this is not a realistic benchmark structure because it doesn't test initialization or finalization. That means it is easy to cheat on it: Just move all computation to the initialization or finish phases.

This comment has been minimized.

Copy link
@hauleth

hauleth Oct 26, 2015

Author Member

Moving all computation to initialization is impossible (as there is no data) and very hard for finalization (not enough memory for big files). Update function when is used with Digest::block_size will always update state, so there is no problem with that. There will be pull-request that fix all that issues.

});

b.bytes = $bytes;
}
}
}

#[cfg(feature = "md4")] #[macro_use] mod md4;
#[cfg(feature = "md5")] #[macro_use] mod md5;
#[cfg(feature = "sha1")] #[macro_use] mod sha1;
#[cfg(feature = "sha2")] #[macro_use] mod sha2;
#[cfg(feature = "sha3")] #[macro_use] mod sha3;
10 changes: 10 additions & 0 deletions benches/digest/sha1.rs
@@ -0,0 +1,10 @@
use test::Bencher;

use octavo::digest::sha1::Sha1;

bench_digest!(bench_16, Sha1, 16);
bench_digest!(bench_128, Sha1, 128);
bench_digest!(bench_256, Sha1, 256);
bench_digest!(bench_512, Sha1, 512);
bench_digest!(bench_1k, Sha1, 1024);
bench_digest!(bench_10k, Sha1, 10240);

This comment has been minimized.

Copy link
@briansmith

briansmith Oct 25, 2015

Since this is repeated over and over again, it would be nice if there was a macro that encapsulated this.

I also suggest that you always have a benchmark that measures calling update exclusively with input that is exactly the length of a block (e.g. 512 bits for SHA-256, 1024-bits for SHA-512). That is important for some use cases, like PBKDF2.

51 changes: 51 additions & 0 deletions benches/digest/sha2.rs
@@ -0,0 +1,51 @@
mod sha224 {
use test::Bencher;

use octavo::digest::sha2;

bench_digest!(bench_16, sha2::Sha224, 16);
bench_digest!(bench_128, sha2::Sha224, 128);
bench_digest!(bench_256, sha2::Sha224, 256);
bench_digest!(bench_512, sha2::Sha224, 512);
bench_digest!(bench_1k, sha2::Sha224, 1024);
bench_digest!(bench_10k, sha2::Sha224, 10240);
}

mod sha256 {
use test::Bencher;

use octavo::digest::sha2;

bench_digest!(bench_16, sha2::Sha256, 16);
bench_digest!(bench_128, sha2::Sha256, 128);
bench_digest!(bench_256, sha2::Sha256, 256);
bench_digest!(bench_512, sha2::Sha256, 512);
bench_digest!(bench_1k, sha2::Sha256, 1024);
bench_digest!(bench_10k, sha2::Sha256, 10240);
}

mod sha384 {
use test::Bencher;

use octavo::digest::sha2;

bench_digest!(bench_16, sha2::Sha384, 16);
bench_digest!(bench_128, sha2::Sha384, 128);
bench_digest!(bench_256, sha2::Sha384, 256);
bench_digest!(bench_512, sha2::Sha384, 512);
bench_digest!(bench_1k, sha2::Sha384, 1024);
bench_digest!(bench_10k, sha2::Sha384, 10240);
}

mod sha512 {
use test::Bencher;

use octavo::digest::sha2;

bench_digest!(bench_16, sha2::Sha512, 16);
bench_digest!(bench_128, sha2::Sha512, 128);
bench_digest!(bench_256, sha2::Sha512, 256);
bench_digest!(bench_512, sha2::Sha512, 512);
bench_digest!(bench_1k, sha2::Sha512, 1024);
bench_digest!(bench_10k, sha2::Sha512, 10240);
}
51 changes: 51 additions & 0 deletions benches/digest/sha3.rs
@@ -0,0 +1,51 @@
mod sha224 {
use test::Bencher;

use octavo::digest::sha3;

bench_digest!(bench_16, sha3::Sha3224, 16);
bench_digest!(bench_128, sha3::Sha3224, 128);
bench_digest!(bench_256, sha3::Sha3224, 256);
bench_digest!(bench_512, sha3::Sha3224, 512);
bench_digest!(bench_1k, sha3::Sha3224, 1024);
bench_digest!(bench_10k, sha3::Sha3224, 10240);
}

mod sha256 {
use test::Bencher;

use octavo::digest::sha3;

bench_digest!(bench_16, sha3::Sha3256, 16);
bench_digest!(bench_128, sha3::Sha3256, 128);
bench_digest!(bench_256, sha3::Sha3256, 256);
bench_digest!(bench_512, sha3::Sha3256, 512);
bench_digest!(bench_1k, sha3::Sha3256, 1024);
bench_digest!(bench_10k, sha3::Sha3256, 10240);
}

mod sha384 {
use test::Bencher;

use octavo::digest::sha3;

bench_digest!(bench_16, sha3::Sha3384, 16);
bench_digest!(bench_128, sha3::Sha3384, 128);
bench_digest!(bench_256, sha3::Sha3384, 256);
bench_digest!(bench_512, sha3::Sha3384, 512);
bench_digest!(bench_1k, sha3::Sha3384, 1024);
bench_digest!(bench_10k, sha3::Sha3384, 10240);
}

mod sha512 {
use test::Bencher;

use octavo::digest::sha3;

bench_digest!(bench_16, sha3::Sha3512, 16);
bench_digest!(bench_128, sha3::Sha3512, 128);
bench_digest!(bench_256, sha3::Sha3512, 256);
bench_digest!(bench_512, sha3::Sha3512, 512);
bench_digest!(bench_1k, sha3::Sha3512, 1024);
bench_digest!(bench_10k, sha3::Sha3512, 10240);
}
10 changes: 10 additions & 0 deletions benches/digest/tiger.rs
@@ -0,0 +1,10 @@
use test::Bencher;

use octavo::digest::tiger::Tiger;

bench_digest!(bench_16, Tiger, 16);
bench_digest!(bench_128, Tiger, 128);
bench_digest!(bench_256, Tiger, 256);
bench_digest!(bench_512, Tiger, 512);
bench_digest!(bench_1k, Tiger, 1024);
bench_digest!(bench_10k, Tiger, 10240);
6 changes: 6 additions & 0 deletions benches/lib.rs
@@ -0,0 +1,6 @@
#![feature(test)]

extern crate test;
extern crate octavo;

mod digest;

0 comments on commit 0771653

Please sign in to comment.