Skip to content

Commit 2c11964

Browse files
authored
test: Instructions benchmark - using multiple captures (#176)
## What? Uses multiple captures for the instructions benchmark. ## Why? Results in more concise / maintainable benchmark code.
1 parent 4c069c3 commit 2c11964

File tree

4 files changed

+220
-228
lines changed

4 files changed

+220
-228
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ serde_json = "1.0"
6868
clap = { version = "4.5.51", features = ["derive"] }
6969
test-casing = "0.1.3"
7070
version-sync = "0.9.2"
71-
yab = { version = "0.1.0", git = "https://github.com/slowli/yab.git", rev = "83df3d9b4509c255f42300368c844f5ad3f03abb" }
71+
yab = { version = "0.1.0", git = "https://github.com/slowli/yab.git", rev = "efaa2fd6088a6ad52911806e56609dd29106c225" }
7272

7373
[features]
7474
default = ["std", "curve25519-dalek"]

benches/instructions.rs

Lines changed: 32 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use elastic_elgamal::{
44
group::{Curve25519Subgroup, Generic, Group, Ristretto},
55
};
66
use rand_chacha::ChaChaRng;
7+
use yab::{BenchmarkId, captures};
78

89
trait BenchmarkedGroup: Group {
910
const NAME: &'static str;
@@ -23,51 +24,42 @@ impl BenchmarkedGroup for Generic<k256::Secp256k1> {
2324

2425
fn bench_group<G: BenchmarkedGroup>(bencher: &mut yab::Bencher) {
2526
let group = G::NAME;
26-
bencher.bench_with_capture(format!("{group}/encrypt"), |capture| {
27-
let mut rng = ChaChaRng::from_seed([5; 32]);
28-
let keypair: Keypair<G> = Keypair::generate(&mut rng);
29-
let message = G::generate_scalar(&mut rng);
30-
capture.measure(|| keypair.public().encrypt(message, &mut rng));
31-
});
32-
33-
bencher.bench_with_capture(format!("{group}/decrypt"), |capture| {
34-
let mut rng = ChaChaRng::from_seed([5; 32]);
35-
let keypair: Keypair<G> = Keypair::generate(&mut rng);
36-
let message = G::generate_scalar(&mut rng);
37-
let ciphertext = keypair.public().encrypt(message, &mut rng);
38-
capture.measure(|| keypair.secret().decrypt_to_element(ciphertext));
39-
});
40-
41-
bencher.bench_with_capture(format!("{group}/zero_prove"), |capture| {
42-
let mut rng = ChaChaRng::from_seed([5; 32]);
43-
let keypair: Keypair<G> = Keypair::generate(&mut rng);
44-
capture.measure(|| keypair.public().encrypt_zero(&mut rng));
45-
});
46-
47-
bencher.bench_with_capture(format!("{group}/zero_verify"), |capture| {
48-
let mut rng = ChaChaRng::from_seed([5; 32]);
49-
let keypair: Keypair<G> = Keypair::generate(&mut rng);
50-
let (ciphertext, proof) = keypair.public().encrypt_zero(&mut rng);
51-
capture
52-
.measure(|| keypair.public().verify_zero(ciphertext, &proof))
53-
.unwrap();
54-
});
55-
56-
for val in [false, true] {
57-
bencher.bench_with_capture(format!("{group}/bool_prove/{val}"), |capture| {
27+
bencher.bench_with_captures(
28+
group,
29+
captures!(|[encrypt, decrypt]| {
5830
let mut rng = ChaChaRng::from_seed([5; 32]);
5931
let keypair: Keypair<G> = Keypair::generate(&mut rng);
60-
capture.measure(|| keypair.public().encrypt_bool(val, &mut rng));
61-
});
32+
let message = G::generate_scalar(&mut rng);
33+
let ciphertext = encrypt.measure(|| keypair.public().encrypt(message, &mut rng));
34+
decrypt.measure(|| keypair.secret().decrypt_to_element(ciphertext));
35+
}),
36+
);
6237

63-
bencher.bench_with_capture(format!("{group}/bool_verify/{val}"), |capture| {
38+
bencher.bench_with_captures(
39+
format!("{group}/zero"),
40+
captures!(|[prove, verify]| {
6441
let mut rng = ChaChaRng::from_seed([5; 32]);
6542
let keypair: Keypair<G> = Keypair::generate(&mut rng);
66-
let (ciphertext, proof) = keypair.public().encrypt_bool(val, &mut rng);
67-
capture
68-
.measure(|| keypair.public().verify_bool(ciphertext, &proof))
69-
.unwrap();
70-
});
43+
let (ciphertext, proof) = prove.measure(|| keypair.public().encrypt_zero(&mut rng));
44+
verify
45+
.measure(|| keypair.public().verify_zero(ciphertext, &proof))
46+
.unwrap()
47+
}),
48+
);
49+
50+
for val in [false, true] {
51+
bencher.bench_with_captures(
52+
BenchmarkId::new(format!("{group}/bool"), val),
53+
captures!(|[prove, verify]| {
54+
let mut rng = ChaChaRng::from_seed([5; 32]);
55+
let keypair: Keypair<G> = Keypair::generate(&mut rng);
56+
let (ciphertext, proof) =
57+
prove.measure(|| keypair.public().encrypt_bool(val, &mut rng));
58+
verify
59+
.measure(|| keypair.public().verify_bool(ciphertext, &proof))
60+
.unwrap();
61+
}),
62+
);
7163
}
7264
}
7365

0 commit comments

Comments
 (0)