From 38ef6b51f610ee9b9e633c8ca954de46ae2fa3da Mon Sep 17 00:00:00 2001 From: samueldple Date: Fri, 18 Oct 2019 14:49:37 +0100 Subject: [PATCH] Text equal and max between --- src/time_tuple.rs | 6 +++--- tests/date_time_tuple_tests.rs | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/time_tuple.rs b/src/time_tuple.rs index 835fe8b..87155c4 100644 --- a/src/time_tuple.rs +++ b/src/time_tuple.rs @@ -238,8 +238,8 @@ impl Duration { /// with a minute value of 90 would add an hour to the resulting tuple /// and set the minutes to 30, for example. pub fn new(h: u32, m: u32, s: u32) -> Duration { - let total_seconds = s + 60 * m + 3600 * h; - Duration::from_seconds(u64::from(total_seconds)) + let total_seconds: u64 = u64::from(s) + 60 * u64::from(m) + 3600 * u64::from(h); + Duration::from_seconds(total_seconds) } /// Same as `Duration::new()` but takes the total number of seconds @@ -271,7 +271,7 @@ impl Duration { smaller = dt2; greater = dt1; } - let days_between = greater.get_date().to_days() - greater.get_date().to_days(); + let days_between = greater.get_date().to_days() - smaller.get_date().to_days(); let time_between = if days_between == 0 { Duration::from(greater.get_time()) - Duration::from(smaller.get_time()) } else { diff --git a/tests/date_time_tuple_tests.rs b/tests/date_time_tuple_tests.rs index 51e4633..ee0c53b 100644 --- a/tests/date_time_tuple_tests.rs +++ b/tests/date_time_tuple_tests.rs @@ -2,6 +2,7 @@ extern crate date_time; use date_time::date_time_tuple::DateTimeTuple; use date_time::date_tuple::DateTuple; +use date_time::time_tuple::Duration; use date_time::time_tuple::TimeTuple; #[test] @@ -67,3 +68,27 @@ fn test_from_string() { assert!(str::parse::("2000-15-10@08:30:00").is_err()); assert!(str::parse::("2-a11111@05:a:04").is_err()); } + +#[test] +fn test_between_equal() { + assert_eq!( + Duration::new(0, 0, 0), + Duration::between( + DateTimeTuple::new(DateTuple::new(1, 2, 3).unwrap(), TimeTuple::new(4, 5, 6)), + DateTimeTuple::new(DateTuple::new(1, 2, 3).unwrap(), TimeTuple::new(4, 5, 6)) + ) + ); +} + +#[test] +fn test_between_max_cant_overflow() { + // Must not panic + Duration::between( + DateTimeTuple::new(DateTuple::new(0, 1, 1).unwrap(), TimeTuple::new(0, 0, 0)), + DateTimeTuple::new( + DateTuple::new(9999, 12, 31).unwrap(), + TimeTuple::new(23, 59, 59), + ), + ) + .to_seconds(); +}