use crate::{Calendar, EasterOffset, FixedDate, Month, Rule, Weekend, WeekendShift};
pub const SETTLEMENT: Calendar<'static> = Calendar {
name: "France settlement",
weekend: Weekend::SAT_SUN,
rules: &[
Rule::Fixed(FixedDate::new(Month::Jan, 1).shift(WeekendShift::None)),
Rule::Easter(EasterOffset::easter_monday()),
Rule::Fixed(FixedDate::new(Month::May, 1).shift(WeekendShift::None)),
Rule::Fixed(FixedDate::new(Month::May, 8).shift(WeekendShift::None)),
Rule::Easter(EasterOffset::ascension()),
Rule::Easter(EasterOffset::whit_monday()),
Rule::Fixed(FixedDate::new(Month::Jul, 14).shift(WeekendShift::None)),
Rule::Fixed(FixedDate::new(Month::Aug, 15).shift(WeekendShift::None)),
Rule::Fixed(FixedDate::new(Month::Nov, 1).shift(WeekendShift::None)),
Rule::Fixed(FixedDate::new(Month::Nov, 11).shift(WeekendShift::None)),
Rule::Fixed(FixedDate::new(Month::Dec, 25).shift(WeekendShift::None)),
],
};
#[cfg(test)]
#[allow(clippy::unwrap_used, clippy::expect_used)]
mod tests {
use super::*;
use crate::Date;
fn ymd(y: u16, m: Month, d: u8) -> Date {
Date::from_ymd(y, m, d).unwrap()
}
#[test]
fn france_settlement_holidays_2024() {
assert!(SETTLEMENT.is_holiday(ymd(2024, Month::Jan, 1))); assert!(SETTLEMENT.is_holiday(ymd(2024, Month::Apr, 1))); assert!(SETTLEMENT.is_holiday(ymd(2024, Month::May, 1))); assert!(SETTLEMENT.is_holiday(ymd(2024, Month::May, 8))); assert!(SETTLEMENT.is_holiday(ymd(2024, Month::May, 9))); assert!(SETTLEMENT.is_holiday(ymd(2024, Month::May, 20))); assert!(SETTLEMENT.is_holiday(ymd(2024, Month::Jul, 14))); assert!(SETTLEMENT.is_holiday(ymd(2024, Month::Aug, 15))); assert!(SETTLEMENT.is_holiday(ymd(2024, Month::Nov, 1))); assert!(SETTLEMENT.is_holiday(ymd(2024, Month::Nov, 11))); assert!(SETTLEMENT.is_holiday(ymd(2024, Month::Dec, 25))); }
#[test]
fn france_easter_anchors_shift_by_year() {
assert!(SETTLEMENT.is_holiday(ymd(2025, Month::Apr, 21)));
assert!(SETTLEMENT.is_holiday(ymd(2025, Month::May, 29)));
assert!(SETTLEMENT.is_holiday(ymd(2025, Month::Jun, 9)));
}
#[test]
fn france_no_weekend_shift() {
assert!(!SETTLEMENT.is_holiday(ymd(2024, Month::Jul, 15)));
assert!(SETTLEMENT.is_holiday(ymd(2024, Month::Jul, 14)));
assert!(!SETTLEMENT.is_business_day(ymd(2024, Month::Jul, 14)));
assert!(!SETTLEMENT.is_holiday(ymd(2022, Month::May, 2)));
}
#[test]
fn france_settlement_no_good_friday() {
assert!(!SETTLEMENT.is_holiday(ymd(2024, Month::Mar, 29)));
}
}