#![ cfg( feature = "implementation" ) ]
#![ cfg(not( target_arch = "wasm32" )) ]
mod common;
use common::{ *, import::* };
#[ async_std::test ]
async fn in_method() -> DynSendResult<()>
{
let (nursery, output) = Nursery::new( AsyncStd );
nursery.nurse( async { 5 + 5 } )?;
nursery.nurse( async { 5 + 5 } )?;
drop(nursery);
let sum = output.fold( 0, |acc, x| async move { acc + x } ).await;
assert_eq!( 20, sum );
Ok(())
}
#[test] fn in_method_local() -> DynResult<()>
{
let exec = TokioCt::new()?;
let (nursery, output) = Nursery::new( exec.clone() );
nursery.nurse( async { 5 + 5 } )?;
nursery.nurse( async { 5 + 5 } )?;
drop(nursery);
let sum = exec.block_on( output.fold( 0, |acc, x| async move { acc + x } ) );
assert_eq!( 20, sum );
Ok(())
}
async fn return_error() -> DynSendResult<()>
{
let (nursery, mut output) = Nursery::new( AsyncStd );
nursery.nurse( slow() )?;
nursery.nurse( wrong() )?;
drop(nursery);
while output.try_next().await?.is_some() {};
unreachable!( "drop Nursery and NurseryStream" );
}
async fn slow() -> DynSendResult<()>
{
Delay::new( Duration::from_secs(5) ).await;
unreachable!( "Should never get executed because of error in wrong." );
}
async fn wrong() -> DynSendResult<()>
{
Err( "I don't like waiting.".into() )
}
#[ async_std::test ]
async fn early_return_error() -> DynSendResult<()>
{
let err = return_error().await;
assert!( err.is_err() );
Ok(())
}