• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //@compile-flags: -Zmiri-disable-isolation
2 
3 use std::time::{Duration, Instant, SystemTime};
4 
duration_sanity(diff: Duration)5 fn duration_sanity(diff: Duration) {
6     // On my laptop, I observed times around 15-40ms. Add 10x lee-way both ways.
7     assert!(diff.as_millis() > 1);
8     assert!(diff.as_millis() < 500);
9 }
10 
test_sleep()11 fn test_sleep() {
12     let before = Instant::now();
13     std::thread::sleep(Duration::from_millis(100));
14     let after = Instant::now();
15     assert!((after - before).as_millis() >= 100);
16 }
17 
main()18 fn main() {
19     // Check `SystemTime`.
20     let now1 = SystemTime::now();
21     let seconds_since_epoch = now1.duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs();
22     let years_since_epoch = seconds_since_epoch / 3600 / 24 / 365;
23     let year = 1970 + years_since_epoch;
24     assert!(2020 <= year && year < 2100);
25     // Do some work to make time pass.
26     for _ in 0..10 {
27         drop(vec![42]);
28     }
29     let now2 = SystemTime::now();
30     assert!(now2 > now1);
31     // Sanity-check the difference we got.
32     let diff = now2.duration_since(now1).unwrap();
33     assert_eq!(now1 + diff, now2);
34     assert_eq!(now2 - diff, now1);
35     duration_sanity(diff);
36 
37     // Check `Instant`.
38     let now1 = Instant::now();
39     // Do some work to make time pass.
40     for _ in 0..10 {
41         drop(vec![42]);
42     }
43     let now2 = Instant::now();
44     assert!(now2 > now1);
45     // Sanity-check the difference we got.
46     let diff = now2.duration_since(now1);
47     assert_eq!(now1 + diff, now2);
48     assert_eq!(now2 - diff, now1);
49     duration_sanity(diff);
50 
51     test_sleep();
52 }
53