Vendor dependencies
Let's see how I like this workflow.
This commit is contained in:
parent
34d1830413
commit
9c435dc440
7500 changed files with 1665121 additions and 99 deletions
99
vendor/tokio/tests/sync_barrier.rs
vendored
Normal file
99
vendor/tokio/tests/sync_barrier.rs
vendored
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
#![allow(clippy::unnecessary_operation)]
|
||||
#![warn(rust_2018_idioms)]
|
||||
#![cfg(feature = "sync")]
|
||||
|
||||
#[cfg(tokio_wasm_not_wasi)]
|
||||
use wasm_bindgen_test::wasm_bindgen_test as test;
|
||||
|
||||
use tokio::sync::Barrier;
|
||||
|
||||
use tokio_test::task::spawn;
|
||||
use tokio_test::{assert_pending, assert_ready};
|
||||
|
||||
struct IsSend<T: Send>(T);
|
||||
#[test]
|
||||
fn barrier_future_is_send() {
|
||||
let b = Barrier::new(0);
|
||||
IsSend(b.wait());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn zero_does_not_block() {
|
||||
let b = Barrier::new(0);
|
||||
|
||||
{
|
||||
let mut w = spawn(b.wait());
|
||||
let wr = assert_ready!(w.poll());
|
||||
assert!(wr.is_leader());
|
||||
}
|
||||
{
|
||||
let mut w = spawn(b.wait());
|
||||
let wr = assert_ready!(w.poll());
|
||||
assert!(wr.is_leader());
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn single() {
|
||||
let b = Barrier::new(1);
|
||||
|
||||
{
|
||||
let mut w = spawn(b.wait());
|
||||
let wr = assert_ready!(w.poll());
|
||||
assert!(wr.is_leader());
|
||||
}
|
||||
{
|
||||
let mut w = spawn(b.wait());
|
||||
let wr = assert_ready!(w.poll());
|
||||
assert!(wr.is_leader());
|
||||
}
|
||||
{
|
||||
let mut w = spawn(b.wait());
|
||||
let wr = assert_ready!(w.poll());
|
||||
assert!(wr.is_leader());
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn tango() {
|
||||
let b = Barrier::new(2);
|
||||
|
||||
let mut w1 = spawn(b.wait());
|
||||
assert_pending!(w1.poll());
|
||||
|
||||
let mut w2 = spawn(b.wait());
|
||||
let wr2 = assert_ready!(w2.poll());
|
||||
let wr1 = assert_ready!(w1.poll());
|
||||
|
||||
assert!(wr1.is_leader() || wr2.is_leader());
|
||||
assert!(!(wr1.is_leader() && wr2.is_leader()));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn lots() {
|
||||
let b = Barrier::new(100);
|
||||
|
||||
for _ in 0..10 {
|
||||
let mut wait = Vec::new();
|
||||
for _ in 0..99 {
|
||||
let mut w = spawn(b.wait());
|
||||
assert_pending!(w.poll());
|
||||
wait.push(w);
|
||||
}
|
||||
for w in &mut wait {
|
||||
assert_pending!(w.poll());
|
||||
}
|
||||
|
||||
// pass the barrier
|
||||
let mut w = spawn(b.wait());
|
||||
let mut found_leader = assert_ready!(w.poll()).is_leader();
|
||||
for mut w in wait {
|
||||
let wr = assert_ready!(w.poll());
|
||||
if wr.is_leader() {
|
||||
assert!(!found_leader);
|
||||
found_leader = true;
|
||||
}
|
||||
}
|
||||
assert!(found_leader);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue