// compile-flags: -Zmiri-disable-isolation use std::time::{SystemTime, Instant, Duration}; fn duration_sanity(diff: Duration) { // On my laptop, I observed times around 15-40ms. Add 10x lee-way both ways. assert!(diff.as_millis() > 1); assert!(diff.as_millis() < 500); } // Sleeping on Windows is not supported yet. #[cfg(unix)] fn test_sleep() { let before = Instant::now(); std::thread::sleep(Duration::from_millis(100)); let after = Instant::now(); assert!((after - before).as_millis() >= 100); } fn main() { // Check `SystemTime`. let now1 = SystemTime::now(); let seconds_since_epoch = now1.duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs(); let years_since_epoch = seconds_since_epoch / 3600 / 24 / 365; let year = 1970 + years_since_epoch; assert!(2020 <= year && year < 2100); // Do some work to make time pass. for _ in 0..10 { drop(vec![42]); } let now2 = SystemTime::now(); assert!(now2 > now1); // Sanity-check the difference we got. let diff = now2.duration_since(now1).unwrap(); assert_eq!(now1 + diff, now2); assert_eq!(now2 - diff, now1); duration_sanity(diff); // Check `Instant`. let now1 = Instant::now(); // Do some work to make time pass. for _ in 0..10 { drop(vec![42]); } let now2 = Instant::now(); assert!(now2 > now1); // Sanity-check the difference we got. let diff = now2.duration_since(now1); assert_eq!(now1 + diff, now2); assert_eq!(now2 - diff, now1); duration_sanity(diff); #[cfg(unix)] test_sleep(); }