From 496dc9cae4a96f3860e55aa0fafaa5a37f1dbf67 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Mon, 8 Jan 2024 07:09:37 +0000 Subject: [PATCH] Add Months::num_months() and num_years() --- src/month.rs | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/month.rs b/src/month.rs index 146a98ebe5..b486ee698f 100644 --- a/src/month.rs +++ b/src/month.rs @@ -227,6 +227,18 @@ impl Months { pub const fn new(num: u32) -> Self { Self(num) } + + /// Returns the total number of months in the `Months` instance. + #[inline] + pub const fn num_months(&self) -> u32 { + self.0 + } + + /// Returns the total number of whole years in the `Months` instance. + #[inline] + pub const fn num_years(&self) -> u32 { + self.0 / 12 + } } /// An error resulting from reading `` value with `FromStr`. @@ -298,7 +310,7 @@ mod month_serde { #[cfg(test)] mod tests { use super::Month; - use crate::{Datelike, OutOfRange, TimeZone, Utc}; + use crate::{Datelike, Months, OutOfRange, TimeZone, Utc}; #[test] fn test_month_enum_try_from() { @@ -352,6 +364,24 @@ mod tests { assert!(Month::July >= Month::May); assert!(Month::September > Month::March); } + + #[test] + fn test_months_num_months() { + assert_eq!(Months::new(0).num_months(), 0); + assert_eq!(Months::new(1).num_months(), 1); + assert_eq!(Months::new(u32::MAX).num_months(), u32::MAX); + } + + #[test] + fn test_months_num_years() { + assert_eq!(Months::new(0).num_years(), 0); + assert_eq!(Months::new(1).num_years(), 0); + assert_eq!(Months::new(11).num_years(), 0); + assert_eq!(Months::new(12).num_years(), 1); + assert_eq!(Months::new(23).num_years(), 1); + assert_eq!(Months::new(24).num_years(), 2); + assert_eq!(Months::new(u32::MAX).num_years(), u32::MAX / 12); + } #[test] #[cfg(feature = "serde")]