This is an automated email from the ASF dual-hosted git repository.
gitgabrio 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 d10312fb98 [incubator-kie-issues#1325] In functions with a `scale`
parameter, that must be in the range [−6111..6176] (#5993)
d10312fb98 is described below
commit d10312fb989a23c028856c5bac369784435121e0
Author: Yeser Amer <[email protected]>
AuthorDate: Fri Jun 21 10:24:59 2024 +0200
[incubator-kie-issues#1325] In functions with a `scale` parameter, that
must be in the range [−6111..6176] (#5993)
* Fix Round functions scale parameter range.
* Adding Ceiling, Decimal and Floor functions
* Tests
* Tests
* Tests
* Tests
---
.../feel/runtime/functions/CeilingFunction.java | 14 +++-
.../feel/runtime/functions/DecimalFunction.java | 4 ++
.../dmn/feel/runtime/functions/FloorFunction.java | 14 +++-
.../functions/extended/RoundDownFunction.java | 4 ++
.../functions/extended/RoundHalfDownFunction.java | 4 ++
.../functions/extended/RoundHalfUpFunction.java | 4 ++
.../functions/extended/RoundUpFunction.java | 4 ++
.../kie/dmn/feel/runtime/FEELFunctionsTest.java | 18 +++++
.../feel/runtime/KieFEELExtendedFunctionsTest.java | 10 ++-
.../runtime/functions/CeilingFunctionTest.java | 10 ++-
.../runtime/functions/DecimalFunctionTest.java | 6 ++
.../feel/runtime/functions/FloorFunctionTest.java | 8 +++
.../functions/extended/RoundDownFunctionTest.java | 79 ++++++++++++++++++++++
.../extended/RoundHalfDownFunctionTest.java | 79 ++++++++++++++++++++++
.../extended/RoundHalfUpFunctionTest.java | 79 ++++++++++++++++++++++
.../functions/extended/RoundUpFunctionTest.java | 79 ++++++++++++++++++++++
16 files changed, 412 insertions(+), 4 deletions(-)
diff --git
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/CeilingFunction.java
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/CeilingFunction.java
index c3e3a577ea..6d632bf93d 100644
---
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/CeilingFunction.java
+++
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/CeilingFunction.java
@@ -35,9 +35,21 @@ public class CeilingFunction
}
public FEELFnResult<BigDecimal> invoke(@ParameterName( "n" ) BigDecimal n)
{
+ return invoke(n, BigDecimal.ZERO);
+ }
+
+ public FEELFnResult<BigDecimal> invoke(@ParameterName( "n" ) BigDecimal n,
@ParameterName( "scale" ) BigDecimal scale) {
if ( n == null ) {
return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "n", "cannot be null"));
}
- return FEELFnResult.ofResult( n.setScale( 0, RoundingMode.CEILING ) );
+ if ( scale == null ) {
+ return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "scale", "cannot be null"));
+ }
+ // Based on Table 76: Semantics of numeric functions, the scale is in
range −6111 .. 6176
+ if (scale.compareTo(BigDecimal.valueOf(-6111)) < 0 ||
scale.compareTo(BigDecimal.valueOf(6176)) > 0) {
+ return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "scale", "must be in range between -6111
to 6176."));
+ }
+
+ return FEELFnResult.ofResult( n.setScale( scale.intValue(),
RoundingMode.CEILING ) );
}
}
diff --git
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/DecimalFunction.java
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/DecimalFunction.java
index 2e77aa3ceb..b62266cda3 100644
---
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/DecimalFunction.java
+++
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/DecimalFunction.java
@@ -41,6 +41,10 @@ public class DecimalFunction
if ( scale == null ) {
return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "scale", "cannot be null"));
}
+ // Based on Table 76: Semantics of numeric functions, the scale is in
range −6111 .. 6176
+ if (scale.compareTo(BigDecimal.valueOf(-6111)) < 0 ||
scale.compareTo(BigDecimal.valueOf(6176)) > 0) {
+ return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "scale", "must be in range between -6111
to 6176."));
+ }
return FEELFnResult.ofResult( n.setScale( scale.intValue(),
RoundingMode.HALF_EVEN ) );
}
diff --git
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/FloorFunction.java
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/FloorFunction.java
index e3c0cd906f..f2b26d40ce 100644
---
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/FloorFunction.java
+++
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/FloorFunction.java
@@ -34,9 +34,21 @@ public class FloorFunction
}
public FEELFnResult<BigDecimal> invoke(@ParameterName( "n" ) BigDecimal n)
{
+ return invoke(n, BigDecimal.ZERO);
+ }
+
+ public FEELFnResult<BigDecimal> invoke(@ParameterName( "n" ) BigDecimal n,
@ParameterName( "scale" ) BigDecimal scale) {
if ( n == null ) {
return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "n", "cannot be null"));
}
- return FEELFnResult.ofResult( n.setScale( 0, RoundingMode.FLOOR ) );
+ if ( scale == null ) {
+ return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "scale", "cannot be null"));
+ }
+ // Based on Table 76: Semantics of numeric functions, the scale is in
range −6111 .. 6176
+ if (scale.compareTo(BigDecimal.valueOf(-6111)) < 0 ||
scale.compareTo(BigDecimal.valueOf(6176)) > 0) {
+ return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "scale", "must be in range between -6111
to 6176."));
+ }
+
+ return FEELFnResult.ofResult( n.setScale( scale.intValue(),
RoundingMode.FLOOR ) );
}
}
diff --git
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/extended/RoundDownFunction.java
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/extended/RoundDownFunction.java
index 9178dcb6b7..0a67a7d31f 100644
---
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/extended/RoundDownFunction.java
+++
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/extended/RoundDownFunction.java
@@ -50,6 +50,10 @@ public class RoundDownFunction
if ( scale == null ) {
return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "scale", "cannot be null"));
}
+ // Based on Table 76: Semantics of numeric functions, the scale is in
range −6111 .. 6176
+ if (scale.compareTo(BigDecimal.valueOf(-6111)) < 0 ||
scale.compareTo(BigDecimal.valueOf(6176)) > 0) {
+ return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "scale", "must be in range between -6111
to 6176."));
+ }
return FEELFnResult.ofResult( n.setScale( scale.intValue(),
RoundingMode.DOWN ) );
}
}
diff --git
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/extended/RoundHalfDownFunction.java
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/extended/RoundHalfDownFunction.java
index 266ec0935f..5d5648cc55 100644
---
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/extended/RoundHalfDownFunction.java
+++
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/extended/RoundHalfDownFunction.java
@@ -50,6 +50,10 @@ public class RoundHalfDownFunction
if ( scale == null ) {
return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "scale", "cannot be null"));
}
+ // Based on Table 76: Semantics of numeric functions, the scale is in
range −6111 .. 6176
+ if (scale.compareTo(BigDecimal.valueOf(-6111)) < 0 ||
scale.compareTo(BigDecimal.valueOf(6176)) > 0) {
+ return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "scale", "must be in range between -6111
to 6176."));
+ }
return FEELFnResult.ofResult( n.setScale( scale.intValue(),
RoundingMode.HALF_DOWN ) );
}
}
diff --git
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/extended/RoundHalfUpFunction.java
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/extended/RoundHalfUpFunction.java
index c18f71b35d..990f19c5dd 100644
---
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/extended/RoundHalfUpFunction.java
+++
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/extended/RoundHalfUpFunction.java
@@ -50,6 +50,10 @@ public class RoundHalfUpFunction
if ( scale == null ) {
return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "scale", "cannot be null"));
}
+ // Based on Table 76: Semantics of numeric functions, the scale is in
range −6111 .. 6176
+ if (scale.compareTo(BigDecimal.valueOf(-6111)) < 0 ||
scale.compareTo(BigDecimal.valueOf(6176)) > 0) {
+ return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "scale", "must be in range between -6111
to 6176."));
+ }
return FEELFnResult.ofResult( n.setScale( scale.intValue(),
RoundingMode.HALF_UP ) );
}
}
diff --git
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/extended/RoundUpFunction.java
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/extended/RoundUpFunction.java
index 1a3388724e..e17c90d57d 100644
---
a/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/extended/RoundUpFunction.java
+++
b/kie-dmn/kie-dmn-feel/src/main/java/org/kie/dmn/feel/runtime/functions/extended/RoundUpFunction.java
@@ -50,6 +50,10 @@ public class RoundUpFunction
if ( scale == null ) {
return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "scale", "cannot be null"));
}
+ // Based on Table 76: Semantics of numeric functions, the scale is in
range −6111 .. 6176
+ if (scale.compareTo(BigDecimal.valueOf(-6111)) < 0 ||
scale.compareTo(BigDecimal.valueOf(6176)) > 0) {
+ return FEELFnResult.ofError(new
InvalidParametersEvent(Severity.ERROR, "scale", "must be in range between -6111
to 6176."));
+ }
return FEELFnResult.ofResult( n.setScale( scale.intValue(),
RoundingMode.UP ) );
}
}
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 9314eb357b..4ec562e84f 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
@@ -156,13 +156,31 @@ public class FEELFunctionsTest extends BaseFEELTest {
{ "decimal( 1.5, 0 )", new BigDecimal("2") , null},
{ "decimal( 2.5, 0 )", new BigDecimal("2") , null},
{ "decimal( null, 0 )", null , FEELEvent.Severity.ERROR},
+ { "decimal( 1.555, 2 )", new BigDecimal("1.56") , null},
+ { "decimal( -1.56, 1 )", new BigDecimal("-1.6") , null},
+ { "decimal( 1.5, 6177 )", null , FEELEvent.Severity.ERROR},
+ { "decimal( 1.5, -6122 )", null , FEELEvent.Severity.ERROR},
+ { "decimal( 1.5, null )", null , FEELEvent.Severity.ERROR},
+ { "decimal( null, null )", null , FEELEvent.Severity.ERROR},
{ "floor( 1.5 )", new BigDecimal("1") , null},
{ "floor( -1.5 )", new BigDecimal("-2") , null},
{ "floor( null )", null , FEELEvent.Severity.ERROR},
+ { "floor( 1.555, 2 )", new BigDecimal("1.55") , null},
+ { "floor( -1.55, 1 )", new BigDecimal("-1.6") , null},
+ { "floor( 1.5, 6177 )", null , FEELEvent.Severity.ERROR},
+ { "floor( 1.5, -6122 )", null , FEELEvent.Severity.ERROR},
+ { "floor( 1.5, null )", null , FEELEvent.Severity.ERROR},
+ { "floor( null, null )", null , FEELEvent.Severity.ERROR},
{ "ceiling( 1.5 )", new BigDecimal("2") , null},
{ "ceiling( -1.5 )", new BigDecimal("-1") , null},
{ "ceiling( null )", null , FEELEvent.Severity.ERROR},
{ "ceiling( n : 1.5 )", new BigDecimal("2") , null},
+ { "ceiling( 1.555, 2 )", new BigDecimal("1.56") , null},
+ { "ceiling( -1.56, 1 )", new BigDecimal("-1.5") , null},
+ { "ceiling( 1.5, 6177 )", null , FEELEvent.Severity.ERROR},
+ { "ceiling( 1.5, -6122 )", null , FEELEvent.Severity.ERROR},
+ { "ceiling( 1.5, null )", null , FEELEvent.Severity.ERROR},
+ { "ceiling( null, null )", null , FEELEvent.Severity.ERROR},
{ "abs( 10 )", new BigDecimal("10") , null},
{ "abs( -10 )", new BigDecimal("10") , null},
{ "abs( n: -10 )", new BigDecimal("10") , null},
diff --git
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/KieFEELExtendedFunctionsTest.java
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/KieFEELExtendedFunctionsTest.java
index 9997089de5..050681eb83 100644
---
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/KieFEELExtendedFunctionsTest.java
+++
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/KieFEELExtendedFunctionsTest.java
@@ -73,18 +73,26 @@ public class KieFEELExtendedFunctionsTest extends
BaseFEELTest {
{ "round up(-5.5, 0) ", new BigDecimal("-6"), null },
{ "round up(1.121, 2) ", new BigDecimal("1.13"), null },
{ "round up(-1.126, 2) ", new BigDecimal("-1.13"), null },
+ { "round up(1.126, 6177) ", null, FEELEvent.Severity.ERROR },
+ { "round up(1.126, -6112) ", null, FEELEvent.Severity.ERROR },
{ "round down(5.5, 0)", new BigDecimal("5"), null },
{ "round down(-5.5, 0) ", new BigDecimal("-5"), null },
{ "round down(1.121, 2) ", new BigDecimal("1.12"), null },
- { "round down (-1.126, 2) ", new BigDecimal("-1.12"), null },
+ { "round down(-1.126, 2) ", new BigDecimal("-1.12"), null },
+ { "round down(1.126, 6177) ", null, FEELEvent.Severity.ERROR },
+ { "round down(1.126, -6112) ", null, FEELEvent.Severity.ERROR
},
{ "round half up(5.5, 0)", new BigDecimal("6"), null },
{ "round half up(-5.5, 0) ", new BigDecimal("-6"), null },
{ "round half up(1.121, 2) ", new BigDecimal("1.12"), null },
{ "round half up(-1.126, 2) ", new BigDecimal("-1.13"), null },
+ { "round half up(1.126, 6177) ", null,
FEELEvent.Severity.ERROR },
+ { "round half up(1.126, -6112) ", null,
FEELEvent.Severity.ERROR },
{ "round half down(5.5, 0)", new BigDecimal("5"), null },
{ "round half down(-5.5, 0) ", new BigDecimal("-5"), null },
{ "round half down(1.121, 2) ", new BigDecimal("1.12"), null },
{ "round half down(-1.126, 2) ", new BigDecimal("-1.13"), null
},
+ { "round half down(1.126, 6177) ", null,
FEELEvent.Severity.ERROR },
+ { "round half down(1.126, -6112) ", null,
FEELEvent.Severity.ERROR },
{ "after( 1, 2 )", Boolean.FALSE, null },
{ "after( date(\"2018-08-15\"), date(\"2018-07-25\") )",
Boolean.TRUE, null },
{ "after( date(\"2018-08-15\"),
[date(\"2018-07-25\")..date(\"2018-08-10\")] )", Boolean.TRUE, null },
diff --git
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/CeilingFunctionTest.java
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/CeilingFunctionTest.java
index e53d8ebcff..386b053ddd 100644
---
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/CeilingFunctionTest.java
+++
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/CeilingFunctionTest.java
@@ -36,7 +36,9 @@ class CeilingFunctionTest {
@Test
void invokeNull() {
FunctionTestUtil.assertResultError(ceilingFunction.invoke(null),
InvalidParametersEvent.class);
- }
+ FunctionTestUtil.assertResultError(ceilingFunction.invoke((BigDecimal)
null, null), InvalidParametersEvent.class);
+
FunctionTestUtil.assertResultError(ceilingFunction.invoke(BigDecimal.ONE,
null), InvalidParametersEvent.class);
+ FunctionTestUtil.assertResultError(ceilingFunction.invoke(null,
BigDecimal.ONE), InvalidParametersEvent.class); }
@Test
void invokeZero() {
@@ -52,4 +54,10 @@ class CeilingFunctionTest {
void invokeNegative() {
FunctionTestUtil.assertResultBigDecimal(ceilingFunction.invoke(BigDecimal.valueOf(-10.2)),
BigDecimal.valueOf(-10));
}
+
+ @Test
+ void invokeOutRangeScale() {
+
FunctionTestUtil.assertResultError(ceilingFunction.invoke(BigDecimal.valueOf(1.5),
BigDecimal.valueOf(6177)), InvalidParametersEvent.class);
+
FunctionTestUtil.assertResultError(ceilingFunction.invoke(BigDecimal.valueOf(1.5),
BigDecimal.valueOf(-6122)), InvalidParametersEvent.class);
+ }
}
\ No newline at end of file
diff --git
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/DecimalFunctionTest.java
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/DecimalFunctionTest.java
index 7078d6306c..8e335cf1d1 100644
---
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/DecimalFunctionTest.java
+++
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/DecimalFunctionTest.java
@@ -64,4 +64,10 @@ class DecimalFunctionTest {
void invokeLargerScale() {
FunctionTestUtil.assertResult(decimalFunction.invoke(BigDecimal.valueOf(10.123456789),
BigDecimal.valueOf(6)), BigDecimal.valueOf(10.123457));
}
+
+ @Test
+ void invokeOutRangeScale() {
+
FunctionTestUtil.assertResultError(decimalFunction.invoke(BigDecimal.valueOf(1.5),
BigDecimal.valueOf(6177)), InvalidParametersEvent.class);
+
FunctionTestUtil.assertResultError(decimalFunction.invoke(BigDecimal.valueOf(1.5),
BigDecimal.valueOf(-6122)), InvalidParametersEvent.class);
+ }
}
\ No newline at end of file
diff --git
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/FloorFunctionTest.java
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/FloorFunctionTest.java
index 615b0aa0c7..bf84075681 100644
---
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/FloorFunctionTest.java
+++
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/FloorFunctionTest.java
@@ -36,6 +36,9 @@ class FloorFunctionTest {
@Test
void invokeNull() {
FunctionTestUtil.assertResultError(floorFunction.invoke(null),
InvalidParametersEvent.class);
+ FunctionTestUtil.assertResultError(floorFunction.invoke((BigDecimal)
null, null), InvalidParametersEvent.class);
+
FunctionTestUtil.assertResultError(floorFunction.invoke(BigDecimal.ONE, null),
InvalidParametersEvent.class);
+ FunctionTestUtil.assertResultError(floorFunction.invoke(null,
BigDecimal.ONE), InvalidParametersEvent.class);
}
@Test
@@ -53,4 +56,9 @@ class FloorFunctionTest {
FunctionTestUtil.assertResultBigDecimal(floorFunction.invoke(BigDecimal.valueOf(-10.2)),
BigDecimal.valueOf(-11));
}
+ @Test
+ void invokeOutRangeScale() {
+
FunctionTestUtil.assertResultError(floorFunction.invoke(BigDecimal.valueOf(1.5),
BigDecimal.valueOf(6177)), InvalidParametersEvent.class);
+
FunctionTestUtil.assertResultError(floorFunction.invoke(BigDecimal.valueOf(1.5),
BigDecimal.valueOf(-6122)), InvalidParametersEvent.class);
+ }
}
\ No newline at end of file
diff --git
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/extended/RoundDownFunctionTest.java
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/extended/RoundDownFunctionTest.java
new file mode 100644
index 0000000000..37e4742f75
--- /dev/null
+++
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/extended/RoundDownFunctionTest.java
@@ -0,0 +1,79 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.dmn.feel.runtime.functions.extended;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.kie.dmn.feel.runtime.events.InvalidParametersEvent;
+import org.kie.dmn.feel.runtime.functions.FunctionTestUtil;
+
+import java.math.BigDecimal;
+
+class RoundDownFunctionTest {
+
+ private RoundDownFunction roundDownFunction;
+
+ @BeforeEach
+ void setUp() {
+ roundDownFunction = new RoundDownFunction();
+ }
+
+ @Test
+ void invokeNull() {
+ FunctionTestUtil.assertResultError(roundDownFunction.invoke(null),
InvalidParametersEvent.class);
+
FunctionTestUtil.assertResultError(roundDownFunction.invoke((BigDecimal) null,
null), InvalidParametersEvent.class);
+
FunctionTestUtil.assertResultError(roundDownFunction.invoke(BigDecimal.ONE,
null), InvalidParametersEvent.class);
+ FunctionTestUtil.assertResultError(roundDownFunction.invoke(null,
BigDecimal.ONE), InvalidParametersEvent.class);
+ }
+
+ @Test
+ void invokeRoundingUp() {
+
FunctionTestUtil.assertResult(roundDownFunction.invoke(BigDecimal.valueOf(10.27)),
BigDecimal.valueOf(10));
+
FunctionTestUtil.assertResult(roundDownFunction.invoke(BigDecimal.valueOf(10.27),
BigDecimal.ONE), BigDecimal.valueOf(10.2));
+ }
+
+ @Test
+ void invokeRoundingDown() {
+
FunctionTestUtil.assertResult(roundDownFunction.invoke(BigDecimal.valueOf(10.24)),
BigDecimal.valueOf(10));
+
FunctionTestUtil.assertResult(roundDownFunction.invoke(BigDecimal.valueOf(10.24),
BigDecimal.ONE), BigDecimal.valueOf(10.2));
+ }
+
+ @Test
+ void invokeRoundingEven() {
+
FunctionTestUtil.assertResult(roundDownFunction.invoke(BigDecimal.valueOf(10.25)),
BigDecimal.valueOf(10));
+
FunctionTestUtil.assertResult(roundDownFunction.invoke(BigDecimal.valueOf(10.25),
BigDecimal.ONE), BigDecimal.valueOf(10.2));
+ }
+
+ @Test
+ void invokeRoundingOdd() {
+
FunctionTestUtil.assertResult(roundDownFunction.invoke(BigDecimal.valueOf(10.35)),
BigDecimal.valueOf(10));
+
FunctionTestUtil.assertResult(roundDownFunction.invoke(BigDecimal.valueOf(10.35),
BigDecimal.ONE), BigDecimal.valueOf(10.3));
+ }
+
+ @Test
+ void invokeLargerScale() {
+
FunctionTestUtil.assertResult(roundDownFunction.invoke(BigDecimal.valueOf(10.123456789),
BigDecimal.valueOf(6)), BigDecimal.valueOf(10.123456));
+ }
+
+ @Test
+ void invokeOutRangeScale() {
+
FunctionTestUtil.assertResultError(roundDownFunction.invoke(BigDecimal.valueOf(1.5),
BigDecimal.valueOf(6177)), InvalidParametersEvent.class);
+
FunctionTestUtil.assertResultError(roundDownFunction.invoke(BigDecimal.valueOf(1.5),
BigDecimal.valueOf(-6122)), InvalidParametersEvent.class);
+ }
+}
\ No newline at end of file
diff --git
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/extended/RoundHalfDownFunctionTest.java
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/extended/RoundHalfDownFunctionTest.java
new file mode 100644
index 0000000000..d91b548c14
--- /dev/null
+++
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/extended/RoundHalfDownFunctionTest.java
@@ -0,0 +1,79 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.dmn.feel.runtime.functions.extended;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.kie.dmn.feel.runtime.events.InvalidParametersEvent;
+import org.kie.dmn.feel.runtime.functions.FunctionTestUtil;
+
+import java.math.BigDecimal;
+
+class RoundHalfDownFunctionTest {
+
+ private RoundHalfDownFunction roundHalfDownFunction;
+
+ @BeforeEach
+ void setUp() {
+ roundHalfDownFunction = new RoundHalfDownFunction();
+ }
+
+ @Test
+ void invokeNull() {
+ FunctionTestUtil.assertResultError(roundHalfDownFunction.invoke(null),
InvalidParametersEvent.class);
+
FunctionTestUtil.assertResultError(roundHalfDownFunction.invoke((BigDecimal)
null, null), InvalidParametersEvent.class);
+
FunctionTestUtil.assertResultError(roundHalfDownFunction.invoke(BigDecimal.ONE,
null), InvalidParametersEvent.class);
+ FunctionTestUtil.assertResultError(roundHalfDownFunction.invoke(null,
BigDecimal.ONE), InvalidParametersEvent.class);
+ }
+
+ @Test
+ void invokeRoundingUp() {
+
FunctionTestUtil.assertResult(roundHalfDownFunction.invoke(BigDecimal.valueOf(10.27)),
BigDecimal.valueOf(10));
+
FunctionTestUtil.assertResult(roundHalfDownFunction.invoke(BigDecimal.valueOf(10.27),
BigDecimal.ONE), BigDecimal.valueOf(10.3));
+ }
+
+ @Test
+ void invokeRoundingDown() {
+
FunctionTestUtil.assertResult(roundHalfDownFunction.invoke(BigDecimal.valueOf(10.24)),
BigDecimal.valueOf(10));
+
FunctionTestUtil.assertResult(roundHalfDownFunction.invoke(BigDecimal.valueOf(10.24),
BigDecimal.ONE), BigDecimal.valueOf(10.2));
+ }
+
+ @Test
+ void invokeRoundingEven() {
+
FunctionTestUtil.assertResult(roundHalfDownFunction.invoke(BigDecimal.valueOf(10.25)),
BigDecimal.valueOf(10));
+
FunctionTestUtil.assertResult(roundHalfDownFunction.invoke(BigDecimal.valueOf(10.25),
BigDecimal.ONE), BigDecimal.valueOf(10.2));
+ }
+
+ @Test
+ void invokeRoundingOdd() {
+
FunctionTestUtil.assertResult(roundHalfDownFunction.invoke(BigDecimal.valueOf(10.35)),
BigDecimal.valueOf(10));
+
FunctionTestUtil.assertResult(roundHalfDownFunction.invoke(BigDecimal.valueOf(10.35),
BigDecimal.ONE), BigDecimal.valueOf(10.3));
+ }
+
+ @Test
+ void invokeLargerScale() {
+
FunctionTestUtil.assertResult(roundHalfDownFunction.invoke(BigDecimal.valueOf(10.123456789),
BigDecimal.valueOf(6)), BigDecimal.valueOf(10.123457));
+ }
+
+ @Test
+ void invokeOutRangeScale() {
+
FunctionTestUtil.assertResultError(roundHalfDownFunction.invoke(BigDecimal.valueOf(1.5),
BigDecimal.valueOf(6177)), InvalidParametersEvent.class);
+
FunctionTestUtil.assertResultError(roundHalfDownFunction.invoke(BigDecimal.valueOf(1.5),
BigDecimal.valueOf(-6122)), InvalidParametersEvent.class);
+ }
+}
\ No newline at end of file
diff --git
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/extended/RoundHalfUpFunctionTest.java
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/extended/RoundHalfUpFunctionTest.java
new file mode 100644
index 0000000000..a5afd7a501
--- /dev/null
+++
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/extended/RoundHalfUpFunctionTest.java
@@ -0,0 +1,79 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.dmn.feel.runtime.functions.extended;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.kie.dmn.feel.runtime.events.InvalidParametersEvent;
+import org.kie.dmn.feel.runtime.functions.FunctionTestUtil;
+
+import java.math.BigDecimal;
+
+class RoundHalfUpFunctionTest {
+
+ private RoundHalfUpFunction roundHalfUpFunction;
+
+ @BeforeEach
+ void setUp() {
+ roundHalfUpFunction = new RoundHalfUpFunction();
+ }
+
+ @Test
+ void invokeNull() {
+ FunctionTestUtil.assertResultError(roundHalfUpFunction.invoke(null),
InvalidParametersEvent.class);
+
FunctionTestUtil.assertResultError(roundHalfUpFunction.invoke((BigDecimal)
null, null), InvalidParametersEvent.class);
+
FunctionTestUtil.assertResultError(roundHalfUpFunction.invoke(BigDecimal.ONE,
null), InvalidParametersEvent.class);
+ FunctionTestUtil.assertResultError(roundHalfUpFunction.invoke(null,
BigDecimal.ONE), InvalidParametersEvent.class);
+ }
+
+ @Test
+ void invokeRoundingUp() {
+
FunctionTestUtil.assertResult(roundHalfUpFunction.invoke(BigDecimal.valueOf(10.27)),
BigDecimal.valueOf(10));
+
FunctionTestUtil.assertResult(roundHalfUpFunction.invoke(BigDecimal.valueOf(10.27),
BigDecimal.ONE), BigDecimal.valueOf(10.3));
+ }
+
+ @Test
+ void invokeRoundingDown() {
+
FunctionTestUtil.assertResult(roundHalfUpFunction.invoke(BigDecimal.valueOf(10.24)),
BigDecimal.valueOf(10));
+
FunctionTestUtil.assertResult(roundHalfUpFunction.invoke(BigDecimal.valueOf(10.24),
BigDecimal.ONE), BigDecimal.valueOf(10.2));
+ }
+
+ @Test
+ void invokeRoundingEven() {
+
FunctionTestUtil.assertResult(roundHalfUpFunction.invoke(BigDecimal.valueOf(10.25)),
BigDecimal.valueOf(10));
+
FunctionTestUtil.assertResult(roundHalfUpFunction.invoke(BigDecimal.valueOf(10.25),
BigDecimal.ONE), BigDecimal.valueOf(10.3));
+ }
+
+ @Test
+ void invokeRoundingOdd() {
+
FunctionTestUtil.assertResult(roundHalfUpFunction.invoke(BigDecimal.valueOf(10.35)),
BigDecimal.valueOf(10));
+
FunctionTestUtil.assertResult(roundHalfUpFunction.invoke(BigDecimal.valueOf(10.35),
BigDecimal.ONE), BigDecimal.valueOf(10.4));
+ }
+
+ @Test
+ void invokeLargerScale() {
+
FunctionTestUtil.assertResult(roundHalfUpFunction.invoke(BigDecimal.valueOf(10.123456789),
BigDecimal.valueOf(6)), BigDecimal.valueOf(10.123457));
+ }
+
+ @Test
+ void invokeOutRangeScale() {
+
FunctionTestUtil.assertResultError(roundHalfUpFunction.invoke(BigDecimal.valueOf(1.5),
BigDecimal.valueOf(6177)), InvalidParametersEvent.class);
+
FunctionTestUtil.assertResultError(roundHalfUpFunction.invoke(BigDecimal.valueOf(1.5),
BigDecimal.valueOf(-6122)), InvalidParametersEvent.class);
+ }
+}
\ No newline at end of file
diff --git
a/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/extended/RoundUpFunctionTest.java
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/extended/RoundUpFunctionTest.java
new file mode 100644
index 0000000000..2175fe8f5c
--- /dev/null
+++
b/kie-dmn/kie-dmn-feel/src/test/java/org/kie/dmn/feel/runtime/functions/extended/RoundUpFunctionTest.java
@@ -0,0 +1,79 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.dmn.feel.runtime.functions.extended;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.kie.dmn.feel.runtime.events.InvalidParametersEvent;
+import org.kie.dmn.feel.runtime.functions.FunctionTestUtil;
+
+import java.math.BigDecimal;
+
+class RoundUpFunctionTest {
+
+ private RoundUpFunction roundUpFunction;
+
+ @BeforeEach
+ void setUp() {
+ roundUpFunction = new RoundUpFunction();
+ }
+
+ @Test
+ void invokeNull() {
+ FunctionTestUtil.assertResultError(roundUpFunction.invoke(null),
InvalidParametersEvent.class);
+ FunctionTestUtil.assertResultError(roundUpFunction.invoke((BigDecimal)
null, null), InvalidParametersEvent.class);
+
FunctionTestUtil.assertResultError(roundUpFunction.invoke(BigDecimal.ONE,
null), InvalidParametersEvent.class);
+ FunctionTestUtil.assertResultError(roundUpFunction.invoke(null,
BigDecimal.ONE), InvalidParametersEvent.class);
+ }
+
+ @Test
+ void invokeRoundingUp() {
+
FunctionTestUtil.assertResult(roundUpFunction.invoke(BigDecimal.valueOf(10.27)),
BigDecimal.valueOf(11));
+
FunctionTestUtil.assertResult(roundUpFunction.invoke(BigDecimal.valueOf(10.27),
BigDecimal.ONE), BigDecimal.valueOf(10.3));
+ }
+
+ @Test
+ void invokeRoundingDown() {
+
FunctionTestUtil.assertResult(roundUpFunction.invoke(BigDecimal.valueOf(10.24)),
BigDecimal.valueOf(11));
+
FunctionTestUtil.assertResult(roundUpFunction.invoke(BigDecimal.valueOf(10.24),
BigDecimal.ONE), BigDecimal.valueOf(10.3));
+ }
+
+ @Test
+ void invokeRoundingEven() {
+
FunctionTestUtil.assertResult(roundUpFunction.invoke(BigDecimal.valueOf(10.25)),
BigDecimal.valueOf(11));
+
FunctionTestUtil.assertResult(roundUpFunction.invoke(BigDecimal.valueOf(10.25),
BigDecimal.ONE), BigDecimal.valueOf(10.3));
+ }
+
+ @Test
+ void invokeRoundingOdd() {
+
FunctionTestUtil.assertResult(roundUpFunction.invoke(BigDecimal.valueOf(10.35)),
BigDecimal.valueOf(11));
+
FunctionTestUtil.assertResult(roundUpFunction.invoke(BigDecimal.valueOf(10.35),
BigDecimal.ONE), BigDecimal.valueOf(10.4));
+ }
+
+ @Test
+ void invokeLargerScale() {
+
FunctionTestUtil.assertResult(roundUpFunction.invoke(BigDecimal.valueOf(10.123456789),
BigDecimal.valueOf(6)), BigDecimal.valueOf(10.123457));
+ }
+
+ @Test
+ void invokeOutRangeScale() {
+
FunctionTestUtil.assertResultError(roundUpFunction.invoke(BigDecimal.valueOf(1.5),
BigDecimal.valueOf(6177)), InvalidParametersEvent.class);
+
FunctionTestUtil.assertResultError(roundUpFunction.invoke(BigDecimal.valueOf(1.5),
BigDecimal.valueOf(-6122)), InvalidParametersEvent.class);
+ }
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]