* merge networkdays, networkdays.intl #33 * merge time, timevalue, hour, minute, second #35 * merge datedif, datevalue #36 * merge days, days360, weekday, weeknum, workday, workday.intl, yearfrac, isoweeknum #41 * from excel helper * fix build * date time macros * de-dupe weekend * serial helper * de-dupe now today * weekend pattern enum * remove unused clippy wrong self * fix docs * add test coverage * fix build * fix cursor comment * PR coments + xlsx date time
61 lines
1.6 KiB
Rust
61 lines
1.6 KiB
Rust
#![allow(clippy::panic)]
|
|
use crate::{cell::CellValue, test::util::new_empty_model};
|
|
|
|
#[test]
|
|
fn test_yearfrac_basis_2_actual_360() {
|
|
let mut model = new_empty_model();
|
|
|
|
// Non-leap span of exactly 360 days should result in 1.0
|
|
model._set("A1", "=YEARFRAC(44561,44921,2)");
|
|
|
|
// Leap-year span of 366 days: Jan 1 2020 → Jan 1 2021
|
|
model._set("A2", "=YEARFRAC(43831,44197,2)");
|
|
|
|
// Reverse order should yield negative value
|
|
model._set("A3", "=YEARFRAC(44921,44561,2)");
|
|
|
|
model.evaluate();
|
|
|
|
// 360/360
|
|
assert_eq!(model._get_text("A1"), *"1");
|
|
|
|
// 366/360 ≈ 1.0166666667 (tolerance 1e-10)
|
|
if let Ok(CellValue::Number(v)) = model.get_cell_value_by_ref("Sheet1!A2") {
|
|
assert!((v - 1.016_666_666_7).abs() < 1e-10);
|
|
} else {
|
|
panic!("Expected numeric value in A2");
|
|
}
|
|
|
|
// Negative symmetric of A1
|
|
assert_eq!(model._get_text("A3"), *"-1");
|
|
}
|
|
|
|
#[test]
|
|
fn test_yearfrac_basis_3_actual_365() {
|
|
let mut model = new_empty_model();
|
|
|
|
// Non-leap span of exactly 365 days should result in 1.0
|
|
model._set("B1", "=YEARFRAC(44561,44926,3)");
|
|
|
|
// Leap-year span of 366 days
|
|
model._set("B2", "=YEARFRAC(43831,44197,3)");
|
|
|
|
// Same date should be 0
|
|
model._set("B3", "=YEARFRAC(44561,44561,3)");
|
|
|
|
model.evaluate();
|
|
|
|
// 365/365
|
|
assert_eq!(model._get_text("B1"), *"1");
|
|
|
|
// 366/365 ≈ 1.002739726 (tolerance 1e-10)
|
|
if let Ok(CellValue::Number(v)) = model.get_cell_value_by_ref("Sheet1!B2") {
|
|
assert!((v - 1.002_739_726).abs() < 1e-10);
|
|
} else {
|
|
panic!("Expected numeric value in B2");
|
|
}
|
|
|
|
// Same date
|
|
assert_eq!(model._get_text("B3"), *"0");
|
|
}
|