use std::io;
#[cfg_attr(test, test)]
fn main() -> io::Result<()> {
let scenario = fail::FailScenario::setup();
fail::cfg("i2o2::fail::try_get_result", "return(-4)").unwrap();
let (thread_handle, scheduler_handle) = i2o2::create_and_spawn()?;
let op = i2o2::opcode::Nop::new();
println!("submitting {op:?} to the scheduler");
let reply = unsafe {
scheduler_handle
.submit(op, Option::<()>::None)
.expect("submit op to scheduler")
};
println!("reply future created: {reply:?}");
let reply = reply.try_get_result();
println!("our task completed with reply: {reply:?}");
assert_eq!(reply, Ok(-4));
println!("shutting down scheduler");
drop(scheduler_handle);
thread_handle
.join()
.expect("scheduler should never panic")?;
scenario.teardown();
println!("scheduler shutdown complete!");
Ok(())
}