]> source.dussan.org Git - poi.git/commitdiff
add mirr test trunk trunk
authorPJ Fanning <fanningpj@apache.org>
Mon, 25 Nov 2024 21:09:54 +0000 (21:09 +0000)
committerPJ Fanning <fanningpj@apache.org>
Mon, 25 Nov 2024 21:09:54 +0000 (21:09 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1922096 13f79535-47bb-0310-9956-ffa450edef68

poi/src/main/java/org/apache/poi/ss/formula/functions/Mirr.java
poi/src/test/java/org/apache/poi/ss/formula/functions/TestMirr.java

index ae4871ee787cecb70491569bbf6241db41ad000d..e72f2ebf0e5d5f26bbcf50ef6f1b7f3b545ebadd 100644 (file)
@@ -56,10 +56,10 @@ public class Mirr extends MultiOperandNumericFunction {
     @Override
     protected double evaluate(double[] values) throws EvaluationException {
 
-        double financeRate = values[values.length-2];
-        double reinvestRate = values[values.length-1];
+        final double financeRate = values[values.length-2];
+        final double reinvestRate = values[values.length-1];
 
-        double[] mirrValues = Arrays.copyOf(values, values.length - 2);
+        final double[] mirrValues = Arrays.copyOf(values, values.length - 2);
 
         boolean mirrValuesAreAllNegatives = true;
         boolean mirrValuesAreAllPositives = true;
index 0899e8890766b9c2eb843e277708190a959c92bc..69d9aa825d96a66a44005402879a4a075a030f79 100644 (file)
@@ -112,6 +112,41 @@ final class TestMirr {
         assertEquals(0.18736225093, res, 0.00000001);
     }
 
+    @Test
+    void testMicrosoftSample() {
+        // https://support.microsoft.com/en-us/office/mirr-function-b020f038-7492-4fb4-93c1-35c345b53524
+        HSSFWorkbook wb = new HSSFWorkbook();
+        HSSFSheet sheet = wb.createSheet("Sheet1");
+
+        int row = 0;
+        sheet.createRow(row++).createCell(0).setCellValue("Data");
+        sheet.createRow(row++).createCell(0).setCellValue(-120000);
+        sheet.createRow(row++).createCell(0).setCellValue(39000);
+        sheet.createRow(row++).createCell(0).setCellValue(30000);
+        sheet.createRow(row++).createCell(0).setCellValue(21000);
+        sheet.createRow(row++).createCell(0).setCellValue(37000);
+        sheet.createRow(row++).createCell(0).setCellValue(46000);
+        sheet.createRow(row++).createCell(0).setCellValue(0.1);
+        sheet.createRow(row++).createCell(0).setCellValue(0.12);
+
+        HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
+        HSSFCell cell = sheet.createRow(row).createCell(0);
+        cell.setCellFormula("MIRR(A2:A7, A8, A9)");
+        fe.clearAllCachedResultValues();
+        fe.evaluateFormulaCell(cell);
+        assertEquals(0.126094, cell.getNumericCellValue(), 0.00000015);
+
+        cell.setCellFormula("MIRR(A2:A5, A8, A9)");
+        fe.clearAllCachedResultValues();
+        fe.evaluateFormulaCell(cell);
+        assertEquals(-0.048044655, cell.getNumericCellValue(), 0.00000015);
+
+        cell.setCellFormula("MIRR(A2:A7, A8, .14)");
+        fe.clearAllCachedResultValues();
+        fe.evaluateFormulaCell(cell);
+        assertEquals(0.134759111, cell.getNumericCellValue(), 0.00000015);
+    }
+
     @Test
     void testMirrFromSpreadsheet() {
         HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("mirrTest.xls");