1 #![warn(rust_2018_idioms)] 2 #![cfg(feature = "full")] 3 4 use tokio::time::{self, Duration, Instant}; 5 6 #[tokio::test] resume_lets_time_move_forward_instead_of_resetting_it()7async fn resume_lets_time_move_forward_instead_of_resetting_it() { 8 let start = Instant::now(); 9 time::pause(); 10 time::advance(Duration::from_secs(10)).await; 11 let advanced_by_ten_secs = Instant::now(); 12 assert!(advanced_by_ten_secs - start > Duration::from_secs(10)); 13 assert!(advanced_by_ten_secs - start < Duration::from_secs(11)); 14 time::resume(); 15 assert!(advanced_by_ten_secs < Instant::now()); 16 assert!(Instant::now() - advanced_by_ten_secs < Duration::from_secs(1)); 17 } 18 19 #[tokio::test] can_pause_after_resume()20async fn can_pause_after_resume() { 21 let start = Instant::now(); 22 time::pause(); 23 time::advance(Duration::from_secs(10)).await; 24 time::resume(); 25 time::pause(); 26 time::advance(Duration::from_secs(10)).await; 27 assert!(Instant::now() - start > Duration::from_secs(20)); 28 assert!(Instant::now() - start < Duration::from_secs(21)); 29 } 30 31 #[tokio::test] 32 #[should_panic] freezing_time_while_frozen_panics()33async fn freezing_time_while_frozen_panics() { 34 time::pause(); 35 time::pause(); 36 } 37 38 #[tokio::test] 39 #[should_panic] advancing_time_when_time_is_not_frozen_panics()40async fn advancing_time_when_time_is_not_frozen_panics() { 41 time::advance(Duration::from_secs(1)).await; 42 } 43 44 #[tokio::test] 45 #[should_panic] resuming_time_when_not_frozen_panics()46async fn resuming_time_when_not_frozen_panics() { 47 time::pause(); 48 time::resume(); 49 time::resume(); 50 } 51