135 lines
4.3 KiB
Rust
135 lines
4.3 KiB
Rust
#![allow(clippy::unwrap_used)]
|
|
|
|
use crate::{cell::CellValue, test::util::new_empty_model};
|
|
|
|
#[test]
|
|
fn fn_accrint() {
|
|
let mut model = new_empty_model();
|
|
model._set("A1", "=DATE(2020,1,1)");
|
|
model._set("A2", "=DATE(2020,1,1)");
|
|
model._set("A3", "=DATE(2020,1,31)");
|
|
model._set("A4", "10%");
|
|
model._set("A5", "$1,000");
|
|
model._set("A6", "2");
|
|
|
|
model._set("B1", "=ACCRINT(A1,A2,A3,A4,A5,A6)");
|
|
model._set("C1", "=ACCRINT(A1)");
|
|
model._set("C2", "=ACCRINT(A1,A2,A3,A4,A5,3)");
|
|
|
|
model.evaluate();
|
|
|
|
match model.get_cell_value_by_ref("Sheet1!B1") {
|
|
Ok(CellValue::Number(v)) => {
|
|
assert!((v - 8.333333333333334).abs() < 1e-9);
|
|
}
|
|
other => unreachable!("Expected number for B1, got {:?}", other),
|
|
}
|
|
assert_eq!(model._get_text("C1"), *"#ERROR!");
|
|
assert_eq!(model._get_text("C2"), *"#NUM!");
|
|
}
|
|
|
|
#[test]
|
|
fn fn_accrint_parameters() {
|
|
let mut model = new_empty_model();
|
|
|
|
model._set("A1", "=DATE(2020,1,1)");
|
|
model._set("A2", "=DATE(2020,1,1)");
|
|
model._set("A3", "=DATE(2020,7,1)");
|
|
model._set("A4", "8%");
|
|
model._set("A5", "1000");
|
|
|
|
model._set("B1", "=ACCRINT(A1,A2,A3,A4,A5,2,0,TRUE)");
|
|
model._set("B2", "=ACCRINT(A1,A2,A3,A4,A5,2,1,TRUE)");
|
|
model._set("B3", "=ACCRINT(A1,A2,A3,A4,A5,2,4,TRUE)");
|
|
model._set("B4", "=ACCRINT(A1,A2,A3,A4,A5,1)");
|
|
model._set("B5", "=ACCRINT(A1,A2,A3,A4,A5,4)");
|
|
model._set("B6", "=ACCRINT(A1,A2,A3,A4,A5,2)");
|
|
model._set("B7", "=ACCRINT(A1,A2,A3,A4,A5,2,0)");
|
|
|
|
model.evaluate();
|
|
|
|
match model.get_cell_value_by_ref("Sheet1!B1") {
|
|
Ok(CellValue::Number(v)) => {
|
|
assert!((v - 40.0).abs() < 1e-9);
|
|
}
|
|
other => unreachable!("Expected number for B1, got {:?}", other),
|
|
}
|
|
|
|
match (
|
|
model.get_cell_value_by_ref("Sheet1!B1"),
|
|
model.get_cell_value_by_ref("Sheet1!B6"),
|
|
) {
|
|
(Ok(CellValue::Number(v1)), Ok(CellValue::Number(v2))) => {
|
|
assert!((v1 - v2).abs() < 1e-12);
|
|
}
|
|
other => unreachable!("Expected matching numbers, got {:?}", other),
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn fn_accrint_errors() {
|
|
let mut model = new_empty_model();
|
|
|
|
model._set("A1", "=DATE(2020,1,1)");
|
|
model._set("A2", "=DATE(2020,1,1)");
|
|
model._set("A3", "=DATE(2020,7,1)");
|
|
model._set("A4", "8%");
|
|
model._set("A5", "1000");
|
|
|
|
model._set("B1", "=ACCRINT()");
|
|
model._set("B2", "=ACCRINT(A1,A2,A3,A4,A5)");
|
|
model._set("B3", "=ACCRINT(A1,A2,A3,A4,A5,2,0,TRUE,1)");
|
|
model._set("C1", "=ACCRINT(A1,A2,A3,A4,A5,0)");
|
|
model._set("C2", "=ACCRINT(A1,A2,A3,A4,A5,3)");
|
|
model._set("C3", "=ACCRINT(A1,A2,A3,A4,A5,-1)");
|
|
model._set("D1", "=ACCRINT(A1,A2,A3,A4,A5,2,-1)");
|
|
model._set("D2", "=ACCRINT(A1,A2,A3,A4,A5,2,5)");
|
|
model._set("E1", "=ACCRINT(A3,A2,A1,A4,A5,2)");
|
|
model._set("E2", "=ACCRINT(A1,A3,A1,A4,A5,2)");
|
|
model._set("F1", "=ACCRINT(A1,A2,A3,A4,0,2)");
|
|
model._set("F2", "=ACCRINT(A1,A2,A3,A4,-1000,2)");
|
|
model._set("F3", "=ACCRINT(A1,A2,A3,-8%,A5,2)");
|
|
|
|
model.evaluate();
|
|
|
|
assert_eq!(model._get_text("B1"), *"#ERROR!");
|
|
assert_eq!(model._get_text("B2"), *"#ERROR!");
|
|
assert_eq!(model._get_text("B3"), *"#ERROR!");
|
|
assert_eq!(model._get_text("C1"), *"#NUM!");
|
|
assert_eq!(model._get_text("C2"), *"#NUM!");
|
|
assert_eq!(model._get_text("C3"), *"#NUM!");
|
|
assert_eq!(model._get_text("D1"), *"#NUM!");
|
|
assert_eq!(model._get_text("D2"), *"#NUM!");
|
|
assert_eq!(model._get_text("E1"), *"#NUM!");
|
|
assert_eq!(model._get_text("E2"), *"#NUM!");
|
|
assert_eq!(model._get_text("F2"), *"#NUM!");
|
|
assert_eq!(model._get_text("F3"), *"#NUM!");
|
|
|
|
match model.get_cell_value_by_ref("Sheet1!F1") {
|
|
Ok(CellValue::Number(v)) => {
|
|
assert!((v - 0.0).abs() < 1e-9);
|
|
}
|
|
other => unreachable!("Expected 0 for F1, got {:?}", other),
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn fn_accrint_combined() {
|
|
let mut model = new_empty_model();
|
|
model._set("A1", "=DATE(2018,10,15)");
|
|
model._set("A2", "=DATE(2019,2,1)");
|
|
model._set("A3", "5%");
|
|
model._set("A4", "1000");
|
|
|
|
model._set("B1", "=ACCRINT(A1,A1,A2,A3,A4,2)");
|
|
|
|
model.evaluate();
|
|
|
|
match model.get_cell_value_by_ref("Sheet1!B1") {
|
|
Ok(CellValue::Number(v)) => {
|
|
assert!((v - 14.722222222222221).abs() < 1e-9);
|
|
}
|
|
other => unreachable!("Expected number for B1, got {:?}", other),
|
|
}
|
|
}
|