local_executor/
lib.rs

1#![feature(local_waker)]
2#![cfg_attr(not(test), no_std)]
3
4extern crate alloc;
5
6mod task;
7pub use task::Task;
8
9mod executor;
10pub use executor::{Executor, ExecutorHandle, spawn, yield_now};
11
12#[test]
13fn tick_counter() {
14    use std::cell::Cell;
15    use std::rc::Rc;
16
17    let executor = Rc::new(Executor::new());
18    executor.block_on(async {
19        let signal = Rc::new(Cell::new(false));
20        spawn(Rc::downgrade(&executor), {
21            let signal = signal.clone();
22            async move {
23                for i in (0..10).rev() {
24                    println!("tick: {i}");
25                    yield_now().await;
26                }
27                signal.set(true);
28            }
29        });
30
31        let mut i = 0;
32        loop {
33            println!("count: {i}");
34            if signal.get() {
35                break;
36            }
37            yield_now().await;
38            i += 1;
39        }
40    });
41}