53 lines
1.5 KiB
Rust
53 lines
1.5 KiB
Rust
use futures_lite::future;
|
|
|
|
use super::Condition;
|
|
|
|
#[test]
|
|
fn test_condition_multiple_waiters() {
|
|
future::block_on(async {
|
|
let condition = Condition::new();
|
|
|
|
let mut listener1 = Box::pin(condition.wait());
|
|
let mut listener2 = Box::pin(condition.wait());
|
|
|
|
// Neither listener should be ready.
|
|
assert!(future::poll_once(&mut listener1).await.is_none());
|
|
assert!(future::poll_once(&mut listener2).await.is_none());
|
|
|
|
condition.set();
|
|
|
|
// Now, both should complete.
|
|
assert!(future::poll_once(listener1).await.is_some());
|
|
assert!(future::poll_once(listener2).await.is_some());
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn test_condition_after_set() {
|
|
future::block_on(async {
|
|
let condition = Condition::new();
|
|
condition.set();
|
|
|
|
// After the condition is set, waiting should complete immediately.
|
|
assert!(future::poll_once(condition.wait()).await.is_some());
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn test_condition_multiple_sets() {
|
|
future::block_on(async {
|
|
let condition = Condition::new();
|
|
|
|
// Test that multiple interleavings of `wait` and `set` all complete as expected.
|
|
let first = condition.wait();
|
|
condition.set();
|
|
let second = condition.wait();
|
|
condition.set();
|
|
let third = condition.wait();
|
|
|
|
assert!(future::poll_once(first).await.is_some());
|
|
assert!(future::poll_once(second).await.is_some());
|
|
assert!(future::poll_once(third).await.is_some());
|
|
})
|
|
}
|