mirror of
https://github.com/chronotope/chrono.git
synced 2025-09-28 05:21:39 +00:00
Streamline test_date_(add/sub)_days
This commit is contained in:
parent
db1c8eff16
commit
4ac0615ddb
@ -504,43 +504,45 @@ fn test_date_sub() {
|
||||
|
||||
#[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_opt(y1, m1, d1).unwrap();
|
||||
let sum = ymd.map(|(y, m, d)| NaiveDate::from_ymd_opt(y, m, d).unwrap());
|
||||
assert_eq!(lhs.checked_add_days(rhs), sum);
|
||||
fn check(lhs: Option<NaiveDate>, days: Days, rhs: Option<NaiveDate>) {
|
||||
assert_eq!(lhs.unwrap().checked_add_days(days), rhs);
|
||||
}
|
||||
let ymd = NaiveDate::from_ymd_opt;
|
||||
|
||||
check((2014, 1, 1), Days::new(0), Some((2014, 1, 1)));
|
||||
check(ymd(2014, 1, 1), Days::new(0), ymd(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(ymd(2014, 1, 1), Days::new(1), ymd(2014, 1, 2));
|
||||
check(ymd(2014, 1, 1), Days::new(364), ymd(2014, 12, 31));
|
||||
check(ymd(2014, 1, 1), Days::new(365 * 4 + 1), ymd(2018, 1, 1));
|
||||
check(ymd(2014, 1, 1), Days::new(365 * 400 + 97), ymd(2414, 1, 1));
|
||||
|
||||
check((-7, 1, 1), Days::new(365 * 12 + 3), Some((5, 1, 1)));
|
||||
check(ymd(-7, 1, 1), Days::new(365 * 12 + 3), ymd(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);
|
||||
check(ymd(0, 1, 1), Days::new(MAX_DAYS_FROM_YEAR_0.try_into().unwrap()), ymd(MAX_YEAR, 12, 31));
|
||||
check(ymd(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_opt(y1, m1, d1).unwrap();
|
||||
let rhs = NaiveDate::from_ymd_opt(y2, m2, d2).unwrap();
|
||||
assert_eq!(lhs - diff, rhs);
|
||||
fn check(lhs: Option<NaiveDate>, days: Days, rhs: Option<NaiveDate>) {
|
||||
assert_eq!(lhs.unwrap().checked_sub_days(days), rhs);
|
||||
}
|
||||
let ymd = NaiveDate::from_ymd_opt;
|
||||
|
||||
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(ymd(2014, 1, 1), Days::new(0), ymd(2014, 1, 1));
|
||||
check(ymd(2014, 1, 2), Days::new(1), ymd(2014, 1, 1));
|
||||
check(ymd(2014, 12, 31), Days::new(364), ymd(2014, 1, 1));
|
||||
check(ymd(2015, 1, 3), Days::new(365 + 2), ymd(2014, 1, 1));
|
||||
check(ymd(2018, 1, 1), Days::new(365 * 4 + 1), ymd(2014, 1, 1));
|
||||
check(ymd(2414, 1, 1), Days::new(365 * 400 + 97), ymd(2014, 1, 1));
|
||||
|
||||
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()));
|
||||
check(ymd(MAX_YEAR, 12, 31), Days::new(MAX_DAYS_FROM_YEAR_0.try_into().unwrap()), ymd(0, 1, 1));
|
||||
check(
|
||||
ymd(0, 1, 1),
|
||||
Days::new((-MIN_DAYS_FROM_YEAR_0).try_into().unwrap()),
|
||||
ymd(MIN_YEAR, 1, 1),
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
Loading…
x
Reference in New Issue
Block a user