mirror of
https://github.com/chronotope/chrono.git
synced 2025-10-02 15:26:12 +00:00
Streamline test_date_checked_add_signed
This commit is contained in:
parent
50c0e6b93c
commit
c1cb93608e
@ -445,41 +445,40 @@ fn test_date_pred() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_date_add() {
|
fn test_date_checked_add_signed() {
|
||||||
fn check((y1, m1, d1): (i32, u32, u32), rhs: TimeDelta, ymd: Option<(i32, u32, u32)>) {
|
fn check(lhs: Option<NaiveDate>, delta: TimeDelta, rhs: Option<NaiveDate>) {
|
||||||
let lhs = NaiveDate::from_ymd_opt(y1, m1, d1).unwrap();
|
assert_eq!(lhs.unwrap().checked_add_signed(delta), rhs);
|
||||||
let sum = ymd.map(|(y, m, d)| NaiveDate::from_ymd_opt(y, m, d).unwrap());
|
assert_eq!(lhs.unwrap().checked_sub_signed(-delta), rhs);
|
||||||
assert_eq!(lhs.checked_add_signed(rhs), sum);
|
|
||||||
assert_eq!(lhs.checked_sub_signed(-rhs), sum);
|
|
||||||
}
|
}
|
||||||
|
let ymd = NaiveDate::from_ymd_opt;
|
||||||
|
|
||||||
check((2014, 1, 1), TimeDelta::zero(), Some((2014, 1, 1)));
|
check(ymd(2014, 1, 1), TimeDelta::zero(), ymd(2014, 1, 1));
|
||||||
check((2014, 1, 1), TimeDelta::try_seconds(86399).unwrap(), Some((2014, 1, 1)));
|
check(ymd(2014, 1, 1), TimeDelta::try_seconds(86399).unwrap(), ymd(2014, 1, 1));
|
||||||
// always round towards zero
|
// always round towards zero
|
||||||
check((2014, 1, 1), TimeDelta::try_seconds(-86399).unwrap(), Some((2014, 1, 1)));
|
check(ymd(2014, 1, 1), TimeDelta::try_seconds(-86399).unwrap(), ymd(2014, 1, 1));
|
||||||
check((2014, 1, 1), TimeDelta::try_days(1).unwrap(), Some((2014, 1, 2)));
|
check(ymd(2014, 1, 1), TimeDelta::try_days(1).unwrap(), ymd(2014, 1, 2));
|
||||||
check((2014, 1, 1), TimeDelta::try_days(-1).unwrap(), Some((2013, 12, 31)));
|
check(ymd(2014, 1, 1), TimeDelta::try_days(-1).unwrap(), ymd(2013, 12, 31));
|
||||||
check((2014, 1, 1), TimeDelta::try_days(364).unwrap(), Some((2014, 12, 31)));
|
check(ymd(2014, 1, 1), TimeDelta::try_days(364).unwrap(), ymd(2014, 12, 31));
|
||||||
check((2014, 1, 1), TimeDelta::try_days(365 * 4 + 1).unwrap(), Some((2018, 1, 1)));
|
check(ymd(2014, 1, 1), TimeDelta::try_days(365 * 4 + 1).unwrap(), ymd(2018, 1, 1));
|
||||||
check((2014, 1, 1), TimeDelta::try_days(365 * 400 + 97).unwrap(), Some((2414, 1, 1)));
|
check(ymd(2014, 1, 1), TimeDelta::try_days(365 * 400 + 97).unwrap(), ymd(2414, 1, 1));
|
||||||
|
|
||||||
check((-7, 1, 1), TimeDelta::try_days(365 * 12 + 3).unwrap(), Some((5, 1, 1)));
|
check(ymd(-7, 1, 1), TimeDelta::try_days(365 * 12 + 3).unwrap(), ymd(5, 1, 1));
|
||||||
|
|
||||||
// overflow check
|
// overflow check
|
||||||
check(
|
check(
|
||||||
(0, 1, 1),
|
ymd(0, 1, 1),
|
||||||
TimeDelta::try_days(MAX_DAYS_FROM_YEAR_0 as i64).unwrap(),
|
TimeDelta::try_days(MAX_DAYS_FROM_YEAR_0 as i64).unwrap(),
|
||||||
Some((MAX_YEAR, 12, 31)),
|
ymd(MAX_YEAR, 12, 31),
|
||||||
);
|
);
|
||||||
check((0, 1, 1), TimeDelta::try_days(MAX_DAYS_FROM_YEAR_0 as i64 + 1).unwrap(), None);
|
check(ymd(0, 1, 1), TimeDelta::try_days(MAX_DAYS_FROM_YEAR_0 as i64 + 1).unwrap(), None);
|
||||||
check((0, 1, 1), TimeDelta::max_value(), None);
|
check(ymd(0, 1, 1), TimeDelta::max_value(), None);
|
||||||
check(
|
check(
|
||||||
(0, 1, 1),
|
ymd(0, 1, 1),
|
||||||
TimeDelta::try_days(MIN_DAYS_FROM_YEAR_0 as i64).unwrap(),
|
TimeDelta::try_days(MIN_DAYS_FROM_YEAR_0 as i64).unwrap(),
|
||||||
Some((MIN_YEAR, 1, 1)),
|
ymd(MIN_YEAR, 1, 1),
|
||||||
);
|
);
|
||||||
check((0, 1, 1), TimeDelta::try_days(MIN_DAYS_FROM_YEAR_0 as i64 - 1).unwrap(), None);
|
check(ymd(0, 1, 1), TimeDelta::try_days(MIN_DAYS_FROM_YEAR_0 as i64 - 1).unwrap(), None);
|
||||||
check((0, 1, 1), TimeDelta::min_value(), None);
|
check(ymd(0, 1, 1), TimeDelta::min_value(), None);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -497,8 +496,16 @@ fn test_date_signed_duration_since() {
|
|||||||
check(ymd(2018, 1, 1), ymd(2014, 1, 1), TimeDelta::try_days(365 * 4 + 1).unwrap());
|
check(ymd(2018, 1, 1), ymd(2014, 1, 1), TimeDelta::try_days(365 * 4 + 1).unwrap());
|
||||||
check(ymd(2414, 1, 1), ymd(2014, 1, 1), TimeDelta::try_days(365 * 400 + 97).unwrap());
|
check(ymd(2414, 1, 1), ymd(2014, 1, 1), TimeDelta::try_days(365 * 400 + 97).unwrap());
|
||||||
|
|
||||||
check(ymd(MAX_YEAR, 12, 31), ymd(0, 1, 1), TimeDelta::try_days(MAX_DAYS_FROM_YEAR_0 as i64).unwrap());
|
check(
|
||||||
check(ymd(MIN_YEAR, 1, 1), ymd(0, 1, 1), TimeDelta::try_days(MIN_DAYS_FROM_YEAR_0 as i64).unwrap());
|
ymd(MAX_YEAR, 12, 31),
|
||||||
|
ymd(0, 1, 1),
|
||||||
|
TimeDelta::try_days(MAX_DAYS_FROM_YEAR_0 as i64).unwrap(),
|
||||||
|
);
|
||||||
|
check(
|
||||||
|
ymd(MIN_YEAR, 1, 1),
|
||||||
|
ymd(0, 1, 1),
|
||||||
|
TimeDelta::try_days(MIN_DAYS_FROM_YEAR_0 as i64).unwrap(),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user