use crossbeam_channel::Sender;
use rayon::iter::{IntoParallelIterator, ParallelIterator};
#[allow(dead_code)] pub fn scatter<J, R, F>(jobs: Vec<J>, results: Sender<R>, work: F)
where
J: Send,
R: Send,
F: Fn(J) -> R + Send + Sync,
{
jobs.into_par_iter().for_each_with(results, |results, job| {
let _ = results.send(work(job));
});
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn every_result_reaches_the_receiver() {
let (tx, rx) = crossbeam_channel::unbounded();
scatter(vec![1, 2, 3], tx, |n| n * 2);
let mut got: Vec<i32> = rx.into_iter().collect();
got.sort_unstable();
assert_eq!(got, vec![2, 4, 6]);
}
}