Skip to content

Commit b5bfd08

Browse files
committed
Add a benchmark of FromIterator
1 parent 94379ee commit b5bfd08

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

benches/from_iterator.rs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
use criterion::{black_box, criterion_group, criterion_main, Criterion};
2+
use enumflags2::BitFlags;
3+
4+
#[derive(Clone, Copy, BitFlags)]
5+
pub enum Test {
6+
Flag1 = 1 << 0,
7+
Flag2 = 1 << 1,
8+
Flag3 = 1 << 2,
9+
Flag4 = 1 << 3,
10+
Flag5 = 1 << 4,
11+
Flag6 = 1 << 5,
12+
Flag7 = 1 << 6,
13+
Flag8 = 1 << 7,
14+
Flag9 = 1 << 8,
15+
Flag10 = 1 << 9,
16+
Flag11 = 1 << 10,
17+
}
18+
19+
pub fn from_iterator(c: &mut Criterion) {
20+
let v = vec![
21+
Test::Flag3,
22+
Test::Flag7,
23+
Test::Flag5,
24+
Test::Flag11,
25+
];
26+
27+
let v2 = vec![
28+
Test::Flag10,
29+
Test::Flag3,
30+
Test::Flag1,
31+
Test::Flag4,
32+
];
33+
34+
c.bench_function("simple iterator", |b| b.iter(|| {
35+
black_box(&v).iter().copied().collect::<BitFlags<_>>()
36+
}));
37+
38+
c.bench_function("chained iterator", |b| b.iter(|| {
39+
black_box(&v).iter()
40+
.chain(black_box(&v2).iter())
41+
.copied()
42+
.collect::<BitFlags<_>>()
43+
}));
44+
}
45+
46+
criterion_group!(benches, from_iterator);
47+
criterion_main!(benches);

enumflags/Cargo.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,11 @@ optional = true
2222
[features]
2323
std = []
2424
not_literal = ["enumflags2_derive/not_literal"]
25+
26+
[dev-dependencies]
27+
criterion = "0.3"
28+
29+
[[bench]]
30+
name = "from_iterator"
31+
harness = false
32+
path = "../benches/from_iterator.rs"

0 commit comments

Comments
 (0)