#![cfg(feature = "chrono")]
use crate::{errors::TryFromDateError, Calendar, Date, Month, Weekday};
use chrono::{naive::NaiveDate, Datelike};
#[test]
fn convert_gregorian_to_chrono() {
let date = Calendar::GREGORIAN.at_ymd(2023, Month::May, 2).unwrap();
let chdate = NaiveDate::try_from(date).unwrap();
assert_eq!(chdate.year(), 2023);
assert_eq!(chdate.month(), 5);
assert_eq!(chdate.day(), 2);
}
#[test]
fn convert_julian_to_chrono() {
let date = Calendar::JULIAN.at_ymd(2023, Month::May, 2).unwrap();
let chdate = NaiveDate::try_from(date).unwrap();
assert_eq!(chdate.year(), 2023);
assert_eq!(chdate.month(), 5);
assert_eq!(chdate.day(), 15);
}
#[test]
fn convert_pre_reform_to_chrono() {
let date = Calendar::REFORM1582.last_julian_date().unwrap();
let chdate = NaiveDate::try_from(date).unwrap();
assert_eq!(chdate.year(), 1582);
assert_eq!(chdate.month(), 10);
assert_eq!(chdate.day(), 14);
}
#[test]
fn convert_post_reform_to_chrono() {
let date = Calendar::REFORM1582.first_gregorian_date().unwrap();
let chdate = NaiveDate::try_from(date).unwrap();
assert_eq!(chdate.year(), 1582);
assert_eq!(chdate.month(), 10);
assert_eq!(chdate.day(), 15);
}
#[test]
fn convert_to_min_chrono() {
let date = Calendar::GREGORIAN
.at_ymd(-262143, Month::January, 1)
.unwrap();
let chdate = NaiveDate::try_from(date).unwrap();
assert_eq!(chdate.year(), -262143);
assert_eq!(chdate.month(), 1);
assert_eq!(chdate.day(), 1);
}
#[test]
fn convert_pre_min_chrono() {
let date = Calendar::GREGORIAN
.at_ymd(-262144, Month::December, 31)
.unwrap();
assert_eq!(NaiveDate::try_from(date), Err(TryFromDateError));
}
#[test]
fn convert_to_max_chrono() {
let date = Calendar::GREGORIAN
.at_ymd(262142, Month::December, 31)
.unwrap();
let chdate = NaiveDate::try_from(date).unwrap();
assert_eq!(chdate.year(), 262142);
assert_eq!(chdate.month(), 12);
assert_eq!(chdate.day(), 31);
}
#[test]
fn convert_post_max_chrono() {
let date = Calendar::GREGORIAN
.at_ymd(262143, Month::January, 1)
.unwrap();
assert_eq!(NaiveDate::try_from(date), Err(TryFromDateError));
}
#[test]
fn convert_from_chrono() {
let chdate = NaiveDate::from_ymd_opt(2023, 5, 2).unwrap();
let date = Date::from(chdate);
assert_eq!(date.calendar(), Calendar::GREGORIAN);
assert_eq!(date.year(), 2023);
assert_eq!(date.month(), Month::May);
assert_eq!(date.day(), 2);
}
#[test]
fn convert_pre_gregorian_from_chrono() {
let chdate = NaiveDate::from_ymd_opt(1582, 10, 4).unwrap();
let date = Date::from(chdate);
assert_eq!(date.calendar(), Calendar::GREGORIAN);
assert_eq!(date.year(), 1582);
assert_eq!(date.month(), Month::October);
assert_eq!(date.day(), 4);
}
#[test]
fn convert_from_min_chrono() {
let date = Date::from(NaiveDate::MIN);
assert_eq!(date.calendar(), Calendar::GREGORIAN);
assert_eq!(date.year(), -262143);
assert_eq!(date.month(), Month::January);
assert_eq!(date.day(), 1);
}
#[test]
fn convert_from_max_chrono() {
let date = Date::from(NaiveDate::MAX);
assert_eq!(date.calendar(), Calendar::GREGORIAN);
assert_eq!(date.year(), 262142);
assert_eq!(date.month(), Month::December);
assert_eq!(date.day(), 31);
}
#[test]
fn convert_january() {
assert_eq!(chrono::Month::from(Month::January), chrono::Month::January);
assert_eq!(Month::from(chrono::Month::January), Month::January);
}
#[test]
fn convert_february() {
assert_eq!(
chrono::Month::from(Month::February),
chrono::Month::February
);
assert_eq!(Month::from(chrono::Month::February), Month::February);
}
#[test]
fn convert_march() {
assert_eq!(chrono::Month::from(Month::March), chrono::Month::March);
assert_eq!(Month::from(chrono::Month::March), Month::March);
}
#[test]
fn convert_april() {
assert_eq!(chrono::Month::from(Month::April), chrono::Month::April);
assert_eq!(Month::from(chrono::Month::April), Month::April);
}
#[test]
fn convert_may() {
assert_eq!(chrono::Month::from(Month::May), chrono::Month::May);
assert_eq!(Month::from(chrono::Month::May), Month::May);
}
#[test]
fn convert_june() {
assert_eq!(chrono::Month::from(Month::June), chrono::Month::June);
assert_eq!(Month::from(chrono::Month::June), Month::June);
}
#[test]
fn convert_july() {
assert_eq!(chrono::Month::from(Month::July), chrono::Month::July);
assert_eq!(Month::from(chrono::Month::July), Month::July);
}
#[test]
fn convert_august() {
assert_eq!(chrono::Month::from(Month::August), chrono::Month::August);
assert_eq!(Month::from(chrono::Month::August), Month::August);
}
#[test]
fn convert_september() {
assert_eq!(
chrono::Month::from(Month::September),
chrono::Month::September
);
assert_eq!(Month::from(chrono::Month::September), Month::September);
}
#[test]
fn convert_october() {
assert_eq!(chrono::Month::from(Month::October), chrono::Month::October);
assert_eq!(Month::from(chrono::Month::October), Month::October);
}
#[test]
fn convert_november() {
assert_eq!(
chrono::Month::from(Month::November),
chrono::Month::November
);
assert_eq!(Month::from(chrono::Month::November), Month::November);
}
#[test]
fn convert_december() {
assert_eq!(
chrono::Month::from(Month::December),
chrono::Month::December
);
assert_eq!(Month::from(chrono::Month::December), Month::December);
}
#[test]
fn convert_monday() {
assert_eq!(chrono::Weekday::from(Weekday::Monday), chrono::Weekday::Mon);
assert_eq!(Weekday::from(chrono::Weekday::Mon), Weekday::Monday);
}
#[test]
fn convert_tuesday() {
assert_eq!(
chrono::Weekday::from(Weekday::Tuesday),
chrono::Weekday::Tue
);
assert_eq!(Weekday::from(chrono::Weekday::Tue), Weekday::Tuesday);
}
#[test]
fn convert_wednesday() {
assert_eq!(
chrono::Weekday::from(Weekday::Wednesday),
chrono::Weekday::Wed
);
assert_eq!(Weekday::from(chrono::Weekday::Wed), Weekday::Wednesday);
}
#[test]
fn convert_thursday() {
assert_eq!(
chrono::Weekday::from(Weekday::Thursday),
chrono::Weekday::Thu
);
assert_eq!(Weekday::from(chrono::Weekday::Thu), Weekday::Thursday);
}
#[test]
fn convert_friday() {
assert_eq!(chrono::Weekday::from(Weekday::Friday), chrono::Weekday::Fri);
assert_eq!(Weekday::from(chrono::Weekday::Fri), Weekday::Friday);
}
#[test]
fn convert_saturday() {
assert_eq!(
chrono::Weekday::from(Weekday::Saturday),
chrono::Weekday::Sat
);
assert_eq!(Weekday::from(chrono::Weekday::Sat), Weekday::Saturday);
}
#[test]
fn convert_sunday() {
assert_eq!(chrono::Weekday::from(Weekday::Sunday), chrono::Weekday::Sun);
assert_eq!(Weekday::from(chrono::Weekday::Sun), Weekday::Sunday);
}