#![cfg(loom)]
use rendezvous::Rendezvous;
#[test]
fn single_guard_releases_waiter() {
loom::model(|| {
let rendezvous = Rendezvous::new();
let guard = rendezvous.fork_guard();
let handle = loom::thread::spawn(move || drop(guard));
rendezvous.rendezvous();
handle.join().unwrap();
});
}
#[test]
fn two_guards_release_waiter() {
loom::model(|| {
let rendezvous = Rendezvous::new();
let g1 = rendezvous.fork_guard();
let g2 = g1.fork();
let h1 = loom::thread::spawn(move || drop(g1));
let h2 = loom::thread::spawn(move || drop(g2));
rendezvous.rendezvous();
h1.join().unwrap();
h2.join().unwrap();
});
}
#[test]
fn drop_acts_as_implicit_rendezvous() {
loom::model(|| {
let rendezvous = Rendezvous::new();
let guard = rendezvous.fork_guard();
let handle = loom::thread::spawn(move || drop(guard));
drop(rendezvous);
handle.join().unwrap();
});
}