use crate::preferences::CalendarAlgorithm;
use crate::types::Month;
use crate::Calendar;
use crate::Date;
fn extended_epoch<C: Calendar>(c: &C) -> Option<i32> {
Some(match c.calendar_algorithm()?.as_str() {
"buddhist" => -543,
"chinese" => 0,
"coptic" => 283,
"dangi" => 0,
"ethioaa" => -5493,
"ethiopic" => 7,
"gregory" => 0,
"hebrew" => -3761,
"hijri-civil" => 621,
"hijri-tbla" => 621,
"hijri-umalqura" => 621,
"indian" => 78,
"japanese" => 0,
"persian" => 621,
"roc" => 1911,
_ => return None,
})
}
super::test_all_cals!(
fn extended_year<C: Calendar + Copy>(cal: C) {
let Some(extended_epoch) = extended_epoch(&cal) else {
return;
};
let date_in_epoch_year = Date::try_new(0.into(), Month::new(1), 1, cal).unwrap();
let iso_date_in_epoch_year = date_in_epoch_year.to_calendar(crate::cal::Iso);
assert_eq!(
iso_date_in_epoch_year.year().extended_year(),
extended_epoch,
"Extended year for {date_in_epoch_year:?} should be {extended_epoch}"
);
let iso_date_in_2025 = Date::try_new_iso(2025, 1, 1).unwrap();
let date_in_2025 = iso_date_in_2025.to_calendar(cal);
if matches!(cal.calendar_algorithm(), Some(CalendarAlgorithm::Japanese)) {
assert_eq!(
date_in_2025.year().extended_year(),
2025,
"Extended year for {date_in_2025:?} should be 2025"
);
} else {
let expected = date_in_2025.year().era_year_or_related_iso();
assert_eq!(
date_in_2025.year().extended_year(),
expected,
"Extended year for {date_in_2025:?} should be {expected}"
);
}
}
);