use std::process::ExitCode;
fn main() -> ExitCode {
let all_passed = go_lib::run(|| {
const N: usize = 5;
let results = go_lib::scope(|s| {
let handles: Vec<_> = (0..N)
.map(|id| s.go(move || (id, run_task(id))))
.collect();
handles
.into_iter()
.map(|h| h.join().expect("task goroutine panicked"))
.collect::<Vec<_>>()
});
let mut failures = 0_usize;
for (id, ok) in results {
println!(" task {id}: {}", if ok { "ok" } else { "FAIL" });
if !ok {
failures += 1;
}
}
println!("{}/{N} tasks passed", N - failures);
failures == 0 });
if all_passed {
ExitCode::SUCCESS
} else {
ExitCode::FAILURE
}
}
fn run_task(id: usize) -> bool {
id.is_multiple_of(2)
}