Skip to content

Commit 261c543

Browse files
committed
other tests
1 parent ec60b5a commit 261c543

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

src/datetime/tests.rs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1437,6 +1437,65 @@ fn test_min_max_setters() {
14371437
assert_eq!(beyond_max.with_nanosecond(beyond_max.nanosecond()), Some(beyond_max));
14381438
}
14391439

1440+
#[test]
1441+
fn test_min_max_complex() {
1442+
let offset_min = FixedOffset::west_opt(2 * 60 * 60).unwrap();
1443+
let beyond_min = offset_min.from_utc_datetime(&NaiveDateTime::MIN);
1444+
let offset_max = FixedOffset::east_opt(2 * 60 * 60).unwrap();
1445+
let beyond_max = offset_max.from_utc_datetime(&NaiveDateTime::MAX);
1446+
let max_time = NaiveTime::from_hms_nano_opt(23, 59, 59, 999_999_999).unwrap();
1447+
1448+
assert_eq!(beyond_min.checked_add_days(Days::new(0)), Some(beyond_min));
1449+
assert_eq!(
1450+
beyond_min.checked_add_days(Days::new(1)),
1451+
Some(offset_min.from_utc_datetime(&(NaiveDate::MIN + Days(1)).and_time(NaiveTime::MIN)))
1452+
);
1453+
assert_eq!(beyond_min.checked_sub_days(Days::new(0)), Some(beyond_min));
1454+
assert_eq!(beyond_min.checked_sub_days(Days::new(1)), None);
1455+
assert_eq!(beyond_min.checked_add_months(Months::new(0)), Some(beyond_min));
1456+
assert_eq!(
1457+
beyond_min.checked_add_months(Months::new(1)),
1458+
Some(offset_min.from_utc_datetime(&(NaiveDate::MIN + Months(1)).and_time(NaiveTime::MIN)))
1459+
);
1460+
assert_eq!(beyond_min.checked_sub_months(Months::new(0)), Some(beyond_min));
1461+
assert_eq!(beyond_min.checked_sub_months(Months::new(1)), None);
1462+
assert_eq!(beyond_min.with_year(beyond_min.year()), Some(beyond_min));
1463+
let res = NaiveDate::MIN.with_year(2021).unwrap().and_time(NaiveTime::MIN) + offset_min;
1464+
assert_eq!(beyond_min.with_year(2020), offset_min.from_local_datetime(&res).single());
1465+
assert_eq!(
1466+
offset_min
1467+
.from_utc_datetime(
1468+
&NaiveDate::from_ymd_opt(2023, 1, 1).unwrap().and_time(NaiveTime::MIN)
1469+
)
1470+
.with_year(NaiveDate::MIN.year() - 1),
1471+
Some(beyond_min)
1472+
);
1473+
1474+
assert_eq!(beyond_max.checked_add_days(Days::new(0)), Some(beyond_max));
1475+
assert_eq!(beyond_max.checked_add_days(Days::new(1)), None);
1476+
assert_eq!(beyond_max.checked_sub_days(Days::new(0)), Some(beyond_max));
1477+
assert_eq!(
1478+
beyond_max.checked_sub_days(Days::new(1)),
1479+
Some(offset_max.from_utc_datetime(&(NaiveDate::MAX - Days(1)).and_time(max_time)))
1480+
);
1481+
assert_eq!(beyond_max.checked_add_months(Months::new(0)), Some(beyond_max));
1482+
assert_eq!(beyond_max.checked_add_months(Months::new(1)), None);
1483+
assert_eq!(beyond_max.checked_sub_months(Months::new(0)), Some(beyond_max));
1484+
assert_eq!(
1485+
beyond_max.checked_sub_months(Months::new(1)),
1486+
Some(offset_max.from_utc_datetime(&(NaiveDate::MAX - Months(1)).and_time(max_time)))
1487+
);
1488+
assert_eq!(beyond_max.with_year(beyond_max.year()), Some(beyond_max));
1489+
let res = NaiveDate::MAX.with_year(2019).unwrap().and_time(max_time) + offset_max;
1490+
assert_eq!(beyond_max.with_year(2020), offset_max.from_local_datetime(&res).single());
1491+
assert_eq!(
1492+
offset_max
1493+
.from_utc_datetime(&NaiveDate::from_ymd_opt(2023, 12, 31).unwrap().and_time(max_time))
1494+
.with_year(NaiveDate::MAX.year() + 1),
1495+
Some(beyond_max)
1496+
);
1497+
}
1498+
14401499
#[test]
14411500
#[should_panic]
14421501
fn test_local_beyond_min_datetime() {

0 commit comments

Comments
 (0)