extern crate moirai;
use moirai::Moirai;
const N: usize = 1_000_000;
const CHUNKS: usize = 8;
fn main() {
let runtime = Moirai::new().expect("failed to create Moirai runtime");
let data: Vec<u64> = (0..N as u64).collect();
let chunk_size = N / CHUNKS;
let handles: Vec<_> = data
.chunks(chunk_size)
.map(|chunk| {
let owned: Vec<u64> = chunk.to_vec();
runtime.spawn_fn(move || owned.iter().copied().sum::<u64>())
})
.collect();
let total: u64 = handles
.into_iter()
.map(|h| h.join().expect("join").expect("task"))
.sum();
let expected: u64 = (N as u64 * (N as u64 - 1)) / 2; println!("parallel sum of 0..{N}: {total}");
println!("expected : {expected}");
assert_eq!(
total, expected,
"parallel reduction must equal the sequential sum"
);
println!(
"processed {} elements across {CHUNKS} tasks ({} per task)",
N, chunk_size,
);
println!("parallel-reduce assertion passed");
}