1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- use criterion::{black_box, criterion_group, criterion_main, Criterion};
- use itertools::Itertools;
- // Keep aggregate generated elements the same, regardless of powerset length.
- const TOTAL_ELEMENTS: usize = 1 << 12;
- const fn calc_iters(n: usize) -> usize {
- TOTAL_ELEMENTS / (1 << n)
- }
- fn powerset_n(c: &mut Criterion, n: usize) {
- let id = format!("powerset {}", n);
- c.bench_function(id.as_str(), move |b| {
- b.iter(|| {
- for _ in 0..calc_iters(n) {
- for elt in (0..n).powerset() {
- black_box(elt);
- }
- }
- })
- });
- }
- fn powerset_0(c: &mut Criterion) { powerset_n(c, 0); }
- fn powerset_1(c: &mut Criterion) { powerset_n(c, 1); }
- fn powerset_2(c: &mut Criterion) { powerset_n(c, 2); }
- fn powerset_4(c: &mut Criterion) { powerset_n(c, 4); }
- fn powerset_8(c: &mut Criterion) { powerset_n(c, 8); }
- fn powerset_12(c: &mut Criterion) { powerset_n(c, 12); }
- criterion_group!(
- benches,
- powerset_0,
- powerset_1,
- powerset_2,
- powerset_4,
- powerset_8,
- powerset_12,
- );
- criterion_main!(benches);
|