#[cfg(test)]
mod tests {
use rawenum_macro::rawenum;
#[rawenum]
#[derive(Debug, PartialEq)]
enum ExplicitEnum {
Zero = 0,
One = 1,
Ten = 10,
NegativeFive = -5,
}
#[test]
fn test_explicit_enum() {
assert_eq!(ExplicitEnum::from_i8(0), Some(ExplicitEnum::Zero));
assert_eq!(ExplicitEnum::from_i8(1), Some(ExplicitEnum::One));
assert_eq!(ExplicitEnum::from_i8(10), Some(ExplicitEnum::Ten));
assert_eq!(ExplicitEnum::from_i8(-5), Some(ExplicitEnum::NegativeFive));
assert_eq!(ExplicitEnum::from_i8(99), None);
assert_eq!(ExplicitEnum::from_u8(0), Some(ExplicitEnum::Zero));
assert_eq!(ExplicitEnum::from_u8(1), Some(ExplicitEnum::One));
assert_eq!(ExplicitEnum::from_u8(10), Some(ExplicitEnum::Ten));
assert_eq!(ExplicitEnum::from_u8(255), None); assert_eq!(ExplicitEnum::from_u8(251), Some(ExplicitEnum::NegativeFive)); assert_eq!(ExplicitEnum::from_u8(99), None);
assert_eq!(ExplicitEnum::from_i16(0), Some(ExplicitEnum::Zero));
assert_eq!(ExplicitEnum::from_i16(1), Some(ExplicitEnum::One));
assert_eq!(ExplicitEnum::from_i16(10), Some(ExplicitEnum::Ten));
assert_eq!(ExplicitEnum::from_i16(-5), Some(ExplicitEnum::NegativeFive));
assert_eq!(ExplicitEnum::from_i16(1000), None);
assert_eq!(ExplicitEnum::from_u16(0), Some(ExplicitEnum::Zero));
assert_eq!(ExplicitEnum::from_u16(1), Some(ExplicitEnum::One));
assert_eq!(ExplicitEnum::from_u16(10), Some(ExplicitEnum::Ten));
assert_eq!(
ExplicitEnum::from_u16(65531),
Some(ExplicitEnum::NegativeFive)
); assert_eq!(ExplicitEnum::from_u16(1000), None);
assert_eq!(ExplicitEnum::from_i32(0), Some(ExplicitEnum::Zero));
assert_eq!(ExplicitEnum::from_i32(1), Some(ExplicitEnum::One));
assert_eq!(ExplicitEnum::from_i32(10), Some(ExplicitEnum::Ten));
assert_eq!(ExplicitEnum::from_i32(-5), Some(ExplicitEnum::NegativeFive));
assert_eq!(ExplicitEnum::from_i32(100000), None);
assert_eq!(ExplicitEnum::from_u32(0), Some(ExplicitEnum::Zero));
assert_eq!(ExplicitEnum::from_u32(1), Some(ExplicitEnum::One));
assert_eq!(ExplicitEnum::from_u32(10), Some(ExplicitEnum::Ten));
assert_eq!(
ExplicitEnum::from_u32(4294967291),
Some(ExplicitEnum::NegativeFive)
); assert_eq!(ExplicitEnum::from_u32(100000), None);
assert_eq!(ExplicitEnum::from_i64(0), Some(ExplicitEnum::Zero));
assert_eq!(ExplicitEnum::from_i64(1), Some(ExplicitEnum::One));
assert_eq!(ExplicitEnum::from_i64(10), Some(ExplicitEnum::Ten));
assert_eq!(ExplicitEnum::from_i64(-5), Some(ExplicitEnum::NegativeFive));
assert_eq!(ExplicitEnum::from_i64(10000000000), None);
assert_eq!(ExplicitEnum::from_u64(0), Some(ExplicitEnum::Zero));
assert_eq!(ExplicitEnum::from_u64(1), Some(ExplicitEnum::One));
assert_eq!(ExplicitEnum::from_u64(10), Some(ExplicitEnum::Ten));
assert_eq!(
ExplicitEnum::from_u64(18446744073709551611),
Some(ExplicitEnum::NegativeFive)
); assert_eq!(ExplicitEnum::from_u64(10000000000), None); }
#[rawenum]
#[derive(Debug, PartialEq)]
enum ImplicitEnum {
A, B, C, }
#[test]
fn test_implicit_enum() {
assert_eq!(ImplicitEnum::from_i8(0), Some(ImplicitEnum::A));
assert_eq!(ImplicitEnum::from_i8(1), Some(ImplicitEnum::B));
assert_eq!(ImplicitEnum::from_i8(2), Some(ImplicitEnum::C));
assert_eq!(ImplicitEnum::from_i8(3), None); assert_eq!(ImplicitEnum::from_i8(-1), None);
assert_eq!(ImplicitEnum::from_u8(0), Some(ImplicitEnum::A));
assert_eq!(ImplicitEnum::from_u8(1), Some(ImplicitEnum::B));
assert_eq!(ImplicitEnum::from_u8(2), Some(ImplicitEnum::C));
assert_eq!(ImplicitEnum::from_u8(3), None);
assert_eq!(ImplicitEnum::from_i32(0), Some(ImplicitEnum::A));
assert_eq!(ImplicitEnum::from_i32(1), Some(ImplicitEnum::B));
assert_eq!(ImplicitEnum::from_i32(2), Some(ImplicitEnum::C));
assert_eq!(ImplicitEnum::from_i32(3), None); assert_eq!(ImplicitEnum::from_i32(-1), None);
assert_eq!(ImplicitEnum::from_u64(0), Some(ImplicitEnum::A));
assert_eq!(ImplicitEnum::from_u64(1), Some(ImplicitEnum::B));
assert_eq!(ImplicitEnum::from_u64(2), Some(ImplicitEnum::C));
assert_eq!(ImplicitEnum::from_u64(3), None); }
#[rawenum]
#[derive(Debug, PartialEq)]
enum MixedEnum {
Start = 100, Next, Jump = 200, Another, End, }
#[test]
fn test_mixed_enum() {
assert_eq!(MixedEnum::from_i16(100), Some(MixedEnum::Start));
assert_eq!(MixedEnum::from_i16(101), Some(MixedEnum::Next));
assert_eq!(MixedEnum::from_i16(200), Some(MixedEnum::Jump));
assert_eq!(MixedEnum::from_i16(201), Some(MixedEnum::Another));
assert_eq!(MixedEnum::from_i16(202), Some(MixedEnum::End));
assert_eq!(MixedEnum::from_i16(99), None); assert_eq!(MixedEnum::from_i16(150), None); assert_eq!(MixedEnum::from_i16(300), None);
assert_eq!(MixedEnum::from_u8(100), Some(MixedEnum::Start));
assert_eq!(MixedEnum::from_u8(101), Some(MixedEnum::Next));
assert_eq!(MixedEnum::from_u8(200), Some(MixedEnum::Jump));
assert_eq!(MixedEnum::from_u8(201), Some(MixedEnum::Another));
assert_eq!(MixedEnum::from_u8(202), Some(MixedEnum::End));
assert_eq!(MixedEnum::from_u8(50), None);
assert_eq!(MixedEnum::from_i8(100), Some(MixedEnum::Start));
assert_eq!(MixedEnum::from_i8(101), Some(MixedEnum::Next));
assert_eq!(MixedEnum::from_i8(-56), Some(MixedEnum::Jump)); assert_eq!(MixedEnum::from_i8(-55), Some(MixedEnum::Another)); assert_eq!(MixedEnum::from_i8(-54), Some(MixedEnum::End)); assert_eq!(MixedEnum::from_i8(50), None); }
#[rawenum]
#[derive(Debug, PartialEq)]
enum LargeDiscriminantEnum {
Small = 10,
Large = 1_000_000_000, Larger = 2_000_000_000, NegativeLarge = -1_000_000_000, }
#[test]
fn test_large_discriminant_enum() {
assert_eq!(
LargeDiscriminantEnum::from_i32(10),
Some(LargeDiscriminantEnum::Small)
);
assert_eq!(
LargeDiscriminantEnum::from_i32(1_000_000_000),
Some(LargeDiscriminantEnum::Large)
);
assert_eq!(
LargeDiscriminantEnum::from_i32(2_000_000_000),
Some(LargeDiscriminantEnum::Larger)
);
assert_eq!(
LargeDiscriminantEnum::from_i32(-1_000_000_000),
Some(LargeDiscriminantEnum::NegativeLarge)
);
assert_eq!(LargeDiscriminantEnum::from_i32(500), None);
assert_eq!(
LargeDiscriminantEnum::from_u32(10),
Some(LargeDiscriminantEnum::Small)
);
assert_eq!(
LargeDiscriminantEnum::from_u32(1_000_000_000),
Some(LargeDiscriminantEnum::Large)
);
assert_eq!(
LargeDiscriminantEnum::from_u32(2_000_000_000),
Some(LargeDiscriminantEnum::Larger)
);
assert_eq!(
LargeDiscriminantEnum::from_u32(3294967296u32),
Some(LargeDiscriminantEnum::NegativeLarge)
); assert_eq!(LargeDiscriminantEnum::from_u32(500), None);
assert_eq!(
LargeDiscriminantEnum::from_i64(10),
Some(LargeDiscriminantEnum::Small)
);
assert_eq!(
LargeDiscriminantEnum::from_i64(1_000_000_000),
Some(LargeDiscriminantEnum::Large)
);
assert_eq!(
LargeDiscriminantEnum::from_i64(2_000_000_000),
Some(LargeDiscriminantEnum::Larger)
);
assert_eq!(
LargeDiscriminantEnum::from_i64(-1_000_000_000),
Some(LargeDiscriminantEnum::NegativeLarge)
);
assert_eq!(LargeDiscriminantEnum::from_i64(5_000_000_000), None);
assert_eq!(
LargeDiscriminantEnum::from_u64(10),
Some(LargeDiscriminantEnum::Small)
);
assert_eq!(
LargeDiscriminantEnum::from_u64(1_000_000_000),
Some(LargeDiscriminantEnum::Large)
);
assert_eq!(
LargeDiscriminantEnum::from_u64(2_000_000_000),
Some(LargeDiscriminantEnum::Larger)
);
assert_eq!(
LargeDiscriminantEnum::from_u64(18446744072709551616u64),
Some(LargeDiscriminantEnum::NegativeLarge)
); assert_eq!(LargeDiscriminantEnum::from_u64(5_000_000_000), None); }
#[rawenum]
#[derive(Debug, PartialEq)]
enum ZeroEnum {
First = 0,
Second, }
#[test]
fn test_zero_enum() {
assert_eq!(ZeroEnum::from_i8(0), Some(ZeroEnum::First));
assert_eq!(ZeroEnum::from_i8(1), Some(ZeroEnum::Second));
assert_eq!(ZeroEnum::from_u8(0), Some(ZeroEnum::First));
assert_eq!(ZeroEnum::from_u8(1), Some(ZeroEnum::Second));
assert_eq!(ZeroEnum::from_i32(0), Some(ZeroEnum::First));
assert_eq!(ZeroEnum::from_i32(1), Some(ZeroEnum::Second));
assert_eq!(ZeroEnum::from_i8(2), None);
assert_eq!(ZeroEnum::from_u8(2), None);
}
#[rawenum]
#[derive(Debug, PartialEq)]
enum NegativeEnum {
NegOne = -1,
NegTwo = -2,
Zero = 0,
One = 1,
}
#[test]
fn test_negative_enum() {
assert_eq!(NegativeEnum::from_i8(-1), Some(NegativeEnum::NegOne));
assert_eq!(NegativeEnum::from_i8(-2), Some(NegativeEnum::NegTwo));
assert_eq!(NegativeEnum::from_i8(0), Some(NegativeEnum::Zero));
assert_eq!(NegativeEnum::from_i8(1), Some(NegativeEnum::One));
assert_eq!(NegativeEnum::from_i8(99), None);
assert_eq!(NegativeEnum::from_u8(255), Some(NegativeEnum::NegOne));
assert_eq!(NegativeEnum::from_u8(254), Some(NegativeEnum::NegTwo));
assert_eq!(NegativeEnum::from_u8(0), Some(NegativeEnum::Zero));
assert_eq!(NegativeEnum::from_u8(1), Some(NegativeEnum::One));
assert_eq!(NegativeEnum::from_u8(99), None);
assert_eq!(NegativeEnum::from_i32(-1), Some(NegativeEnum::NegOne));
assert_eq!(NegativeEnum::from_i32(-2), Some(NegativeEnum::NegTwo));
assert_eq!(NegativeEnum::from_i32(0), Some(NegativeEnum::Zero));
assert_eq!(NegativeEnum::from_i32(1), Some(NegativeEnum::One));
assert_eq!(NegativeEnum::from_i32(999), None);
}
}