diff options
Diffstat (limited to 'third_party/rust/tokio/tests/time_interval.rs')
-rw-r--r-- | third_party/rust/tokio/tests/time_interval.rs | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/third_party/rust/tokio/tests/time_interval.rs b/third_party/rust/tokio/tests/time_interval.rs new file mode 100644 index 0000000000..1123681f49 --- /dev/null +++ b/third_party/rust/tokio/tests/time_interval.rs @@ -0,0 +1,66 @@ +#![warn(rust_2018_idioms)] +#![cfg(feature = "full")] + +use tokio::time::{self, Duration, Instant}; +use tokio_test::{assert_pending, assert_ready_eq, task}; + +use std::task::Poll; + +#[tokio::test] +#[should_panic] +async fn interval_zero_duration() { + let _ = time::interval_at(Instant::now(), ms(0)); +} + +#[tokio::test] +async fn usage() { + time::pause(); + + let start = Instant::now(); + + // TODO: Skip this + time::advance(ms(1)).await; + + let mut i = task::spawn(time::interval_at(start, ms(300))); + + assert_ready_eq!(poll_next(&mut i), start); + assert_pending!(poll_next(&mut i)); + + time::advance(ms(100)).await; + assert_pending!(poll_next(&mut i)); + + time::advance(ms(200)).await; + assert_ready_eq!(poll_next(&mut i), start + ms(300)); + assert_pending!(poll_next(&mut i)); + + time::advance(ms(400)).await; + assert_ready_eq!(poll_next(&mut i), start + ms(600)); + assert_pending!(poll_next(&mut i)); + + time::advance(ms(500)).await; + assert_ready_eq!(poll_next(&mut i), start + ms(900)); + assert_ready_eq!(poll_next(&mut i), start + ms(1200)); + assert_pending!(poll_next(&mut i)); +} + +#[tokio::test] +async fn usage_stream() { + use tokio::stream::StreamExt; + + let start = Instant::now(); + let mut interval = time::interval(ms(10)); + + for _ in 0..3 { + interval.next().await.unwrap(); + } + + assert!(start.elapsed() > ms(20)); +} + +fn poll_next(interval: &mut task::Spawn<time::Interval>) -> Poll<Instant> { + interval.enter(|cx, mut interval| interval.poll_tick(cx)) +} + +fn ms(n: u64) -> Duration { + Duration::from_millis(n) +} |