From 511b75a446ee7ba4b20ddadfb9aedee59564c5f0 Mon Sep 17 00:00:00 2001 From: folex <0xdxdy@gmail.com> Date: Tue, 19 May 2020 22:35:44 +0300 Subject: [PATCH 1/2] add checked_duration_since & saturating_duration_since --- src/wasm.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/wasm.rs b/src/wasm.rs index 57ee1e6..65f4e89 100644 --- a/src/wasm.rs +++ b/src/wasm.rs @@ -70,6 +70,18 @@ impl Instant { pub fn elapsed(&self) -> Duration { Instant::now() - *self } + + pub fn saturating_duration_since(&self, earlier: Instant) -> Duration { + self.checked_duration_since(earlier).unwrap_or(Duration::new(0, 0)) + } + + pub fn checked_duration_since(&self, earlier: Instant) -> Option { + if self.inner >= earlier.inner { + Some(*self - earlier) + } else { + None + } + } } impl Add for Instant { @@ -188,3 +200,25 @@ impl SubAssign for SystemTime { *self = *self - rhs; } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn instant_checked_duration_since_nopanic() { + let now = Instant::now(); + let earlier = now - Duration::new(1, 0); + let later = now + Duration::new(1, 0); + assert_eq!(earlier.checked_duration_since(now), None); + assert_eq!(later.checked_duration_since(now), Some(Duration::new(1, 0))); + assert_eq!(now.checked_duration_since(now), Some(Duration::new(0, 0))); + } + + #[test] + fn instant_saturating_duration_since_nopanic() { + let a = Instant::now(); + let ret = (a - Duration::new(1, 0)).saturating_duration_since(a); + assert_eq!(ret, Duration::new(0, 0)); + } +} \ No newline at end of file From 5facff3900abaf021a0985078035b24d4f4b8af6 Mon Sep 17 00:00:00 2001 From: folex <0xdxdy@gmail.com> Date: Tue, 19 May 2020 23:03:13 +0300 Subject: [PATCH 2/2] newline --- src/wasm.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wasm.rs b/src/wasm.rs index 65f4e89..62eff0c 100644 --- a/src/wasm.rs +++ b/src/wasm.rs @@ -221,4 +221,4 @@ mod tests { let ret = (a - Duration::new(1, 0)).saturating_duration_since(a); assert_eq!(ret, Duration::new(0, 0)); } -} \ No newline at end of file +}