From 129959137d74afa01a3456b50994bf76b3c86f3a Mon Sep 17 00:00:00 2001 From: Elsa Minsut Date: Sun, 16 Nov 2025 11:25:28 +0100 Subject: [PATCH] update: adds testing for MROUND, TRUNC, and INT (#542) * update: available status for implemented functions * update: adds xlsx test for MROUND, TRUNC and INT * update: adds unit test for MROUND, TRUNC and INT --- base/src/test/test_mround_trunc_int | 40 ++++++++++++++++++ docs/src/functions/math-and-trigonometry.md | 6 +-- .../functions/math_and_trigonometry/int.md | 3 +- .../functions/math_and_trigonometry/mround.md | 3 +- .../functions/math_and_trigonometry/trunc.md | 3 +- xlsx/tests/calc_tests/MROUND_TRUNC_INT.xlsx | Bin 0 -> 17475 bytes 6 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 base/src/test/test_mround_trunc_int create mode 100644 xlsx/tests/calc_tests/MROUND_TRUNC_INT.xlsx diff --git a/base/src/test/test_mround_trunc_int b/base/src/test/test_mround_trunc_int new file mode 100644 index 0000000..c8ad72e --- /dev/null +++ b/base/src/test/test_mround_trunc_int @@ -0,0 +1,40 @@ +#![allow(clippy::unwrap_used)] + +use crate::test::util::new_empty_model; + +#[test] +fn arguments() { + let mut model = new_empty_model(); + model._set("A1", "=MROUND()"); + model._set("A2", "=MROUND(10)"); + model._set("A3", "=MROUND(10, 3)"); + model._set("A4", "=MROUND(10, 3, 1)"); + + model._set("A5", "=TRUNC()"); + model._set("A6", "=TRUNC(10)"); + model._set("A7", "=TRUNC(10.22, 1)"); + model._set("A8", "=TRUNC(10, 3, 1)"); + + model._set("A9", "=INT()"); + model._set("A10", "=INT(10.22)"); + model._set("A11", "=INT(10.22, 1)"); + model._set("A12", "=INT(10.22, 1, 2)"); + + + model.evaluate(); + + assert_eq!(model._get_text("A1"), *"#ERROR!"); + assert_eq!(model._get_text("A2"), *"#ERROR!"); + assert_eq!(model._get_text("A3"), *"9"); + assert_eq!(model._get_text("A4"), *"#ERROR!"); + + assert_eq!(model._get_text("A5"), *"#ERROR!"); + assert_eq!(model._get_text("A6"), *"#ERROR!"); + assert_eq!(model._get_text("A7"), *"10.2"); + assert_eq!(model._get_text("A8"), *"#ERROR!"); + + assert_eq!(model._get_text("A9"), *"#ERROR!"); + assert_eq!(model._get_text("A10"), *"10"); + assert_eq!(model._get_text("A11"), *"#ERROR!"); + assert_eq!(model._get_text("A12"), *"#ERROR!"); +} diff --git a/docs/src/functions/math-and-trigonometry.md b/docs/src/functions/math-and-trigonometry.md index 9138a9a..8b62a60 100644 --- a/docs/src/functions/math-and-trigonometry.md +++ b/docs/src/functions/math-and-trigonometry.md @@ -45,7 +45,7 @@ You can track the progress in this [GitHub issue](https://github.com/ironcalc/Ir | FLOOR.MATH | | – | | FLOOR.PRECISE | | – | | GCD | | – | -| INT | | – | +| INT | | – | | ISO.CEILING | | – | | LCM | | – | | LET | | – | @@ -56,7 +56,7 @@ You can track the progress in this [GitHub issue](https://github.com/ironcalc/Ir | MINVERSE | | – | | MMULT | | – | | MOD | | [MOD](math_and_trigonometry/mod) | -| MROUND | | – | +| MROUND | | – | | MULTINOMIAL | | – | | MUNIT | | – | | ODD | | [ODD](math_and_trigonometry/odd) | @@ -92,4 +92,4 @@ You can track the progress in this [GitHub issue](https://github.com/ironcalc/Ir | SUMXMY2 | | – | | TAN | | [TAN](math_and_trigonometry/tan) | | TANH | | [TANH](math_and_trigonometry/tanh) | -| TRUNC | | – | +| TRUNC | | – | diff --git a/docs/src/functions/math_and_trigonometry/int.md b/docs/src/functions/math_and_trigonometry/int.md index a4e4693..96d14ae 100644 --- a/docs/src/functions/math_and_trigonometry/int.md +++ b/docs/src/functions/math_and_trigonometry/int.md @@ -7,6 +7,5 @@ lang: en-US # INT ::: 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/docs/src/functions/math_and_trigonometry/mround.md b/docs/src/functions/math_and_trigonometry/mround.md index ca02f76..01f21ef 100644 --- a/docs/src/functions/math_and_trigonometry/mround.md +++ b/docs/src/functions/math_and_trigonometry/mround.md @@ -7,6 +7,5 @@ lang: en-US # MROUND ::: 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/docs/src/functions/math_and_trigonometry/trunc.md b/docs/src/functions/math_and_trigonometry/trunc.md index 3fc174e..850cd16 100644 --- a/docs/src/functions/math_and_trigonometry/trunc.md +++ b/docs/src/functions/math_and_trigonometry/trunc.md @@ -7,6 +7,5 @@ lang: en-US # TRUNC ::: 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/MROUND_TRUNC_INT.xlsx b/xlsx/tests/calc_tests/MROUND_TRUNC_INT.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b67610fa08ef38ecae01220138e724cccf4f898f GIT binary patch literal 17475 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 E03cnpx&QzG literal 0 HcmV?d00001