Skip to content

Commit 8c5d32c

Browse files
committed
Add benchmarks for Powerset
1 parent 8cdf928 commit 8c5d32c

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,7 @@ harness = false
7171
[[bench]]
7272
name = "combinations"
7373
harness = false
74+
75+
[[bench]]
76+
name = "powerset"
77+
harness = false

benches/powerset.rs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
use criterion::{black_box, criterion_group, criterion_main, Criterion};
2+
use itertools::Itertools;
3+
4+
// Keep aggregate generated elements the same, regardless of powerset length.
5+
const TOTAL_ELEMENTS: usize = 1 << 12;
6+
const fn calc_iters(n: usize) -> usize {
7+
TOTAL_ELEMENTS / (1 << n)
8+
}
9+
10+
fn powerset_n(c: &mut Criterion, n: usize) {
11+
let id = format!("powerset {}", n);
12+
c.bench_function(id.as_str(), move |b| {
13+
b.iter(|| {
14+
for _ in 0..calc_iters(n) {
15+
for elt in (0..n).powerset() {
16+
black_box(elt);
17+
}
18+
}
19+
})
20+
});
21+
}
22+
23+
fn powerset_0(c: &mut Criterion) { powerset_n(c, 0); }
24+
25+
fn powerset_1(c: &mut Criterion) { powerset_n(c, 1); }
26+
27+
fn powerset_2(c: &mut Criterion) { powerset_n(c, 2); }
28+
29+
fn powerset_4(c: &mut Criterion) { powerset_n(c, 4); }
30+
31+
fn powerset_8(c: &mut Criterion) { powerset_n(c, 8); }
32+
33+
fn powerset_12(c: &mut Criterion) { powerset_n(c, 12); }
34+
35+
criterion_group!(
36+
benches,
37+
powerset_0,
38+
powerset_1,
39+
powerset_2,
40+
powerset_4,
41+
powerset_8,
42+
powerset_12,
43+
);
44+
criterion_main!(benches);

0 commit comments

Comments
 (0)