time/
time.rs

1use core::time::Duration;
2use std::time::Instant;
3
4const SPAWNER_SIZE: usize = 2; // Must be a power of two, e.g., 2, 4, 8, 16, etc.
5static TEST_EPOCH: std::sync::OnceLock<Instant> = std::sync::OnceLock::new();
6
7fn get_platform_time() -> Duration {
8    let epoch = TEST_EPOCH.get_or_init(Instant::now);
9    Instant::now().duration_since(*epoch)
10}
11
12fn main() {
13    let spawner: ato::Spawner<SPAWNER_SIZE> = ato::Spawner::default();
14    ato::spawn_task!(spawner, res, {
15        let start = Instant::now();
16        ato::sleep(Duration::from_millis(200), get_platform_time).await;
17        let elapsed = Instant::now().duration_since(start);
18        println!(
19            "Task 0 completed after {:?} milliseconds",
20            elapsed.as_millis()
21        );
22    });
23    res.unwrap();
24
25    spawner.run_until_all_done().unwrap();
26}