This is an automated email from the ASF dual-hosted git repository.
tzimanyi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/main by this push:
new 1cc8bd02eb Single parameter number function with test cases (#6289)
1cc8bd02eb is described below
commit 1cc8bd02eba09fa37ca9fe9250e6e932cdd557be
Author: ChinchuAjith <[email protected]>
AuthorDate: Thu Mar 27 13:47:57 2025 +0530
Single parameter number function with test cases (#6289)
---
.../dmn/feel/runtime/functions/NumberFunction.java | 18 ++++++++++++++++++
.../test/java/org/kie/dmn/feel/runtime/BFEELTest.java | 9 +++++++++
.../org/kie/dmn/feel/runtime/FEELFunctionsTest.java | 5 +++++
.../feel/runtime/functions/NumberFunctionTest.java | 19 +++++++++++++++++++
4 files changed, 51 insertions(+)
diff --git
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/NumberFunction.java
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/NumberFunction.java
index c2fd88c1b9..6d0faa8cf2 100644
---
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/NumberFunction.java
+++
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/NumberFunction.java
@@ -65,4 +65,22 @@ public class NumberFunction
}
}
+ /**
+ * Invokes the function to convert an input object into a BigDecimal.
+ * If the input is null or annot be converted to a BigDecimal , an error
result is returned.
+ * @param from : the input object to be converted into a BigDecimal.
+ * @return FEELFnResult : containing the BigDecimal value if conversion is
successful
+ */
+ public FEELFnResult<BigDecimal> invoke(@ParameterName("from") Object from)
{
+ if ( from == null ) {
+ return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "from", "cannot be null"));
+ }
+ BigDecimal result = NumberEvalHelper.getBigDecimalOrNull(from);
+ if( result == null ) {
+ return FEELFnResult.ofError( new
InvalidParametersEvent(Severity.ERROR, "unable to calculate final number
result" ) );
+ } else {
+ return FEELFnResult.ofResult( result );
+ }
+ }
+
}
diff --git
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/BFEELTest.java
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/BFEELTest.java
index 3438572913..8f2ce07af8 100644
--- a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/BFEELTest.java
+++ b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/BFEELTest.java
@@ -95,6 +95,15 @@ public class BFEELTest extends BaseFEELTest {
{"range(\"[x]\")", new RangeImpl(Range.RangeBoundary.OPEN,
BigDecimal.ZERO, BigDecimal.ZERO, Range.RangeBoundary.OPEN), null},
+ {"number(\"test\")", BigDecimal.ZERO, null},
+ {"number(\"1 2 3\")", BigDecimal.ZERO, null},
+ {"number(\"1.1\")", BigDecimal.valueOf(1.1), null},
+
+ {"number(\"test\", null, null)", BigDecimal.ZERO, null},
+ {"number(\"1234\", null, null)", BigDecimal.valueOf(1234),
null},
+ {"number(\"1 234 000\", \" \" , null)",
BigDecimal.valueOf(1234000), null},
+ {"number(\"1,234\", \",\" , null)", BigDecimal.valueOf(1234),
null},
+
};
return addAdditionalParametersForBothProfiles(cases,
FEELDialect.BFEEL);
diff --git
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELFunctionsTest.java
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELFunctionsTest.java
index 08d3d22cd4..9b015ee264 100644
---
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELFunctionsTest.java
+++
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/FEELFunctionsTest.java
@@ -314,6 +314,11 @@ public class FEELFunctionsTest extends BaseFEELTest {
{"range(\"[null..null]\")", null, FEELEvent.Severity.ERROR},
{"range(\"[null..2]\")", null, FEELEvent.Severity.ERROR},
{"range(\"[1..null]\")", null, FEELEvent.Severity.ERROR},
+
+ {"number(\"test\")", null, FEELEvent.Severity.ERROR},
+ {"number(\"1 2 3\")", null, FEELEvent.Severity.ERROR},
+ {"number(\"1.1\")", BigDecimal.valueOf(1.1), null},
+ {"number(1947)", BigDecimal.valueOf(1947), null},
};
return addAdditionalParameters(cases, false);
}
diff --git
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/NumberFunctionTest.java
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/NumberFunctionTest.java
index 6e8371d0f3..bfeede987d 100644
---
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/NumberFunctionTest.java
+++
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/NumberFunctionTest.java
@@ -121,4 +121,23 @@ class NumberFunctionTest {
void invokeGroupEqualsDecimal() {
FunctionTestUtil.assertResultError(numberFunction.invoke("1 000.1",
".", "."), InvalidParametersEvent.class);
}
+ @Test
+ void invokeSingleParamNumberNull() {
+ FunctionTestUtil.assertResultError(numberFunction.invoke(null),
InvalidParametersEvent.class);
+ }
+
+ @Test
+ void invokeSingleParamIllegalNumber() {
+ FunctionTestUtil.assertResultError(numberFunction.invoke("test"),
InvalidParametersEvent.class);
+ }
+
+ @Test
+ void invokeSingleParamNumberWithLeadingZeros() {
+ FunctionTestUtil.assertResult(numberFunction.invoke("00123"),
BigDecimal.valueOf(123));
+ }
+
+ @Test
+ void invokeSingleParamNumberWithoutDecimalPart() {
+ FunctionTestUtil.assertResult(numberFunction.invoke("123"),
BigDecimal.valueOf(123));
+ }
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]