From 877139495d4c572493f2440cff038283a3ba4e5e Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Thu, 13 Nov 2014 08:48:38 -0800 Subject: [PATCH] std: Fix the return value of Duration::span The subtraction was erroneously backwards, returning negative durations! Closes #18925 --- src/librustc/util/common.rs | 2 +- src/libstd/time/duration.rs | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/librustc/util/common.rs b/src/librustc/util/common.rs index b845e507fd3..06154f68613 100644 --- a/src/librustc/util/common.rs +++ b/src/librustc/util/common.rs @@ -35,7 +35,7 @@ pub fn time(do_it: bool, what: &str, u: U, f: |U| -> T) -> T { let rv = rv.unwrap(); println!("{}time: {}.{:03} \t{}", " ".repeat(old), - dur.num_seconds(), dur.num_milliseconds(), what); + dur.num_seconds(), dur.num_milliseconds() % 1000, what); depth.replace(Some(old)); rv diff --git a/src/libstd/time/duration.rs b/src/libstd/time/duration.rs index c2d4afeb9ad..8892884045a 100644 --- a/src/libstd/time/duration.rs +++ b/src/libstd/time/duration.rs @@ -140,7 +140,7 @@ impl Duration { pub fn span(f: ||) -> Duration { let before = super::precise_time_ns(); f(); - Duration::nanoseconds((before - super::precise_time_ns()) as i64) + Duration::nanoseconds((super::precise_time_ns() - before) as i64) } /// Returns the total number of whole weeks in the duration. @@ -565,4 +565,11 @@ mod tests { assert_eq!(format!("{:30}", Duration::days(1) + Duration::milliseconds(2345)), "P1DT2.345S".to_string()); } + + #[test] + fn span() { + use io::timer::sleep; + let dur = Duration::span(|| sleep(Duration::milliseconds(5))); + assert!(dur > Duration::milliseconds(1)); + } }