Rollup merge of #127447 - RalfJung:once_lock_miri, r=joboet
once_lock: make test not take as long in Miri Allocating 1000 list elements takes a while (`@zachs18` reported >5min), so let's reduce the iteration count when running in Miri. Unfortunately due to this clever `while let i @ 0..LEN =` thing, the count needs to be a constants, and constants cannot be shadowed, so we need to use another trick to hide the `cfg!(miri)` from the docs. (I think this loop condition may be a bit too clever, it took me a bit to decipher. Ideally this would be `while let i = ... && i < LEN`, but that is not stable yet.)
This commit is contained in:
commit
b564c510c1
@ -80,14 +80,21 @@
|
|||||||
/// static LIST: OnceList<u32> = OnceList::new();
|
/// static LIST: OnceList<u32> = OnceList::new();
|
||||||
/// static COUNTER: AtomicU32 = AtomicU32::new(0);
|
/// static COUNTER: AtomicU32 = AtomicU32::new(0);
|
||||||
///
|
///
|
||||||
/// let vec = (0..thread::available_parallelism().unwrap().get()).map(|_| thread::spawn(|| {
|
/// # const LEN: u32 = if cfg!(miri) { 50 } else { 1000 };
|
||||||
/// while let i @ 0..=1000 = COUNTER.fetch_add(1, Ordering::Relaxed) {
|
/// # /*
|
||||||
|
/// const LEN: u32 = 1000;
|
||||||
|
/// # */
|
||||||
|
/// thread::scope(|s| {
|
||||||
|
/// for _ in 0..thread::available_parallelism().unwrap().get() {
|
||||||
|
/// s.spawn(|| {
|
||||||
|
/// while let i @ 0..LEN = COUNTER.fetch_add(1, Ordering::Relaxed) {
|
||||||
/// LIST.push(i);
|
/// LIST.push(i);
|
||||||
/// }
|
/// }
|
||||||
/// })).collect::<Vec<thread::JoinHandle<_>>>();
|
/// });
|
||||||
/// vec.into_iter().for_each(|handle| handle.join().unwrap());
|
/// }
|
||||||
|
/// });
|
||||||
///
|
///
|
||||||
/// for i in 0..=1000 {
|
/// for i in 0..LEN {
|
||||||
/// assert!(LIST.contains(&i));
|
/// assert!(LIST.contains(&i));
|
||||||
/// }
|
/// }
|
||||||
///
|
///
|
||||||
|
Loading…
Reference in New Issue
Block a user