use async_runtime::LocalDomain;
use futures_lite::future;
use std::cell::Cell;
use std::rc::Rc;
use std::time::Duration;
fn main() {
let local_rt = LocalDomain::new();
let state = Rc::new(Cell::new(0));
let state_for_task = Rc::clone(&state);
local_rt
.spawn_local(async move { state_for_task.set(1) })
.expect("domain is running")
.detach();
assert_eq!(local_rt.run_n(0), 0);
let steps = local_rt.run_n(1);
assert_eq!(steps, 1);
assert_eq!(state.get(), 1);
let state_for_task = Rc::clone(&state);
local_rt
.spawn_local(async move { state_for_task.set(2) })
.expect("domain is running")
.detach();
let stats = local_rt.run_for(Duration::from_millis(1));
println!(
"host slice: {} drive steps, {} inbox commands, elapsed {:?}",
stats.drive_steps, stats.inbox_commands, stats.elapsed
);
assert!(stats.drive_steps >= 1);
assert_eq!(state.get(), 2);
let zero_budget = local_rt.run_for(Duration::ZERO);
assert_eq!(zero_budget.drive_steps, 0);
future::block_on(local_rt.shutdown_graceful());
}