]> git.proxmox.com Git - rustc.git/blob - vendor/rayon/tests/par_bridge_recursion.rs
New upstream version 1.69.0+dfsg1
[rustc.git] / vendor / rayon / tests / par_bridge_recursion.rs
1 use rayon::prelude::*;
2 use std::iter::once_with;
3
4 const N: usize = 100_000;
5
6 #[test]
7 fn par_bridge_recursion() {
8 let pool = rayon::ThreadPoolBuilder::new()
9 .num_threads(10)
10 .build()
11 .unwrap();
12
13 let seq: Vec<_> = (0..N).map(|i| (i, i.to_string())).collect();
14
15 pool.broadcast(|_| {
16 let mut par: Vec<_> = (0..N)
17 .into_par_iter()
18 .flat_map(|i| {
19 once_with(move || {
20 // Using rayon within the serial iterator creates an opportunity for
21 // work-stealing to make par_bridge's mutex accidentally recursive.
22 rayon::join(move || i, move || i.to_string())
23 })
24 .par_bridge()
25 })
26 .collect();
27 par.par_sort_unstable();
28 assert_eq!(seq, par);
29 });
30 }