use super::super::*;
use crate::types::{ErrorKind, Value};
#[test]
fn mirr_wrong_arg_count() {
let args = [
Value::Array(vec![Value::Number(-1000.0), Value::Number(300.0)]),
Value::Number(0.1),
];
assert_eq!(mirr_fn(&args), Value::Error(ErrorKind::NA));
}
#[test]
fn mirr_too_many_args() {
let args = [
Value::Array(vec![Value::Number(-1000.0), Value::Number(300.0)]),
Value::Number(0.1),
Value::Number(0.12),
Value::Number(0.0),
];
assert_eq!(mirr_fn(&args), Value::Error(ErrorKind::NA));
}
#[test]
fn ipmt_too_few_args() {
let args = [Value::Number(0.1), Value::Number(1.0), Value::Number(12.0)];
assert_eq!(ipmt_fn(&args), Value::Error(ErrorKind::NA));
}
#[test]
fn ipmt_period_out_of_range() {
let args = [
Value::Number(0.1),
Value::Number(13.0), Value::Number(12.0),
Value::Number(10000.0),
];
assert_eq!(ipmt_fn(&args), Value::Error(ErrorKind::Num));
}
#[test]
fn sln_zero_life() {
let args = [
Value::Number(10000.0),
Value::Number(1000.0),
Value::Number(0.0),
];
assert_eq!(sln_fn(&args), Value::Error(ErrorKind::DivByZero));
}
#[test]
fn sln_too_few_args() {
let args = [Value::Number(10000.0), Value::Number(1000.0)];
assert_eq!(sln_fn(&args), Value::Error(ErrorKind::NA));
}
#[test]
fn fvschedule_too_few_args() {
let args = [Value::Number(1000.0)];
assert_eq!(fvschedule_fn(&args), Value::Error(ErrorKind::NA));
}
#[test]
fn xnpv_too_few_args() {
let args = [
Value::Number(0.1),
Value::Array(vec![Value::Number(-1000.0), Value::Number(1100.0)]),
];
assert_eq!(xnpv_fn(&args), Value::Error(ErrorKind::NA));
}
#[test]
fn xnpv_mismatched_lengths() {
let args = [
Value::Number(0.1),
Value::Array(vec![Value::Number(-1000.0), Value::Number(1100.0)]),
Value::Array(vec![Value::Number(44927.0)]),
];
assert_eq!(xnpv_fn(&args), Value::Error(ErrorKind::Num));
}