use crate::currency::Currency;
use crate::indexes::inflationindex::YoYInflationIndex;
use crate::indexes::region::Region;
use crate::settings::Settings;
use crate::shared::Shared;
use crate::time::date::Date;
use crate::time::frequency::Frequency;
use crate::time::period::Period;
pub struct YyGenericCpi;
impl YyGenericCpi {
#[allow(clippy::new_ret_no_self)]
pub fn new(
frequency: Frequency,
revised: bool,
availability_lag: Period,
currency: Currency,
settings: Shared<Settings<Date>>,
) -> YoYInflationIndex {
YoYInflationIndex::new(
"YY_CPI".into(),
Region::new("Generic", "GENERIC"),
revised,
frequency,
availability_lag,
currency,
settings,
)
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::indexes::index::Index;
use crate::indexes::inflationindex::InflationIndex;
use crate::shared::shared;
use crate::time::timeunit::TimeUnit;
#[test]
fn construction_matches_the_cpp_header() {
let index = YyGenericCpi::new(
Frequency::Monthly,
false,
Period::new(3, TimeUnit::Months),
Currency::eur(),
shared(Settings::<Date>::new()),
);
assert_eq!(index.name(), "Generic YY_CPI");
assert_eq!(index.region().name(), "Generic");
assert_eq!(index.region().code(), "GENERIC");
assert_eq!(index.frequency(), Frequency::Monthly);
assert!(!index.revised());
assert!(!index.ratio());
assert!(index.underlying_index().is_none());
assert_eq!(index.availability_lag(), Period::new(3, TimeUnit::Months));
assert_eq!(index.currency().code(), "EUR");
}
}