Files
galaxy/crates/galaxy_util/src/sync_tests.rs
T

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());
})
}