#![allow(dead_code)]
use crate::common_test::*;
use flecs_ecs_derive::Component;
#[repr(C)]
#[derive(Component, Debug, PartialEq)]
pub enum StandardEnum {
Red,
Green,
Blue,
}
#[repr(C)]
#[derive(Component)]
pub enum AnotherEnum {
Standing,
Walking,
Running,
}
#[repr(C)]
#[derive(Component)]
pub enum SparseEnum {
Black = 1,
White = 3,
Grey = 5,
}
#[repr(C)]
#[derive(Component)]
pub enum EnumClass {
Grass,
Sand,
Stone,
}
#[repr(C)]
#[derive(Component)]
pub enum PrefixEnum {
PrefixEnumFoo,
PrefixEnumBar,
}
#[repr(C)]
#[derive(Component)]
pub enum ConstantsWithNum {
Num1,
Num2,
Num3,
}
#[repr(C)]
#[derive(Component)]
pub enum EnumIncorrectType {
A,
B,
}
#[repr(C)]
#[derive(Component)]
pub enum EnumWithLargeConstant {
X,
Y,
Z = 1000,
}
#[repr(C)]
#[derive(Component)]
pub enum EnumClassWithLargeConstant {
X,
Y,
Z = 1000,
}
#[test]
fn enum_standard_enum_reflection() {
let world = World::new();
let entity = world.entity_from_enum(StandardEnum::Red);
assert_eq!(
entity.path().unwrap(),
"::flecs::enum_test::StandardEnum::Red"
);
let entity2 = world.entity().set(StandardEnum::Blue);
assert!(entity.is_valid());
entity2.set(StandardEnum::Red);
entity2.try_get::<&StandardEnum>(|enum_comp2| {
assert_eq!(*enum_comp2, StandardEnum::Red);
});
assert_eq!(entity.to_constant::<StandardEnum>(), StandardEnum::Red);
let redd = StandardEnum::Red;
let red = redd.id_variant(&world);
let green = StandardEnum::Green.id_variant(&world);
let blue = StandardEnum::Blue.id_variant(&world);
assert_ne!(red, 0);
assert_ne!(green, 0);
assert_ne!(blue, 0);
assert_ne!(green, red);
assert_ne!(blue, red);
assert!(StandardEnum::Red.is_field_registered_as_entity());
assert!(StandardEnum::Blue.is_field_registered_as_entity());
assert!(StandardEnum::Green.is_field_registered_as_entity());
assert_eq!(red.path().unwrap(), "::flecs::enum_test::StandardEnum::Red");
assert_eq!(
green.path().unwrap(),
"::flecs::enum_test::StandardEnum::Green"
);
assert_eq!(
blue.path().unwrap(),
"::flecs::enum_test::StandardEnum::Blue"
);
}