122 lines
3.3 KiB
Rust
122 lines
3.3 KiB
Rust
#![allow(clippy::unwrap_used)]
|
|
|
|
use crate::expressions::types::{Area, CellReferenceIndex};
|
|
use crate::test::util::new_empty_model;
|
|
|
|
#[test]
|
|
fn test_forward_references() {
|
|
let mut model = new_empty_model();
|
|
|
|
// test single ref changed nd not changed
|
|
model._set("H8", "=F6*G9");
|
|
// tests areas
|
|
model._set("H9", "=SUM(D4:F6)");
|
|
// absolute coordinates
|
|
model._set("H10", "=$F$6");
|
|
// area larger than the source area
|
|
model._set("H11", "=SUM(D3:F6)");
|
|
// Test arguments and concat
|
|
model._set("H12", "=SUM(F6, D4:F6) & D4");
|
|
// Test range operator. This is syntax error for now.
|
|
// model._set("H13", "=SUM(D4:INDEX(D4:F5,4,2))");
|
|
// Test operations
|
|
model._set("H14", "=-D4+D5*F6/F5");
|
|
|
|
model.evaluate();
|
|
|
|
// Source Area is D4:F6
|
|
let source_area = &Area {
|
|
sheet: 0,
|
|
row: 4,
|
|
column: 4,
|
|
width: 3,
|
|
height: 3,
|
|
};
|
|
|
|
// We paste in B10
|
|
let target_row = 10;
|
|
let target_column = 2;
|
|
let result = model.forward_references(
|
|
source_area,
|
|
&CellReferenceIndex {
|
|
sheet: 0,
|
|
row: target_row,
|
|
column: target_column,
|
|
},
|
|
);
|
|
assert!(result.is_ok());
|
|
model.evaluate();
|
|
|
|
assert_eq!(model._get_formula("H8"), "=D12*G9");
|
|
assert_eq!(model._get_formula("H9"), "=SUM(B10:D12)");
|
|
assert_eq!(model._get_formula("H10"), "=$D$12");
|
|
|
|
assert_eq!(model._get_formula("H11"), "=SUM(D3:F6)");
|
|
assert_eq!(model._get_formula("H12"), "=SUM(D12,B10:D12)&B10");
|
|
// assert_eq!(model._get_formula("H13"), "=SUM(B10:INDEX(B10:D11,4,2))");
|
|
assert_eq!(model._get_formula("H14"), "=-B10+B11*D12/D11");
|
|
}
|
|
|
|
#[test]
|
|
fn test_different_sheet() {
|
|
let mut model = new_empty_model();
|
|
|
|
// test single ref changed not changed
|
|
model._set("H8", "=F6*G9");
|
|
// tests areas
|
|
model._set("H9", "=SUM(D4:F6)");
|
|
// absolute coordinates
|
|
model._set("H10", "=$F$6");
|
|
// area larger than the source area
|
|
model._set("H11", "=SUM(D3:F6)");
|
|
// Test arguments and concat
|
|
model._set("H12", "=SUM(F6, D4:F6) & D4");
|
|
// Test range operator. This is syntax error for now.
|
|
// model._set("H13", "=SUM(D4:INDEX(D4:F5,4,2))");
|
|
// Test operations
|
|
model._set("H14", "=-D4+D5*F6/F5");
|
|
|
|
// Adds a new sheet
|
|
assert!(model.add_sheet("Sheet2").is_ok());
|
|
|
|
model.evaluate();
|
|
|
|
// Source Area is D4:F6
|
|
let source_area = &Area {
|
|
sheet: 0,
|
|
row: 4,
|
|
column: 4,
|
|
width: 3,
|
|
height: 3,
|
|
};
|
|
|
|
// We paste in Sheet2!B10
|
|
let target_row = 10;
|
|
let target_column = 2;
|
|
let result = model.forward_references(
|
|
source_area,
|
|
&CellReferenceIndex {
|
|
sheet: 1,
|
|
row: target_row,
|
|
column: target_column,
|
|
},
|
|
);
|
|
assert!(result.is_ok());
|
|
model.evaluate();
|
|
|
|
assert_eq!(model._get_formula("H8"), "=Sheet2!D12*G9");
|
|
assert_eq!(model._get_formula("H9"), "=SUM(Sheet2!B10:D12)");
|
|
assert_eq!(model._get_formula("H10"), "=Sheet2!$D$12");
|
|
|
|
assert_eq!(model._get_formula("H11"), "=SUM(D3:F6)");
|
|
assert_eq!(
|
|
model._get_formula("H12"),
|
|
"=SUM(Sheet2!D12,Sheet2!B10:D12)&Sheet2!B10"
|
|
);
|
|
// assert_eq!(model._get_formula("H13"), "=SUM(B10:INDEX(B10:D11,4,2))");
|
|
assert_eq!(
|
|
model._get_formula("H14"),
|
|
"=-Sheet2!B10+Sheet2!B11*Sheet2!D12/Sheet2!D11"
|
|
);
|
|
}
|