shipyard 0.5.0

Entity Component System
Documentation
#[cfg(feature = "thread_local")]
mod non_send_sync;

use shipyard::*;

#[test]
fn duplicate_name() {
    let world = World::new();

    Workload::builder("")
        .with_system(|| {})
        .add_to_world(&world)
        .unwrap();
    assert_eq!(
        Workload::builder("").add_to_world(&world).err(),
        Some(error::AddWorkload::AlreadyExists)
    );

    world.run_workload("").unwrap();
}

#[test]
fn rename() {
    fn increment(mut i: UniqueViewMut<u32>) {
        *i += 1;
    }

    let world = World::new();

    world.add_unique(0u32).unwrap();

    Workload::builder("Empty")
        .with_system(&increment)
        .add_to_world(&world)
        .unwrap();

    world.rename_workload("Empty", "New Empty").unwrap();

    assert_eq!(
        world
            .run_workload("Empty")
            .err()
            .as_ref()
            .map(std::mem::discriminant),
        Some(std::mem::discriminant(&error::RunWorkload::MissingWorkload))
    );

    world.run_workload("New Empty").unwrap();

    assert_eq!(*world.borrow::<UniqueView<u32>>().unwrap(), 1);
}