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}