use std::sync::atomic::{AtomicUsize, Ordering}; use ecs::component::local::Local; use ecs::phase::UPDATE; use ecs::system::Into; use ecs::system::initializable::Initializable; use ecs::{Component, World}; #[derive(Component)] struct Thing; #[test] fn system_run_order_correct_when_one_has_local_comp() { static COUNTER: AtomicUsize = AtomicUsize::new(0); fn first_system(_thing: Local) { assert_eq!(COUNTER.fetch_add(1, Ordering::Relaxed), 0); } fn second_system() { assert_eq!(COUNTER.fetch_add(1, Ordering::Relaxed), 1); } let mut world = World::new(); world.register_system(*UPDATE, first_system.into_system().initialize((Thing,))); world.register_system(*UPDATE, second_system); world.step(); assert_eq!(COUNTER.load(Ordering::Relaxed), 2); }