rust/tests/pass/time.rs

52 lines
1.6 KiB
Rust
Raw Normal View History

2020-03-19 17:00:02 -05:00
// compile-flags: -Zmiri-disable-isolation
2020-04-15 05:41:54 -05:00
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);
}
2020-03-19 17:00:02 -05:00
2020-09-07 15:05:26 -05:00
// Sleeping on Windows is not supported yet.
2020-09-06 17:09:24 -05:00
#[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);
}
2020-03-19 17:00:02 -05:00
fn main() {
2020-04-01 13:12:51 -05:00
// Check `SystemTime`.
2020-03-19 17:00:02 -05:00
let now1 = SystemTime::now();
2020-04-15 05:41:54 -05:00
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);
2020-03-19 17:00:02 -05:00
// Do some work to make time pass.
for _ in 0..10 { drop(vec![42]); }
let now2 = SystemTime::now();
assert!(now2 > now1);
2020-04-15 05:41:54 -05:00
// Sanity-check the difference we got.
let diff = now2.duration_since(now1).unwrap();
assert_eq!(now1 + diff, now2);
assert_eq!(now2 - diff, now1);
2020-04-15 05:41:54 -05:00
duration_sanity(diff);
2020-03-19 17:00:02 -05:00
2020-04-01 13:12:51 -05:00
// 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);
2020-04-15 05:41:54 -05:00
// Sanity-check the difference we got.
let diff = now2.duration_since(now1);
assert_eq!(now1 + diff, now2);
assert_eq!(now2 - diff, now1);
2020-04-15 05:41:54 -05:00
duration_sanity(diff);
2020-09-06 17:09:24 -05:00
#[cfg(unix)]
test_sleep();
2020-03-19 17:00:02 -05:00
}