use std::time::{Duration, SystemTime};
pub(crate) trait SystemTimeExt {
fn eq_nearly(&self, other: SystemTime) -> bool;
}
impl SystemTimeExt for SystemTime {
fn eq_nearly(&self, other: SystemTime) -> bool {
let diff = if other > *self {
other.duration_since(*self).unwrap()
} else {
self.duration_since(other).unwrap()
};
diff < Duration::from_nanos(100)
}
}
#[cfg(test)]
mod tests {
use std::ops::{Add, Sub};
use std::time::UNIX_EPOCH;
use super::*;
#[test]
fn test_eq_nearly() {
let time = UNIX_EPOCH + Duration::new(12345, 67890);
assert!(time.eq_nearly(time));
assert!(time.eq_nearly(time.add(Duration::new(0, 10))));
assert!(time.eq_nearly(time.sub(Duration::new(0, 90))));
assert!(!time.eq_nearly(time.add(Duration::new(0, 100))));
assert!(!time.eq_nearly(time.sub(Duration::new(0, 100))));
}
}