about summary refs log tree commit diff
path: root/src/libstd/time
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2015-11-23 14:51:45 -0800
committerAlex Crichton <alex@alexcrichton.com>2015-11-23 15:27:07 -0800
commit27ee3fea7ae0eaa38abf01461ce9ebc69fe9c311 (patch)
tree8d7ba2e339d798d3b6404502c4ee031f78edb0bd /src/libstd/time
parente24fffef8a560ddf968a866db8da96bc461f4038 (diff)
downloadrust-27ee3fea7ae0eaa38abf01461ce9ebc69fe9c311.tar.gz
rust-27ee3fea7ae0eaa38abf01461ce9ebc69fe9c311.zip
std: Tweak tests of std::time
Typical algebra currently doesn't work on the types in std::time currently (see
[this comment][comment]), so tweak the tests to account for this property.

[comment]: https://github.com/rust-lang/rust/issues/29866#issuecomment-159093809

Closes #29970
Diffstat (limited to 'src/libstd/time')
-rw-r--r--src/libstd/time/mod.rs38
1 files changed, 24 insertions, 14 deletions
diff --git a/src/libstd/time/mod.rs b/src/libstd/time/mod.rs
index 95f68712be2..3e01ed894b8 100644
--- a/src/libstd/time/mod.rs
+++ b/src/libstd/time/mod.rs
@@ -231,6 +231,16 @@ impl fmt::Display for SystemTimeError {
 mod tests {
     use super::{Instant, SystemTime, Duration, UNIX_EPOCH};
 
+    macro_rules! assert_almost_eq {
+        ($a:expr, $b:expr) => ({
+            let (a, b) = ($a, $b);
+            if a != b {
+                let (a, b) = if a > b {(a, b)} else {(b, a)};
+                assert!(a - Duration::new(0, 1) <= b);
+            }
+        })
+    }
+
     #[test]
     fn instant_monotonic() {
         let a = Instant::now();
@@ -249,11 +259,11 @@ mod tests {
         let a = Instant::now();
         let b = Instant::now();
         let dur = b.duration_from_earlier(a);
-        assert_eq!(b - dur, a);
-        assert_eq!(a + dur, b);
+        assert_almost_eq!(b - dur, a);
+        assert_almost_eq!(a + dur, b);
 
         let second = Duration::new(1, 0);
-        assert_eq!(a - second + second, a);
+        assert_almost_eq!(a - second + second, a);
     }
 
     #[test]
@@ -269,31 +279,31 @@ mod tests {
         let b = SystemTime::now();
         match b.duration_from_earlier(a) {
             Ok(dur) if dur == Duration::new(0, 0) => {
-                assert_eq!(a, b);
+                assert_almost_eq!(a, b);
             }
             Ok(dur) => {
                 assert!(b > a);
-                assert_eq!(b - dur, a);
-                assert_eq!(a + dur, b);
+                assert_almost_eq!(b - dur, a);
+                assert_almost_eq!(a + dur, b);
             }
             Err(dur) => {
                 let dur = dur.duration();
                 assert!(a > b);
-                assert_eq!(b + dur, a);
-                assert_eq!(b - dur, a);
+                assert_almost_eq!(b + dur, a);
+                assert_almost_eq!(b - dur, a);
             }
         }
 
         let second = Duration::new(1, 0);
-        assert_eq!(a.duration_from_earlier(a - second).unwrap(), second);
-        assert_eq!(a.duration_from_earlier(a + second).unwrap_err().duration(),
-                   second);
+        assert_almost_eq!(a.duration_from_earlier(a - second).unwrap(), second);
+        assert_almost_eq!(a.duration_from_earlier(a + second).unwrap_err()
+                           .duration(), second);
 
-        assert_eq!(a - second + second, a);
+        assert_almost_eq!(a - second + second, a);
 
         let eighty_years = second * 60 * 60 * 24 * 365 * 80;
-        assert_eq!(a - eighty_years + eighty_years, a);
-        assert_eq!(a - (eighty_years * 10) + (eighty_years * 10), a);
+        assert_almost_eq!(a - eighty_years + eighty_years, a);
+        assert_almost_eq!(a - (eighty_years * 10) + (eighty_years * 10), a);
     }
 
     #[test]