Skip to content

Commit

Permalink
duplicate add/sub days tests
Browse files Browse the repository at this point in the history
  • Loading branch information
esheppa authored and djc committed Aug 29, 2022
1 parent 9a2ba95 commit 42ca8ca
Showing 1 changed file with 50 additions and 2 deletions.
52 changes: 50 additions & 2 deletions src/naive/date.rs
Expand Up @@ -2235,11 +2235,14 @@ mod serde {
#[cfg(test)]
mod tests {
use super::{
Months, NaiveDate, MAX_DAYS_FROM_YEAR_0, MAX_YEAR, MIN_DAYS_FROM_YEAR_0, MIN_YEAR,
Days, Months, NaiveDate, MAX_DAYS_FROM_YEAR_0, MAX_YEAR, MIN_DAYS_FROM_YEAR_0, MIN_YEAR,
};
use crate::oldtime::Duration;
use crate::{Datelike, Weekday};
use std::{i32, u32};
use std::{
convert::{TryFrom, TryInto},
i32, u32,
};

#[test]
fn diff_months() {
Expand Down Expand Up @@ -2682,6 +2685,51 @@ mod tests {
check((MIN_YEAR, 1, 1), (0, 1, 1), Duration::days(MIN_DAYS_FROM_YEAR_0 as i64));
}

#[test]
fn test_date_add_days() {
fn check((y1, m1, d1): (i32, u32, u32), rhs: Days, ymd: Option<(i32, u32, u32)>) {
let lhs = NaiveDate::from_ymd(y1, m1, d1);
let sum = ymd.map(|(y, m, d)| NaiveDate::from_ymd(y, m, d));
assert_eq!(lhs.checked_add_days(rhs), sum);
}

check((2014, 1, 1), Days::new(0), Some((2014, 1, 1)));
// always round towards zero
check((2014, 1, 1), Days::new(1), Some((2014, 1, 2)));
check((2014, 1, 1), Days::new(364), Some((2014, 12, 31)));
check((2014, 1, 1), Days::new(365 * 4 + 1), Some((2018, 1, 1)));
check((2014, 1, 1), Days::new(365 * 400 + 97), Some((2414, 1, 1)));

check((-7, 1, 1), Days::new(365 * 12 + 3), Some((5, 1, 1)));

// overflow check
check(
(0, 1, 1),
Days::new(MAX_DAYS_FROM_YEAR_0.try_into().unwrap()),
Some((MAX_YEAR, 12, 31)),
);
check((0, 1, 1), Days::new(u64::try_from(MAX_DAYS_FROM_YEAR_0).unwrap() + 1), None);
}

#[test]
fn test_date_sub_days() {
fn check((y1, m1, d1): (i32, u32, u32), (y2, m2, d2): (i32, u32, u32), diff: Days) {
let lhs = NaiveDate::from_ymd(y1, m1, d1);
let rhs = NaiveDate::from_ymd(y2, m2, d2);
assert_eq!(lhs - diff, rhs);
}

check((2014, 1, 1), (2014, 1, 1), Days::new(0));
check((2014, 1, 2), (2014, 1, 1), Days::new(1));
check((2014, 12, 31), (2014, 1, 1), Days::new(364));
check((2015, 1, 3), (2014, 1, 1), Days::new(365 + 2));
check((2018, 1, 1), (2014, 1, 1), Days::new(365 * 4 + 1));
check((2414, 1, 1), (2014, 1, 1), Days::new(365 * 400 + 97));

check((MAX_YEAR, 12, 31), (0, 1, 1), Days::new(MAX_DAYS_FROM_YEAR_0.try_into().unwrap()));
check((0, 1, 1), (MIN_YEAR, 1, 1), Days::new((-MIN_DAYS_FROM_YEAR_0).try_into().unwrap()));
}

#[test]
fn test_date_addassignment() {
let ymd = NaiveDate::from_ymd;
Expand Down

0 comments on commit 42ca8ca

Please sign in to comment.