From d4a2289826a2e48fc8db8aac8c0d73c016b58a41 Mon Sep 17 00:00:00 2001 From: Andrew Fillmore Date: Tue, 10 Dec 2024 14:34:59 -0800 Subject: [PATCH] Add GEOMEAN .xlsx, Update .md files, and Run `cargo fmt` --- base/src/functions/statistical.rs | 4 ++-- base/src/test/mod.rs | 2 +- docs/src/functions/statistical.md | 28 +++++++++++----------- docs/src/functions/statistical/geomean.md | 3 +-- xlsx/tests/calc_tests/GEOMEAN.xlsx | Bin 0 -> 13322 bytes 5 files changed, 18 insertions(+), 19 deletions(-) create mode 100644 xlsx/tests/calc_tests/GEOMEAN.xlsx diff --git a/base/src/functions/statistical.rs b/base/src/functions/statistical.rs index a7d0825..140e6b8 100644 --- a/base/src/functions/statistical.rs +++ b/base/src/functions/statistical.rs @@ -636,7 +636,7 @@ impl Model { CalcResult::Number(max) } - pub(crate) fn fn_geomean(&mut self, args: &[Node], cell: CellReferenceIndex) -> CalcResult{ + pub(crate) fn fn_geomean(&mut self, args: &[Node], cell: CellReferenceIndex) -> CalcResult { if args.is_empty() { return CalcResult::new_args_number_error(cell); } @@ -714,6 +714,6 @@ impl Model { message: "Division by Zero".to_string(), }; } - CalcResult::Number(product.powf(1.0/count)) + CalcResult::Number(product.powf(1.0 / count)) } } diff --git a/base/src/test/mod.rs b/base/src/test/mod.rs index 7edb7f3..9f67c79 100644 --- a/base/src/test/mod.rs +++ b/base/src/test/mod.rs @@ -52,6 +52,7 @@ mod test_escape_quotes; mod test_extend; mod test_fn_type; mod test_frozen_rows_and_columns; +mod test_geomean; mod test_get_cell_content; mod test_issue_155; mod test_percentage; @@ -59,4 +60,3 @@ mod test_set_functions_error_handling; mod test_today; mod test_types; mod user_model; -mod test_geomean; diff --git a/docs/src/functions/statistical.md b/docs/src/functions/statistical.md index 9bd1909..6842212 100644 --- a/docs/src/functions/statistical.md +++ b/docs/src/functions/statistical.md @@ -9,13 +9,13 @@ lang: en-US At the moment IronCalc only supports a few function in this section. You can track the progress in this [GitHub issue](https://github.com/ironcalc/IronCalc/issues/55). -| Function | Status | Documentation | -| ------------------------ | ---------------------------------------------- | ------------- | +| Function | Status | Documentation | +| ------------------------ |--------------------------------------------------| ------------- | | AVEDEV | | – | -| AVERAGE | | – | -| AVERAGEA | | – | -| AVERAGEIF | | – | -| AVERAGEIFS | | – | +| AVERAGE | | – | +| AVERAGEA | | – | +| AVERAGEIF | | – | +| AVERAGEIFS | | – | | BETA.DIST | | – | | BETA.INV | | – | | BINOM.DIST | | – | @@ -29,11 +29,11 @@ You can track the progress in this [GitHub issue](https://github.com/ironcalc/Ir | CONFIDENCE.NORM | | – | | CONFIDENCE.T | | – | | CORREL | | – | -| COUNT | | – | -| COUNTA | | – | -| COUNTBLANK | | – | -| COUNTIF | | – | -| COUNTIFS | | – | +| COUNT | | – | +| COUNTA | | – | +| COUNTBLANK | | – | +| COUNTIF | | – | +| COUNTIFS | | – | | COVARIANCE.P | | – | | COVARIANCE.S | | – | | DEVSQ | | – | @@ -58,7 +58,7 @@ You can track the progress in this [GitHub issue](https://github.com/ironcalc/Ir | GAMMALN | | – | | GAMMALN.PRECISE | | – | | GAUSS | | – | -| GEOMEAN | | – | +| GEOMEAN | | – | | GROWTH | | – | | HARMEAN | | – | | HYPGEOM.DIST | | – | @@ -69,9 +69,9 @@ You can track the progress in this [GitHub issue](https://github.com/ironcalc/Ir | LOGEST | | – | | LOGNORM.DIST | | – | | LOGNORM.INV | | – | -| MAX | | – | +| MAX | | – | | MAXA | | – | -| MAXIFS | | – | +| MAXIFS | | – | | MEDIAN | | – | | MODE.MULT | | – | | MODE.SNGL | | – | diff --git a/docs/src/functions/statistical/geomean.md b/docs/src/functions/statistical/geomean.md index fc2cf32..322000e 100644 --- a/docs/src/functions/statistical/geomean.md +++ b/docs/src/functions/statistical/geomean.md @@ -7,6 +7,5 @@ lang: en-US # GEOMEAN ::: warning -🚧 This function is not yet available in IronCalc. -[Follow development here](https://github.com/ironcalc/IronCalc/labels/Functions) +🚧 This function is implemented but currently lacks detailed documentation. For guidance, you may refer to the equivalent functionality in [Microsoft Excel documentation](https://support.microsoft.com/en-us/office/excel-functions-by-category-5f91f4e9-7b42-46d2-9bd1-63f26a86c0eb). ::: \ No newline at end of file diff --git a/xlsx/tests/calc_tests/GEOMEAN.xlsx b/xlsx/tests/calc_tests/GEOMEAN.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e8c7f3db1040c5cabc8b8e16b70272a38e5c6884 GIT binary patch literal 13322 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 literal 0 HcmV?d00001