--- /dev/null
+use criterion::{black_box, criterion_group, criterion_main, Criterion};
+use enumset::*;
+use enumset::internal::*;
+use std::mem::transmute;
+
+#[derive(EnumSetType)]
+#[repr(u8)]
+enum Enum8 {
+ A, B, C, D, E, F, G, H,
+}
+
+#[derive(EnumSetType)]
+#[repr(u64)]
+enum Enum64 {
+ A, B, C, D, E, F, G, H,
+}
+
+#[derive(EnumSetType)]
+#[repr(C)]
+enum EnumC {
+ A, B, C, D, E, F, G, H,
+}
+
+fn transmute_enum(c: &mut Criterion) {
+ c.bench_function("transmute u8", |b| b.iter(|| unsafe {
+ transmute::<u8, Enum8>(black_box(0u32) as u8)
+ }));
+ c.bench_function("transmute u64", |b| b.iter(|| unsafe {
+ transmute::<u64, Enum64>(black_box(0u32) as u64)
+ }));
+ c.bench_function("transmute C", |b| b.iter(|| unsafe {
+ transmute::<u32, EnumC>(black_box(0u32) as u32)
+ }));
+}
+fn from_enum(c: &mut Criterion) {
+ c.bench_function("enum_from_u32 u8", |b| b.iter(|| unsafe {
+ <Enum8 as EnumSetTypePrivate>::enum_from_u32(black_box(0u32))
+ }));
+ c.bench_function("enum_from_u32 u64", |b| b.iter(|| unsafe {
+ <Enum64 as EnumSetTypePrivate>::enum_from_u32(black_box(0u32))
+ }));
+ c.bench_function("enum_from_u32 C", |b| b.iter(|| unsafe {
+ <EnumC as EnumSetTypePrivate>::enum_from_u32(black_box(0u32))
+ }));
+}
+
+criterion_group!(baseline, transmute_enum);
+criterion_group!(ops, from_enum);
+criterion_main!(baseline, ops);
--- /dev/null
+#![no_std]
+#![allow(dead_code)]
+
+use enumset::*;
+
+#[derive(EnumSetType)]
+pub enum EmptyEnum { }
+
+#[derive(EnumSetType)]
+pub enum Enum1 {
+ A,
+}
+
+#[derive(EnumSetType)]
+pub enum SmallEnum {
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z,
+}
+#[derive(EnumSetType)]
+pub enum Enum128 {
+ A, B, C, D, E, F, G, H, _8, _9, _10, _11, _12, _13, _14, _15,
+ _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31,
+ _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47,
+ _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63,
+ _64, _65, _66, _67, _68, _69, _70, _71, _72, _73, _74, _75, _76, _77, _78, _79,
+ _80, _81, _82, _83, _84, _85, _86, _87, _88, _89, _90, _91, _92, _93, _94, _95,
+ _96, _97, _98, _99, _100, _101, _102, _103, _104, _105, _106, _107, _108, _109,
+ _110, _111, _112, _113, _114, _115, _116, _117, _118, _119, _120, _121, _122,
+ _123, _124, _125, _126, _127,
+}
+#[derive(EnumSetType)]
+pub enum SparseEnum {
+ A = 0xA, B = 20, C = 30, D = 40, E = 50, F = 60, G = 70, H = 80,
+}
+
+#[repr(u32)]
+#[derive(EnumSetType)]
+pub enum ReprEnum {
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z,
+}
+#[repr(C)]
+#[derive(EnumSetType)]
+pub enum ReprEnum4 {
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z,
+}
+
+pub fn main() {
+
+}
\ No newline at end of file
pub enum ReprEnum3 {
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z,
}
+#[repr(C)]
+#[derive(EnumSetType, Debug)]
+pub enum ReprEnum4 {
+ A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z,
+}
macro_rules! test_variants {
($enum_name:ident $all_empty_test:ident $($variant:ident,)*) => {
tests!(enum8, test_enum!(Enum8, 1));
tests!(enum128, test_enum!(Enum128, 16));
tests!(sparse_enum, test_enum!(SparseEnum, 16));
-tests!(repr_enum, test_enum!(ReprEnum, 4));
-tests!(repr_enum2, test_enum!(ReprEnum2, 4));
-tests!(repr_enum3, test_enum!(ReprEnum3, 4));
+tests!(repr_enum_u32, test_enum!(ReprEnum, 4));
+tests!(repr_enum_u64, test_enum!(ReprEnum2, 4));
+tests!(repr_enum_isize, test_enum!(ReprEnum3, 4));
+tests!(repr_enum_c, test_enum!(ReprEnum4, 4));
#[derive(EnumSetType, Debug)]
pub enum ThresholdEnum {