use super::super::*;
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 fvschedule_empty_rates_returns_principal() {
let args = [Value::Number(1000.0), Value::Array(vec![])];
assert!(approx(fvschedule_fn(&args), 1000.0, 1e-9));
}
#[test]
fn sln_equal_cost_and_salvage_returns_zero() {
let args = [Value::Number(5000.0), Value::Number(5000.0), Value::Number(5.0)];
assert!(approx(sln_fn(&args), 0.0, 1e-9));
}
#[test]
fn xnpv_zero_rate_sums_cashflows() {
let args = [
Value::Number(0.0),
Value::Array(vec![Value::Number(-1000.0), Value::Number(1100.0)]),
Value::Array(vec![Value::Number(44927.0), Value::Number(45292.0)]),
];
assert!(approx(xnpv_fn(&args), 100.0, 1e-6));
}