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()7 async 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()20 async 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()33 async 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()40 async 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()46 async fn resuming_time_when_not_frozen_panics() {
47     time::pause();
48     time::resume();
49     time::resume();
50 }
51