83 lines
2.4 KiB
Rust
83 lines
2.4 KiB
Rust
use ::num_enum::UnsafeFromPrimitive;
|
|
|
|
// Guard against https://github.com/illicitonion/num_enum/issues/27
|
|
mod alloc {}
|
|
mod core {}
|
|
mod num_enum {}
|
|
mod std {}
|
|
|
|
#[test]
|
|
fn has_unsafe_from_primitive_number() {
|
|
#[derive(Debug, Eq, PartialEq, UnsafeFromPrimitive)]
|
|
#[repr(u8)]
|
|
enum Enum {
|
|
Zero,
|
|
One,
|
|
}
|
|
|
|
unsafe {
|
|
assert_eq!(Enum::unchecked_transmute_from(0_u8), Enum::Zero);
|
|
assert_eq!(Enum::unchecked_transmute_from(1_u8), Enum::One);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn has_unsafe_from_primitive_number_with_alternatives_and_default_which_are_ignored() {
|
|
#[derive(Debug, Eq, PartialEq, UnsafeFromPrimitive)]
|
|
#[repr(u8)]
|
|
enum Enum {
|
|
Zero,
|
|
One,
|
|
#[num_enum(alternatives = [3, 4])]
|
|
Some,
|
|
#[num_enum(default)]
|
|
Many = 5,
|
|
}
|
|
|
|
unsafe {
|
|
assert_eq!(Enum::unchecked_transmute_from(0_u8), Enum::Zero);
|
|
assert_eq!(Enum::unchecked_transmute_from(1_u8), Enum::One);
|
|
assert_eq!(Enum::unchecked_transmute_from(2_u8), Enum::Some);
|
|
assert_eq!(Enum::unchecked_transmute_from(5_u8), Enum::Many);
|
|
// Any other conversions would be undefined behavior.
|
|
}
|
|
|
|
#[allow(deprecated)]
|
|
unsafe {
|
|
assert_eq!(Enum::from_unchecked(0_u8), Enum::Zero);
|
|
assert_eq!(Enum::from_unchecked(1_u8), Enum::One);
|
|
assert_eq!(Enum::from_unchecked(2_u8), Enum::Some);
|
|
assert_eq!(Enum::from_unchecked(5_u8), Enum::Many);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn has_unsafe_from_primitive_number_with_alternatives_and_std_default_which_are_ignored() {
|
|
#[derive(Debug, Default, Eq, PartialEq, UnsafeFromPrimitive)]
|
|
#[repr(u8)]
|
|
enum Enum {
|
|
Zero,
|
|
One,
|
|
#[num_enum(alternatives = [3, 4])]
|
|
Some,
|
|
#[default]
|
|
Many = 5,
|
|
}
|
|
|
|
unsafe {
|
|
assert_eq!(Enum::unchecked_transmute_from(0_u8), Enum::Zero);
|
|
assert_eq!(Enum::unchecked_transmute_from(1_u8), Enum::One);
|
|
assert_eq!(Enum::unchecked_transmute_from(2_u8), Enum::Some);
|
|
assert_eq!(Enum::unchecked_transmute_from(5_u8), Enum::Many);
|
|
// Any other conversions would be undefined behavior.
|
|
}
|
|
|
|
#[allow(deprecated)]
|
|
unsafe {
|
|
assert_eq!(Enum::from_unchecked(0_u8), Enum::Zero);
|
|
assert_eq!(Enum::from_unchecked(1_u8), Enum::One);
|
|
assert_eq!(Enum::from_unchecked(2_u8), Enum::Some);
|
|
assert_eq!(Enum::from_unchecked(5_u8), Enum::Many);
|
|
}
|
|
}
|