1 use criterion::{black_box, criterion_group, criterion_main, Criterion};
3 use enumset::__internal::*;
4 use std::mem::transmute;
9 A, B, C, D, E, F, G, H,
12 #[derive(EnumSetType)]
15 A, B, C, D, E, F, G, H,
18 #[derive(EnumSetType)]
21 A, B, C, D, E, F, G, H,
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)
28 c.bench_function("transmute u64", |b| b.iter(|| unsafe {
29 transmute::<u64, Enum64>(black_box(0u32) as u64)
31 c.bench_function("transmute C", |b| b.iter(|| unsafe {
32 transmute::<u32, EnumC>(black_box(0u32) as u32)
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))
39 c.bench_function("enum_from_u32 u64", |b| b.iter(|| unsafe {
40 <Enum64 as EnumSetTypePrivate>::enum_from_u32(black_box(0u32))
42 c.bench_function("enum_from_u32 C", |b| b.iter(|| unsafe {
43 <EnumC as EnumSetTypePrivate>::enum_from_u32(black_box(0u32))
47 criterion_group!(baseline, transmute_enum);
48 criterion_group!(ops, from_enum);
49 criterion_main!(baseline, ops);