1 //@compile-flags: -Zmiri-disable-isolation 2 3 use std::time::{Duration, Instant, SystemTime}; 4 duration_sanity(diff: Duration)5fn 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()11fn 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()18fn 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