use std::time::Duration;
use tokio::time::{delay_for, timeout};
use task_scope::{scope, spawn};
#[tokio::test]
async fn test_basic() {
scope(async {
spawn(async {
delay_for(Duration::from_millis(500)).await;
println!("child is done");
})
.await;
println!("parent is done");
})
.await
.expect("must complete");
delay_for(Duration::from_millis(1000)).await;
}
#[tokio::test]
async fn test_drop() {
timeout(
Duration::from_millis(50),
scope(async {
spawn(async {
println!("child started");
delay_for(Duration::from_millis(100)).await;
panic!("child is canceled");
})
.await;
}),
)
.await
.unwrap_err();
delay_for(Duration::from_millis(60)).await;
}