#[repr(C)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, bytemuck::Pod, bytemuck::Zeroable)]
pub struct ComponentA(i32);
impl ecs_tiny::Component for ComponentA {}
#[repr(C)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, bytemuck::Pod, bytemuck::Zeroable)]
pub struct ComponentB(i32);
impl ecs_tiny::Component for ComponentB {}
#[test]
fn crud_entity() {
let mut world = ecs_tiny::World::new();
let entity_key = world.insert_entity();
assert_eq!(world.contains_entity(entity_key), true);
assert_eq!(world.remove_entity(entity_key), Some(()));
assert_eq!(world.contains_entity(entity_key), false);
assert_eq!(world.remove_entity(entity_key), None);
}
#[test]
fn crud_component() {
let mut world = ecs_tiny::World::new();
let entity_key = world.insert_entity();
assert_eq!(world.insert_component(entity_key, ComponentA(42)), Some(()));
assert_eq!(world.get_component::<ComponentA>(entity_key), Some(&ComponentA(42)));
assert_eq!(world.get_component_mut::<ComponentA>(entity_key), Some(&mut ComponentA(42)));
assert_eq!(world.remove_component::<ComponentA>(entity_key), Some(()));
assert_eq!(world.get_component::<ComponentA>(entity_key), None);
assert_eq!(world.get_component_mut::<ComponentA>(entity_key), None);
assert_eq!(world.remove_component::<ComponentA>(entity_key), None);
}
#[test]
fn insert_component_with_invalid_entity() {
let mut world = ecs_tiny::World::new();
let entity_key = world.insert_entity();
assert_eq!(world.remove_entity(entity_key), Some(()));
assert_eq!(world.insert_component(entity_key, ComponentA(42)), None);
}
#[test]
fn remove_component_with_invalid_type() {
let mut world = ecs_tiny::World::new();
let entity_key = world.insert_entity();
assert_eq!(world.insert_component(entity_key, ComponentA(42)), Some(()));
assert_eq!(world.get_component::<ComponentB>(entity_key), None);
assert_eq!(world.get_component_mut::<ComponentB>(entity_key), None);
assert_eq!(world.remove_component::<ComponentB>(entity_key), None);
}
#[test]
fn remove_entity_and_components() {
let mut world = ecs_tiny::World::new();
let entity_key = world.insert_entity();
assert_eq!(world.insert_component(entity_key, ComponentA(42)), Some(()));
assert_eq!(world.remove_entity(entity_key), Some(()));
assert_eq!(world.contains_entity(entity_key), false);
assert_eq!(world.get_component::<ComponentA>(entity_key), None);
assert_eq!(world.get_component_mut::<ComponentA>(entity_key), None);
}
#[test]
fn iter_entity() {
let mut world = ecs_tiny::World::new();
let entity_key0 = world.insert_entity();
let entity_key1 = world.insert_entity();
let mut iter = world.iter_entity();
assert_eq!(iter.next(), Some(entity_key0));
assert_eq!(iter.next(), Some(entity_key1));
assert_eq!(iter.next(), None);
}
#[test]
fn iter_component() {
let mut world = ecs_tiny::World::new();
let entity_key0 = world.insert_entity();
let entity_key1 = world.insert_entity();
assert_eq!(world.insert_component(entity_key0, ComponentA(42)), Some(()));
assert_eq!(world.insert_component(entity_key0, ComponentB(63)), Some(()));
assert_eq!(world.insert_component(entity_key1, ComponentA(13)), Some(()));
assert_eq!(world.insert_component(entity_key1, ComponentB(87)), Some(()));
let mut iter = world.iter_component::<ComponentA>();
assert_eq!(iter.next(), Some(&ComponentA(42)));
assert_eq!(iter.next(), Some(&ComponentA(13)));
assert_eq!(iter.next(), None);
drop(iter);
let mut iter = world.iter_component_mut::<ComponentB>();
assert_eq!(iter.next(), Some(&mut ComponentB(63)));
assert_eq!(iter.next(), Some(&mut ComponentB(87)));
assert_eq!(iter.next(), None);
}
#[test]
fn iter_component_with_invalid_type() {
let mut world = ecs_tiny::World::new();
assert_eq!(world.iter_component::<ComponentA>().count(), 0);
assert_eq!(world.iter_component_mut::<ComponentA>().count(), 0);
}