]> git.lizzy.rs Git - enumset.git/blob - enumset/benches/bench.rs
Temporarily disable benchmarks due to criterion not working on 1.31
[enumset.git] / enumset / benches / bench.rs
1 use criterion::{black_box, criterion_group, criterion_main, Criterion};
2 use enumset::*;
3 use enumset::__internal::*;
4 use std::mem::transmute;
5
6 #[derive(EnumSetType)]
7 #[repr(u8)]
8 enum Enum8 {
9     A, B, C, D, E, F, G, H,
10 }
11
12 #[derive(EnumSetType)]
13 #[repr(u64)]
14 enum Enum64 {
15     A, B, C, D, E, F, G, H,
16 }
17
18 #[derive(EnumSetType)]
19 #[repr(C)]
20 enum EnumC {
21     A, B, C, D, E, F, G, H,
22 }
23
24 fn transmute_enum(c: &mut Criterion) {
25     c.bench_function("transmute u8", |b| b.iter(|| unsafe {
26         transmute::<u8, Enum8>(black_box(0u32) as u8)
27     }));
28     c.bench_function("transmute u64", |b| b.iter(|| unsafe {
29         transmute::<u64, Enum64>(black_box(0u32) as u64)
30     }));
31     c.bench_function("transmute C", |b| b.iter(|| unsafe {
32         transmute::<u32, EnumC>(black_box(0u32) as u32)
33     }));
34 }
35 fn from_enum(c: &mut Criterion) {
36     c.bench_function("enum_from_u32 u8", |b| b.iter(|| unsafe {
37         <Enum8 as EnumSetTypePrivate>::enum_from_u32(black_box(0u32))
38     }));
39     c.bench_function("enum_from_u32 u64", |b| b.iter(|| unsafe {
40         <Enum64 as EnumSetTypePrivate>::enum_from_u32(black_box(0u32))
41     }));
42     c.bench_function("enum_from_u32 C", |b| b.iter(|| unsafe {
43         <EnumC as EnumSetTypePrivate>::enum_from_u32(black_box(0u32))
44     }));
45 }
46
47 criterion_group!(baseline, transmute_enum);
48 criterion_group!(ops, from_enum);
49 criterion_main!(baseline, ops);