use super::super::yearfrac_fn;
use crate::types::Value;
fn approx(a: Value, b: f64, tol: f64) -> bool {
if let Value::Number(n) = a { (n - b).abs() < tol } else { false }
}
#[test]
fn basis0_full_year_is_1() {
let args = [Value::Number(45292.0), Value::Number(45658.0), Value::Number(0.0)];
assert!(approx(yearfrac_fn(&args), 1.0, 1e-9));
}
#[test]
fn basis1_full_year_is_1() {
let args = [Value::Number(45292.0), Value::Number(45658.0), Value::Number(1.0)];
assert!(approx(yearfrac_fn(&args), 1.0, 1e-9));
}
#[test]
fn basis2_full_year_2024() {
let args = [Value::Number(45292.0), Value::Number(45658.0), Value::Number(2.0)];
assert!(approx(yearfrac_fn(&args), 366.0 / 360.0, 1e-7));
}
#[test]
fn basis3_full_year_2024() {
let args = [Value::Number(45292.0), Value::Number(45658.0), Value::Number(3.0)];
assert!(approx(yearfrac_fn(&args), 366.0 / 365.0, 1e-7));
}
#[test]
fn basis4_full_year_is_1() {
let args = [Value::Number(45292.0), Value::Number(45658.0), Value::Number(4.0)];
assert!(approx(yearfrac_fn(&args), 1.0, 1e-9));
}
#[test]
fn default_basis_omitted_equals_basis0() {
let with_basis = [Value::Number(45292.0), Value::Number(45658.0), Value::Number(0.0)];
let without_basis = [Value::Number(45292.0), Value::Number(45658.0)];
assert_eq!(yearfrac_fn(&with_basis), yearfrac_fn(&without_basis));
}