diff options
Diffstat (limited to 'vendor/rayon/tests/cross-pool.rs')
-rw-r--r-- | vendor/rayon/tests/cross-pool.rs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/vendor/rayon/tests/cross-pool.rs b/vendor/rayon/tests/cross-pool.rs new file mode 100644 index 0000000..835e2e2 --- /dev/null +++ b/vendor/rayon/tests/cross-pool.rs @@ -0,0 +1,22 @@ +use rayon::prelude::*; +use rayon::ThreadPoolBuilder; + +#[test] +#[cfg_attr(any(target_os = "emscripten", target_family = "wasm"), ignore)] +fn cross_pool_busy() { + let pool1 = ThreadPoolBuilder::new().num_threads(1).build().unwrap(); + let pool2 = ThreadPoolBuilder::new().num_threads(1).build().unwrap(); + + let n: i32 = 100; + let sum: i32 = pool1.install(move || { + // Each item will block on pool2, but pool1 can continue processing other work from the + // parallel iterator in the meantime. There's a chance that pool1 will still be awake to + // see the latch set without being tickled, and then it will drop that stack job. The latch + // internals must not assume that the job will still be alive after it's set! + (1..=n) + .into_par_iter() + .map(|i| pool2.install(move || i)) + .sum() + }); + assert_eq!(sum, n * (n + 1) / 2); +} |