use std::panic::{catch_unwind, AssertUnwindSafe};
use corosensei::Coroutine;
fn main() {
println!("[main] creating coroutine");
let mut coroutine = Coroutine::new(|yielder, ()| {
println!("[coroutine] yielding 42");
yielder.suspend(42);
println!("[coroutine] panicking");
panic!("foobar");
});
println!("[main] resuming coroutine");
let result = catch_unwind(AssertUnwindSafe(|| coroutine.resume(())));
println!(
"[main] got value {} from coroutine",
result.unwrap().as_yield().unwrap()
);
println!("[main] resuming coroutine");
let result = catch_unwind(AssertUnwindSafe(|| coroutine.resume(())));
println!(
"[main] caught panic \"{}\" from coroutine",
result.unwrap_err().downcast_ref::<&'static str>().unwrap()
);
println!("[main] exiting");
}
#[cfg(feature = "unwind")]
#[test]
fn panic() {
main()
}