use crate::{Calendar, Weekend};
pub mod france;
mod target;
pub mod uk;
pub mod us;
pub use target::TARGET;
pub const WEEKENDS_ONLY: Calendar<'static> = Calendar {
name: "Weekends only",
weekend: Weekend::SAT_SUN,
rules: &[],
};
pub const NULL_CALENDAR: Calendar<'static> = Calendar {
name: "Null calendar",
weekend: Weekend::NONE,
rules: &[],
};
#[cfg(test)]
#[allow(clippy::unwrap_used, clippy::expect_used)]
mod tests {
use super::*;
use crate::{BusinessDayConvention, Date, Month};
#[test]
fn weekends_only_skips_weekends_and_nothing_else() {
let jul4 = Date::from_ymd(2024, Month::Jul, 4).unwrap(); assert!(WEEKENDS_ONLY.is_business_day(jul4));
let sat = Date::from_ymd(2024, Month::Jul, 6).unwrap();
assert!(!WEEKENDS_ONLY.is_business_day(sat));
assert!(!WEEKENDS_ONLY.is_business_day(sat.add_days(1).unwrap()));
assert!(!WEEKENDS_ONLY.is_holiday(sat)); }
#[test]
fn null_calendar_treats_every_day_as_business() {
let mut d = Date::from_ymd(2024, Month::Jan, 1).unwrap();
let last = Date::from_ymd(2024, Month::Dec, 31).unwrap();
while d <= last {
assert!(NULL_CALENDAR.is_business_day(d));
assert_eq!(
NULL_CALENDAR
.adjust(d, BusinessDayConvention::ModifiedFollowing)
.unwrap(),
d,
);
d = d.add_days(1).unwrap();
}
}
}