functions: keep DATEDIF's original description, add the units
Restores "Counts whole years, months or days between two dates." and appends the units, in the multi-line form rustfmt gives a long entry. Drops the 256-argument test case: the parser already refuses more than 255 arguments, so it never reached the entry check. (993c108's message says entry "also refuses" them; it already did.) Claude-Session: https://claude.ai/code/session_01BGBBGBC2gRpQ7GDuwQ6WPt
This commit is contained in:
parent
1d1d27f9a4
commit
478f01d236
|
|
@ -219,12 +219,6 @@ fn formulas_with_the_wrong_argument_count_are_refused_on_entry() {
|
|||
assert!(e.contains(&format!("too {word} arguments")), "{input}: {e}");
|
||||
assert_eq!(v(&s, "A1"), Value::text("kept"), "{input} must not replace the cell");
|
||||
}
|
||||
// Excel's 255-argument limit applies to variadic functions too.
|
||||
let many = format!("=SUM({})", vec!["1"; 256].join(","));
|
||||
let e = s.execute("cell.set", json!({"cell": "A1", "input": many})).unwrap_err().to_string();
|
||||
assert!(e.contains("too many arguments"), "{e}");
|
||||
s.execute("cell.set", json!({"cell": "A2", "input": format!("=SUM({})", vec!["1"; 255].join(","))})).unwrap();
|
||||
assert_eq!(v(&s, "A2"), Value::Number(255.0));
|
||||
let e = s.execute("cell.set", json!({"cell": "A1", "input": "=DATEDIF(1,2)"})).unwrap_err().to_string();
|
||||
assert!(e.contains("DATEDIF(start_date, end_date, unit)"), "{e}");
|
||||
// Correct counts, optional arguments left empty, special forms, LAMBDA names and unknown
|
||||
|
|
|
|||
|
|
@ -496,7 +496,16 @@ pub(crate) fn specs() -> Vec<FnSpec> {
|
|||
f!("ISOWEEKNUM", 1, 1, DateTime, S, "ISOWEEKNUM(date)", "Returns the ISO 8601 week number of a date.", isoweeknum),
|
||||
f!("EDATE", 2, 2, DateTime, S, "EDATE(start_date, months)", "Returns the date a number of months before or after a date.", edate),
|
||||
f!("EOMONTH", 2, 2, DateTime, S, "EOMONTH(start_date, months)", "Returns the last day of the month a number of months away.", eomonth),
|
||||
f!("DATEDIF", 3, 3, DateTime, S, "DATEDIF(start_date, end_date, unit)", "Years, months or days apart. unit: Y, M, D, MD, YM or YD.", datedif),
|
||||
f!(
|
||||
"DATEDIF",
|
||||
3,
|
||||
3,
|
||||
DateTime,
|
||||
S,
|
||||
"DATEDIF(start_date, end_date, unit)",
|
||||
"Counts whole years, months or days between two dates. unit: Y, M, D, MD, YM or YD.",
|
||||
datedif
|
||||
),
|
||||
f!("DATEVALUE", 1, 1, DateTime, S, "DATEVALUE(date_text)", "Converts a date written as text into a date serial number.", datevalue),
|
||||
f!("TIMEVALUE", 1, 1, DateTime, S, "TIMEVALUE(time_text)", "Converts a time written as text into a fraction of a day.", timevalue),
|
||||
f!("DAYS", 2, 2, DateTime, S, "DAYS(end_date, start_date)", "Returns the number of days between two dates.", days),
|
||||
|
|
|
|||
Loading…
Reference in New Issue