Vendor things
This commit is contained in:
parent
5deceec006
commit
977e3c17e5
19434 changed files with 10682014 additions and 0 deletions
77
third-party/vendor/jobserver/tests/helper.rs
vendored
Normal file
77
third-party/vendor/jobserver/tests/helper.rs
vendored
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
use jobserver::Client;
|
||||
use std::sync::atomic::*;
|
||||
use std::sync::mpsc;
|
||||
use std::sync::*;
|
||||
|
||||
macro_rules! t {
|
||||
($e:expr) => {
|
||||
match $e {
|
||||
Ok(e) => e,
|
||||
Err(e) => panic!("{} failed with {}", stringify!($e), e),
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn helper_smoke() {
|
||||
let client = t!(Client::new(1));
|
||||
drop(client.clone().into_helper_thread(|_| ()).unwrap());
|
||||
drop(client.clone().into_helper_thread(|_| ()).unwrap());
|
||||
drop(client.clone().into_helper_thread(|_| ()).unwrap());
|
||||
drop(client.clone().into_helper_thread(|_| ()).unwrap());
|
||||
drop(client.clone().into_helper_thread(|_| ()).unwrap());
|
||||
drop(client.into_helper_thread(|_| ()).unwrap());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn acquire() {
|
||||
let (tx, rx) = mpsc::channel();
|
||||
let client = t!(Client::new(1));
|
||||
let helper = client
|
||||
.into_helper_thread(move |a| drop(tx.send(a)))
|
||||
.unwrap();
|
||||
assert!(rx.try_recv().is_err());
|
||||
helper.request_token();
|
||||
rx.recv().unwrap().unwrap();
|
||||
helper.request_token();
|
||||
rx.recv().unwrap().unwrap();
|
||||
|
||||
helper.request_token();
|
||||
helper.request_token();
|
||||
rx.recv().unwrap().unwrap();
|
||||
rx.recv().unwrap().unwrap();
|
||||
|
||||
helper.request_token();
|
||||
helper.request_token();
|
||||
drop(helper);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn prompt_shutdown() {
|
||||
for _ in 0..100 {
|
||||
let client = jobserver::Client::new(4).unwrap();
|
||||
let count = Arc::new(AtomicU32::new(0));
|
||||
let count2 = count.clone();
|
||||
let tokens = Arc::new(Mutex::new(Vec::new()));
|
||||
let helper = client
|
||||
.into_helper_thread(move |token| {
|
||||
tokens.lock().unwrap().push(token);
|
||||
count2.fetch_add(1, Ordering::SeqCst);
|
||||
})
|
||||
.unwrap();
|
||||
|
||||
// Request more tokens than what are available.
|
||||
for _ in 0..5 {
|
||||
helper.request_token();
|
||||
}
|
||||
// Wait for at least some of the requests to finish.
|
||||
while count.load(Ordering::SeqCst) < 3 {
|
||||
std::thread::yield_now();
|
||||
}
|
||||
// Drop helper
|
||||
let t = std::time::Instant::now();
|
||||
drop(helper);
|
||||
let d = t.elapsed();
|
||||
assert!(d.as_secs_f64() < 0.5);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue