diff options
Diffstat (limited to 'tokio/tests/time_interval.rs')
-rw-r--r-- | tokio/tests/time_interval.rs | 46 |
1 files changed, 33 insertions, 13 deletions
diff --git a/tokio/tests/time_interval.rs b/tokio/tests/time_interval.rs index c884ca8e..70709f4a 100644 --- a/tokio/tests/time_interval.rs +++ b/tokio/tests/time_interval.rs @@ -1,12 +1,14 @@ #![warn(rust_2018_idioms)] -use tokio::time::{self, Duration, Instant, Interval}; +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 _ = Interval::new(Instant::now(), ms(0)); + let _ = time::interval_at(Instant::now(), ms(0)); } #[tokio::test] @@ -18,26 +20,44 @@ async fn usage() { // TODO: Skip this time::advance(ms(1)).await; - let mut int = task::spawn(Interval::new(start, ms(300))); + let mut i = task::spawn(time::interval_at(start, ms(300))); - assert_ready_eq!(int.poll_next(), Some(start)); - assert_pending!(int.poll_next()); + assert_ready_eq!(poll_next(&mut i), start); + assert_pending!(poll_next(&mut i)); time::advance(ms(100)).await; - assert_pending!(int.poll_next()); + assert_pending!(poll_next(&mut i)); time::advance(ms(200)).await; - assert_ready_eq!(int.poll_next(), Some(start + ms(300))); - assert_pending!(int.poll_next()); + assert_ready_eq!(poll_next(&mut i), start + ms(300)); + assert_pending!(poll_next(&mut i)); time::advance(ms(400)).await; - assert_ready_eq!(int.poll_next(), Some(start + ms(600))); - assert_pending!(int.poll_next()); + assert_ready_eq!(poll_next(&mut i), start + ms(600)); + assert_pending!(poll_next(&mut i)); time::advance(ms(500)).await; - assert_ready_eq!(int.poll_next(), Some(start + ms(900))); - assert_ready_eq!(int.poll_next(), Some(start + ms(1200))); - assert_pending!(int.poll_next()); + 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 futures::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 { |