]> git.lizzy.rs Git - rust.git/commitdiff
libtime: Fix adding negative duration to Timespec.
authorRuud van Asseldonk <dev@veniogames.com>
Wed, 3 Sep 2014 17:27:55 +0000 (19:27 +0200)
committerRuud van Asseldonk <dev@veniogames.com>
Wed, 3 Sep 2014 19:28:54 +0000 (21:28 +0200)
src/libtime/lib.rs

index 34402d01c865dfdff6fa874b266091eca4c792cc..848cd5e17b1cf516d61b67157c2a75afeabbf655 100644 (file)
@@ -103,6 +103,9 @@ fn add(&self, other: &Duration) -> Timespec {
         if nsec >= NSEC_PER_SEC {
             nsec -= NSEC_PER_SEC;
             sec += 1;
+        } else if nsec < 0 {
+            nsec += NSEC_PER_SEC;
+            sec -= 1;
         }
         Timespec::new(sec, nsec)
     }
@@ -1533,6 +1536,12 @@ fn test_timespec_add() {
         let w = u + v;
         assert_eq!(w.sec, 4);
         assert_eq!(w.nsec, 1);
+
+        let k = Timespec::new(1, 0);
+        let l = Duration::nanoseconds(-1);
+        let m = k + l;
+        assert_eq!(m.sec, 0);
+        assert_eq!(m.nsec, 999_999_999);
     }
 
     fn test_timespec_sub() {