From ebb5fc52e0d3563866910912d7052fa2e99fc57f Mon Sep 17 00:00:00 2001 From: Sad Ellie Date: Sun, 11 Feb 2024 22:58:26 +0300 Subject: [PATCH] Fix factorial of 0 closes #186 --- .../main/java/io/github/sadellie/evaluatto/BigDecimalMath.kt | 2 ++ .../java/io/github/sadellie/evaluatto/ExpressionSimpleTest.kt | 3 +++ 2 files changed, 5 insertions(+) diff --git a/data/evaluatto/src/main/java/io/github/sadellie/evaluatto/BigDecimalMath.kt b/data/evaluatto/src/main/java/io/github/sadellie/evaluatto/BigDecimalMath.kt index c0553397..6da0b407 100644 --- a/data/evaluatto/src/main/java/io/github/sadellie/evaluatto/BigDecimalMath.kt +++ b/data/evaluatto/src/main/java/io/github/sadellie/evaluatto/BigDecimalMath.kt @@ -93,6 +93,8 @@ internal fun BigDecimal.factorial(): BigDecimal { if (this < BigDecimal.ZERO) throw ExpressionException.FactorialCalculation() if (this > maxFactorial) throw ExpressionException.TooBig() + if (this.compareTo(BigDecimal.ZERO) == 0) return BigDecimal.ONE + var expr = this for (i in 1 until this.toInt()) { expr *= BigDecimal(i) diff --git a/data/evaluatto/src/test/java/io/github/sadellie/evaluatto/ExpressionSimpleTest.kt b/data/evaluatto/src/test/java/io/github/sadellie/evaluatto/ExpressionSimpleTest.kt index e394f36b..03419438 100644 --- a/data/evaluatto/src/test/java/io/github/sadellie/evaluatto/ExpressionSimpleTest.kt +++ b/data/evaluatto/src/test/java/io/github/sadellie/evaluatto/ExpressionSimpleTest.kt @@ -108,4 +108,7 @@ class ExpressionSimpleTest { @Test fun expression28() = assertExpr("e", "2.7182818285") + + @Test + fun expression29() = assertExpr("0!", "1") }