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_half_year_is_0_5() {
let args = [Value::Number(45292.0), Value::Number(45474.0), Value::Number(0.0)];
assert!(approx(yearfrac_fn(&args), 0.5, 1e-9));
}
#[test]
fn basis0_same_day_is_zero() {
let args = [Value::Number(45458.0), Value::Number(45458.0), Value::Number(0.0)];
assert!(approx(yearfrac_fn(&args), 0.0, 1e-9));
}
#[test]
fn basis1_leap_year_2020_to_2021() {
let args = [Value::Number(43831.0), Value::Number(44197.0), Value::Number(1.0)];
assert!(approx(yearfrac_fn(&args), 1.0, 1e-9));
}
#[test]
fn basis1_non_leap_year_2023_to_2024() {
let args = [Value::Number(44927.0), Value::Number(45292.0), Value::Number(1.0)];
assert!(approx(yearfrac_fn(&args), 1.0, 1e-9));
}
#[test]
fn basis1_partial_leap_year() {
let args = [Value::Number(45292.0), Value::Number(45474.0), Value::Number(1.0)];
assert!(approx(yearfrac_fn(&args), 182.0 / 366.0, 1e-9));
}
#[test]
fn basis1_same_day_is_zero() {
let args = [Value::Number(45458.0), Value::Number(45458.0), Value::Number(1.0)];
assert!(approx(yearfrac_fn(&args), 0.0, 1e-9));
}