use std::time::{Duration, Instant}; fn test_sleep() { // We sleep a *long* time here -- but the clock is virtual so the test should still pass quickly. let before = Instant::now(); std::thread::sleep(Duration::from_secs(3600)); let after = Instant::now(); assert!((after - before).as_secs() >= 3600); } /// Ensure that time passes even if we don't sleep (but just work). fn test_time_passes() { // 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); // The virtual clock is deterministic and I got 29us on a 64-bit Linux machine. However, this // changes according to the platform so we use an interval to be safe. This should be updated // if `NANOSECONDS_PER_BASIC_BLOCK` changes. assert!(diff.as_micros() > 10); assert!(diff.as_micros() < 40); } fn main() { test_time_passes(); test_sleep(); }