par_sum/
par_sum.rs

1use easy_parallel::Parallel;
2
3fn par_sum(v: &[i32]) -> i32 {
4    const THRESHOLD: usize = 100;
5
6    if v.len() <= THRESHOLD {
7        v.iter().copied().sum()
8    } else {
9        let half = (v.len() + 1) / 2;
10        let sums = Parallel::new().each(v.chunks(half), par_sum).run();
11        sums.into_iter().sum()
12    }
13}
14
15fn main() {
16    let mut v = Vec::new();
17    for i in 0..10_000 {
18        v.push(i);
19    }
20
21    let sum = dbg!(par_sum(&v));
22    assert_eq!(sum, v.into_iter().sum());
23}