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]


Reply via email to