summaryrefslogtreecommitdiffstats
path: root/tokio/tests/time_interval.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tokio/tests/time_interval.rs')
-rw-r--r--tokio/tests/time_interval.rs46
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 {