merge accrint, accrintm #58
This commit is contained in:
committed by
Nicolás Hatcher
parent
050677f905
commit
15b67323ed
134
base/src/test/test_fn_accrint.rs
Normal file
134
base/src/test/test_fn_accrint.rs
Normal file
@@ -0,0 +1,134 @@
|
||||
#![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),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user