1#![warn(rust_2018_idioms)]
2#![cfg(feature = "full")]
3
4use tokio::time::{self, Duration, Instant};
5
6#[tokio::test]
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]
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]
33async fn freezing_time_while_frozen_panics() {
34 time::pause();
35 time::pause();
36}
37
38#[tokio::test]
39#[should_panic]
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]
46async fn resuming_time_when_not_frozen_panics() {
47 time::pause();
48 time::resume();
49 time::resume();
50}
51