From 43a97878ce14b72f0981164f87f2e35e14151312 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 11:22:09 +0200 Subject: Adding upstream version 110.0.1. Signed-off-by: Daniel Baumann --- third_party/rust/rayon/tests/cross-pool.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 third_party/rust/rayon/tests/cross-pool.rs (limited to 'third_party/rust/rayon/tests/cross-pool.rs') diff --git a/third_party/rust/rayon/tests/cross-pool.rs b/third_party/rust/rayon/tests/cross-pool.rs new file mode 100644 index 0000000000..f0a2128a77 --- /dev/null +++ b/third_party/rust/rayon/tests/cross-pool.rs @@ -0,0 +1,21 @@ +use rayon::prelude::*; +use rayon::ThreadPoolBuilder; + +#[test] +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); +} -- cgit v1.2.3