#![warn(rust_2018_idioms)] #![cfg(feature = "full")] use tokio::time::{self, Duration, Instant}; #[tokio::test] async fn resume_lets_time_move_forward_instead_of_resetting_it() { let start = Instant::now(); time::pause(); time::advance(Duration::from_secs(10)).await; let advanced_by_ten_secs = Instant::now(); assert!(advanced_by_ten_secs - start > Duration::from_secs(10)); assert!(advanced_by_ten_secs - start < Duration::from_secs(11)); time::resume(); assert!(advanced_by_ten_secs < Instant::now()); assert!(Instant::now() - advanced_by_ten_secs < Duration::from_secs(1)); } #[tokio::test] async fn can_pause_after_resume() { let start = Instant::now(); time::pause(); time::advance(Duration::from_secs(10)).await; time::resume(); time::pause(); time::advance(Duration::from_secs(10)).await; assert!(Instant::now() - start > Duration::from_secs(20)); assert!(Instant::now() - start < Duration::from_secs(21)); } #[tokio::test] #[should_panic] async fn freezing_time_while_frozen_panics() { time::pause(); time::pause(); } #[tokio::test] #[should_panic] async fn advancing_time_when_time_is_not_frozen_panics() { time::advance(Duration::from_secs(1)).await; } #[tokio::test] #[should_panic] async fn resuming_time_when_not_frozen_panics() { time::pause(); time::resume(); time::resume(); }