use super::super::sumifs_fn;
use crate::types::Value;
fn nums(ns: &[f64]) -> Value {
Value::Array(ns.iter().map(|&n| Value::Number(n)).collect())
}
#[test]
fn no_matches_returns_zero() {
let range = nums(&[1.0, 2.0, 3.0]);
let result = sumifs_fn(&[
range.clone(),
range.clone(),
Value::Text(">10".to_string()),
]);
assert_eq!(result, Value::Number(0.0));
}
#[test]
fn ne_criterion() {
let result = sumifs_fn(&[
nums(&[10.0, 20.0, 30.0]),
nums(&[1.0, 2.0, 3.0]),
Value::Text("<>2".to_string()),
]);
assert_eq!(result, Value::Number(40.0));
}
#[test]
fn empty_sum_range_returns_zero() {
let result = sumifs_fn(&[
Value::Array(vec![]),
Value::Array(vec![]),
Value::Number(1.0),
]);
assert_eq!(result, Value::Number(0.0));
}
#[test]
fn two_criteria_text_and_number() {
let result = sumifs_fn(&[
nums(&[100.0, 200.0, 300.0, 400.0]),
Value::Array(vec![
Value::Text("a".into()),
Value::Text("b".into()),
Value::Text("a".into()),
Value::Text("b".into()),
]),
Value::Text("a".to_string()),
nums(&[1.0, 2.0, 1.0, 2.0]),
Value::Number(1.0),
]);
assert_eq!(result, Value::Number(400.0));
}