merge parking test into general synchronization test

This commit is contained in:
Ralf Jung 2020-10-03 15:27:23 +02:00
parent b350c80a31
commit a4cbbddc8e
3 changed files with 30 additions and 39 deletions

View file

@ -1,37 +0,0 @@
// ignore-windows: Concurrency on Windows is not supported yet.
// compile-flags: -Zmiri-disable-isolation
use std::thread;
use std::time::{Duration, Instant};
// Normally, waiting in park/park_timeout may spuriously wake up early, but we
// know Miri's timed synchronization primitives do not do that.
fn park_timeout() {
let start = Instant::now();
thread::park_timeout(Duration::from_millis(200));
assert!((200..500).contains(&start.elapsed().as_millis()));
}
fn park_unpark() {
let t1 = thread::current();
let t2 = thread::spawn(move || {
thread::park();
thread::sleep(Duration::from_millis(200));
t1.unpark();
});
let start = Instant::now();
t2.thread().unpark();
thread::park();
assert!((200..500).contains(&start.elapsed().as_millis()));
}
fn main() {
park_timeout();
park_unpark();
}

View file

@ -1,2 +0,0 @@
warning: thread support is experimental. For example, Miri does not detect data races yet.

View file

@ -312,6 +312,34 @@ fn check_rwlock_unlock_bug2() {
h.join().unwrap();
}
fn park_timeout() {
let start = Instant::now();
thread::park_timeout(Duration::from_millis(200));
// Normally, waiting in park/park_timeout may spuriously wake up early, but we
// know Miri's timed synchronization primitives do not do that.
assert!((200..500).contains(&start.elapsed().as_millis()));
}
fn park_unpark() {
let t1 = thread::current();
let t2 = thread::spawn(move || {
thread::park();
thread::sleep(Duration::from_millis(200));
t1.unpark();
});
let start = Instant::now();
t2.thread().unpark();
thread::park();
// Normally, waiting in park/park_timeout may spuriously wake up early, but we
// know Miri's timed synchronization primitives do not do that.
assert!((200..500).contains(&start.elapsed().as_millis()));
}
fn main() {
check_barriers();
check_conditional_variables_notify_one();
@ -327,4 +355,6 @@ fn main() {
check_once();
check_rwlock_unlock_bug1();
check_rwlock_unlock_bug2();
park_timeout();
park_unpark();
}