]> source.dussan.org Git - poi.git/commitdiff
add floor tests
authorPJ Fanning <fanningpj@apache.org>
Mon, 23 May 2022 14:42:50 +0000 (14:42 +0000)
committerPJ Fanning <fanningpj@apache.org>
Mon, 23 May 2022 14:42:50 +0000 (14:42 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1901177 13f79535-47bb-0310-9956-ffa450edef68

poi/src/main/java/org/apache/poi/ss/formula/functions/CeilingMath.java
poi/src/main/java/org/apache/poi/ss/formula/functions/FloorMath.java
poi/src/main/java/org/apache/poi/ss/formula/functions/MathX.java
poi/src/test/java/org/apache/poi/ss/formula/functions/TestCeilingMath.java
poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloor.java [new file with mode: 0644]
poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloorMath.java

index a5784c5f32c50cb922cb5434ec0ffb7c6ffe716b..7a38feae3470014c17921af69f6626fafc7bfba3 100644 (file)
@@ -48,7 +48,7 @@ public final class CeilingMath implements FreeRefFunction {
         try {
             Double xval = evaluateValue(args[0], ec.getRowIndex(), ec.getColumnIndex());
             if (xval == null) {
-                return ErrorEval.NUM_ERROR;
+                return ErrorEval.VALUE_INVALID;
             }
             double multiplier = 1.0;
             if (args.length > 1) {
index 71376f4cb178f61cec712f424da07829e5b3c173..84d51abc6f1823907f7feb349628b24265ae9019 100644 (file)
@@ -48,7 +48,7 @@ public final class FloorMath implements FreeRefFunction {
         try {
             Double xval = evaluateValue(args[0], ec.getRowIndex(), ec.getColumnIndex());
             if (xval == null) {
-                return ErrorEval.NUM_ERROR;
+                return ErrorEval.VALUE_INVALID;
             }
             double multiplier = 1.0;
             if (args.length > 1) {
index 6362ab461b0a3ecb44f4725fd6cd88418f57172a..2df9e1f083600528434ed8cf55388aef6a7b50f9 100644 (file)
@@ -240,6 +240,8 @@ final class MathX {
                 return 0.0;
             } else if (s == 1.0) {
                 return Math.floor(n);
+            } else if (s < 0.0 && n >= 0.0) {
+                return Double.NaN;
             } else {
                 return scaledRoundUsingBigDecimal(n, s, RoundingMode.FLOOR);
             }
index 9eb744ccb6ffa550aca0f46876e53766fab97a1a..d8707fd8f3d3170bf5d38fbc2c21942f76cf69aa 100644 (file)
@@ -73,7 +73,7 @@ final class TestCeilingMath {
             HSSFRow row = sheet.createRow(0);
             HSSFCell cell = row.createCell(0);
             HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
-            assertError(fe, cell, "CEILING.MATH(\"abc\")", FormulaError.NUM);
+            assertError(fe, cell, "CEILING.MATH(\"abc\")", FormulaError.VALUE);
         }
     }
 }
diff --git a/poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloor.java b/poi/src/test/java/org/apache/poi/ss/formula/functions/TestFloor.java
new file mode 100644 (file)
index 0000000..3b3b786
--- /dev/null
@@ -0,0 +1,78 @@
+/* ====================================================================
+   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.apache.poi.ss.formula.functions;
+
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.formula.FormulaParseException;
+import org.apache.poi.ss.usermodel.FormulaError;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+
+import static org.apache.poi.ss.util.Utils.assertDouble;
+import static org.apache.poi.ss.util.Utils.assertError;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+/**
+ * Tests for Floor function
+ */
+final class TestFloor {
+
+    //https://support.microsoft.com/en-us/office/floor-function-14bb497c-24f2-4e04-b327-b0b4de5a8886
+    @Test
+    void testMicrosoftExamples() throws IOException {
+        try (HSSFWorkbook wb = new HSSFWorkbook()) {
+            HSSFSheet sheet = wb.createSheet();
+            HSSFRow row = sheet.createRow(0);
+            HSSFCell cell = row.createCell(0);
+            HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
+            assertDouble(fe, cell, "FLOOR(3.7,2)", 2.0, 0.00000000000001);
+            assertDouble(fe, cell, "FLOOR(-2.5,-2)", -2.0, 0.00000000000001);
+            assertError(fe, cell, "FLOOR(2.5,-2)", FormulaError.NUM);
+            assertDouble(fe, cell, "FLOOR(1.58,0.1)", 1.5, 0.00000000000001);
+            assertDouble(fe, cell, "FLOOR(0.234,0.01)", 0.23, 0.00000000000001);
+        }
+    }
+
+    @Test
+    void testInvalid() throws IOException {
+        try (HSSFWorkbook wb = new HSSFWorkbook()) {
+            HSSFSheet sheet = wb.createSheet();
+            HSSFRow row = sheet.createRow(0);
+            HSSFCell cell = row.createCell(0);
+            HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
+            assertThrows(FormulaParseException.class, () ->
+                assertError(fe, cell, "FLOOR()", FormulaError.VALUE));
+        }
+    }
+
+    @Test
+    void testInvalidNum() throws IOException {
+        try (HSSFWorkbook wb = new HSSFWorkbook()) {
+            HSSFSheet sheet = wb.createSheet();
+            HSSFRow row = sheet.createRow(0);
+            HSSFCell cell = row.createCell(0);
+            HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
+            assertError(fe, cell, "FLOOR(\"abc\", \"def\")", FormulaError.VALUE);
+        }
+    }
+}
index 3b038625d9b38654a5c535e95829f8fdfc3d3850..9dd9edf1b05180ab039824dadc19481dbe43e55f 100644 (file)
@@ -73,7 +73,7 @@ final class TestFloorMath {
             HSSFRow row = sheet.createRow(0);
             HSSFCell cell = row.createCell(0);
             HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
-            assertError(fe, cell, "FLOOR.MATH(\"abc\")", FormulaError.NUM);
+            assertError(fe, cell, "FLOOR.MATH(\"abc\")", FormulaError.VALUE);
         }
     }
 }