aboutsummaryrefslogtreecommitdiff
path: root/benches/powerset.rs
diff options
context:
space:
mode:
authorJoel Galenson <jgalenson@google.com>2021-04-01 17:03:06 -0700
committerJoel Galenson <jgalenson@google.com>2021-04-01 17:03:06 -0700
commit6f798715de3d4bd744116190d14a413445542820 (patch)
tree70e883bc01ba2b4d8dd07e0347be18a2fbbd2c18 /benches/powerset.rs
parenta06122cf145ade58c23ae76bcf31d9c748dce354 (diff)
downloaditertools-6f798715de3d4bd744116190d14a413445542820.tar.gz
Upgrade rust/crates/itertools to 0.10.0android-s-beta-2android-s-beta-1
Test: make Change-Id: Ie8b53cb0a96fd9adcbf7f4afa3b966849fc2ff24
Diffstat (limited to 'benches/powerset.rs')
-rw-r--r--benches/powerset.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/benches/powerset.rs b/benches/powerset.rs
new file mode 100644
index 0000000..074550b
--- /dev/null
+++ b/benches/powerset.rs
@@ -0,0 +1,44 @@
+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); \ No newline at end of file