Skip to content

Commit

Permalink
test: #142 - tests for calendars
Browse files Browse the repository at this point in the history
  • Loading branch information
avhz committed Nov 14, 2023
1 parent 617839b commit a667f85
Show file tree
Hide file tree
Showing 5 changed files with 140 additions and 8 deletions.
6 changes: 3 additions & 3 deletions src/iso/iso_10383.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
//! whether a date is a business day or not.

/// ISO 10383 market identifier codes enum.
#[derive(Debug, Clone, Copy)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[allow(non_camel_case_types)]
pub struct ISO_10383 {
/// The ISO 10383 operating MIC.
Expand All @@ -36,7 +36,7 @@ pub struct ISO_10383 {
}

/// Operating/segment flag.
#[derive(Debug, Clone, Copy)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum OperatingOrSegment {
/// Operating MIC.
Operating,
Expand All @@ -46,7 +46,7 @@ pub enum OperatingOrSegment {
}

/// MIC status flag.
#[derive(Debug, Clone, Copy)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[allow(non_camel_case_types)]
pub enum MICStatus {
/// Active.
Expand Down
6 changes: 3 additions & 3 deletions src/iso/iso_3166.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/// - `alpha_2`: ISO 3166-1 alpha-2 country code. e.g. US = United States
/// - `alpha_3`: ISO 3166-1 alpha-3 country code. e.g. USA = United States
/// - `numeric`: ISO 3166-1 numeric code. e.g. USA = 840
#[derive(Debug, Clone, Copy)]
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
#[allow(non_camel_case_types)]
pub struct ISO_3166 {
/// The ISO 3166-1 alpha-2 country code.
Expand Down Expand Up @@ -104,7 +104,7 @@ impl ISO_3166 {
"CU" => Some(CUBA),
"CW" => Some(CURAÇAO),
"CY" => Some(CYPRUS),
"CZ" => Some(CZECHIA),
"CZ" => Some(CZECH_REPUBLIC),
"DK" => Some(DENMARK),
"DJ" => Some(DJIBOUTI),
"DM" => Some(DOMINICA),
Expand Down Expand Up @@ -382,7 +382,7 @@ iso_3166! {
CUBA: "CU", "CUB", "192",
CURAÇAO: "CW", "CUW", "531",
CYPRUS: "CY", "CYP", "196",
CZECHIA: "CZ", "CZE", "203",
CZECH_REPUBLIC: "CZ", "CZE", "203",
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// D
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Expand Down
2 changes: 1 addition & 1 deletion src/time/calendars/czech_republic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ impl Calendar for CzechRepublic {
}

fn country_code(&self) -> crate::iso::ISO_3166 {
crate::iso::CZECHIA
crate::iso::CZECH_REPUBLIC
}

fn market_identifier_code(&self) -> crate::iso::ISO_10383 {
Expand Down
126 changes: 126 additions & 0 deletions src/time/calendars/tests.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// RustQuant: A Rust library for quantitative finance tools.
// Copyright (C) 2023 https://github.com/avhz
// Dual licensed under Apache 2.0 and MIT.
// See:
// - LICENSE-APACHE.md
// - LICENSE-MIT.md
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#[cfg(test)]
mod calendar_tests {
use crate::time::*;
use time::{macros::datetime, Month, OffsetDateTime, Weekday};

const DATE: OffsetDateTime = datetime!(2023-11-14 0:00 UTC);

const ARGENTINA: Argentina = Argentina;
const AUSTRALIA: Australia = Australia;
const AUSTRIA: Austria = Austria;
const BOTSWANA: Botswana = Botswana;
const BRAZIL: Brazil = Brazil;
const CANADA: Canada = Canada;
const CHILE: Chile = Chile;
const CZECH_REPUBLIC: CzechRepublic = CzechRepublic;
const DENMARK: Denmark = Denmark;
const FINLAND: Finland = Finland;
const FRANCE: France = France;
const GERMANY: Germany = Germany;
const HONG_KONG: HongKong = HongKong;
const UNITED_KINGDOM: UnitedKingdom = UnitedKingdom;
const UNITED_STATES: UnitedStates = UnitedStates;

#[test]
fn test_is_business_day() {
assert!(ARGENTINA.is_business_day(DATE));
assert!(AUSTRALIA.is_business_day(DATE));
assert!(AUSTRIA.is_business_day(DATE));
assert!(BOTSWANA.is_business_day(DATE));
assert!(BRAZIL.is_business_day(DATE));
assert!(CANADA.is_business_day(DATE));
assert!(CHILE.is_business_day(DATE));
assert!(CZECH_REPUBLIC.is_business_day(DATE));
assert!(DENMARK.is_business_day(DATE));
assert!(FINLAND.is_business_day(DATE));
assert!(FRANCE.is_business_day(DATE));
assert!(GERMANY.is_business_day(DATE));
assert!(HONG_KONG.is_business_day(DATE));
assert!(UNITED_KINGDOM.is_business_day(DATE));
assert!(UNITED_STATES.is_business_day(DATE));
}

#[rustfmt::skip]
#[test]
fn test_country_code() {
assert_eq!(ARGENTINA.country_code(), crate::iso::ARGENTINA);
assert_eq!(AUSTRALIA.country_code(), crate::iso::AUSTRALIA);
assert_eq!(AUSTRIA.country_code(), crate::iso::AUSTRIA);
assert_eq!(BOTSWANA.country_code(), crate::iso::BOTSWANA);
assert_eq!(BRAZIL.country_code(), crate::iso::BRAZIL);
assert_eq!(CANADA.country_code(), crate::iso::CANADA);
assert_eq!(CHILE.country_code(), crate::iso::CHILE);
assert_eq!(CZECH_REPUBLIC.country_code(), crate::iso::CZECH_REPUBLIC);
assert_eq!(DENMARK.country_code(), crate::iso::DENMARK);
assert_eq!(FINLAND.country_code(), crate::iso::FINLAND);
assert_eq!(FRANCE.country_code(), crate::iso::FRANCE);
assert_eq!(GERMANY.country_code(), crate::iso::GERMANY);
assert_eq!(HONG_KONG.country_code(), crate::iso::HONG_KONG);
assert_eq!(UNITED_KINGDOM.country_code(), crate::iso::UNITED_KINGDOM_OF_GREAT_BRITAIN_AND_NORTHERN_IRELAND);
assert_eq!(UNITED_STATES.country_code(), crate::iso::UNITED_STATES_OF_AMERICA);
}

#[test]
fn test_market_identifier_code() {
assert_eq!(ARGENTINA.market_identifier_code(), crate::iso::XBUE);
assert_eq!(AUSTRALIA.market_identifier_code(), crate::iso::XASX);
assert_eq!(AUSTRIA.market_identifier_code(), crate::iso::EXAA);
assert_eq!(BOTSWANA.market_identifier_code(), crate::iso::XBOT);
assert_eq!(BRAZIL.market_identifier_code(), crate::iso::BVMF);
assert_eq!(CANADA.market_identifier_code(), crate::iso::XCNQ);
assert_eq!(CHILE.market_identifier_code(), crate::iso::XSGO);
assert_eq!(CZECH_REPUBLIC.market_identifier_code(), crate::iso::XPRA);
assert_eq!(DENMARK.market_identifier_code(), crate::iso::XCSE);
assert_eq!(FINLAND.market_identifier_code(), crate::iso::XHEL);
assert_eq!(FRANCE.market_identifier_code(), crate::iso::XPAR);
assert_eq!(GERMANY.market_identifier_code(), crate::iso::XFRA);
assert_eq!(HONG_KONG.market_identifier_code(), crate::iso::XHKG);
assert_eq!(UNITED_KINGDOM.market_identifier_code(), crate::iso::XLON);
assert_eq!(UNITED_STATES.market_identifier_code(), crate::iso::XNYS);
}

#[rustfmt::skip]
#[test]
fn test_unpack_date() {
assert_eq!(ARGENTINA.unpack_date(DATE), (Weekday::Tuesday, 14, Month::November, 2023, 318));
assert_eq!(AUSTRALIA.unpack_date(DATE), (Weekday::Tuesday, 14, Month::November, 2023, 318));
assert_eq!(AUSTRIA.unpack_date(DATE), (Weekday::Tuesday, 14, Month::November, 2023, 318));
assert_eq!(BOTSWANA.unpack_date(DATE), (Weekday::Tuesday, 14, Month::November, 2023, 318));
assert_eq!(BRAZIL.unpack_date(DATE), (Weekday::Tuesday, 14, Month::November, 2023, 318));
assert_eq!(CANADA.unpack_date(DATE), (Weekday::Tuesday, 14, Month::November, 2023, 318));
assert_eq!(CHILE.unpack_date(DATE), (Weekday::Tuesday, 14, Month::November, 2023, 318));
assert_eq!(CZECH_REPUBLIC.unpack_date(DATE), (Weekday::Tuesday, 14, Month::November, 2023, 318));
assert_eq!(DENMARK.unpack_date(DATE), (Weekday::Tuesday, 14, Month::November, 2023, 318));
assert_eq!(FINLAND.unpack_date(DATE), (Weekday::Tuesday, 14, Month::November, 2023, 318));
assert_eq!(FRANCE.unpack_date(DATE), (Weekday::Tuesday, 14, Month::November, 2023, 318));
assert_eq!(GERMANY.unpack_date(DATE), (Weekday::Tuesday, 14, Month::November, 2023, 318));
assert_eq!(HONG_KONG.unpack_date(DATE), (Weekday::Tuesday, 14, Month::November, 2023, 318));
assert_eq!(UNITED_KINGDOM.unpack_date(DATE), (Weekday::Tuesday, 14, Month::November, 2023, 318));
assert_eq!(UNITED_STATES.unpack_date(DATE), (Weekday::Tuesday, 14, Month::November, 2023, 318));
}

// #[test]
// fn test_easter_monday() {
// assert_eq!(EASTER_MONDAYS[0][0], 98);
// assert_eq!(EASTER_MONDAYS[1][0], 91);
// }

// #[test]
// fn test_is_weekend() {
// let date = OffsetDateTime::from_unix_timestamp(1614556800);

// assert_eq!(
// crate::time::calendars::UnitedStates::is_weekend(date),
// false
// );
// }
}
8 changes: 7 additions & 1 deletion src/time/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@

pub use crate::time::{
calendar::*,
calendars::{australia::*, austria::*, canada::*, united_kingdom::*, united_states::*},
calendars::{
argentina::*, australia::*, austria::*, botswana::*, brazil::*, canada::*, chile::*,
china::*, czech_republic::*, denmark::*, finland::*, france::*, germany::*, hong_kong::*,
united_kingdom::*, united_states::*,
},
constants::*,
conventions::*,
daycount::*,
Expand Down Expand Up @@ -59,6 +63,8 @@ pub mod calendars {
pub mod germany;
/// Hong Kong settlement calendar.
pub mod hong_kong;
/// Calendar test module.
mod tests;
/// UK settlement calendar.
pub mod united_kingdom;
/// USA settlement calendar.
Expand Down

0 comments on commit a667f85

Please sign in to comment.