[bug-64137] increase max iterations for IRR

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1894111 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
PJ Fanning 2021-10-10 15:46:01 +00:00
parent 08f6de47f6
commit 84d9ff335a
2 changed files with 14 additions and 4 deletions

View File

@ -137,9 +137,10 @@ final class TestIrr {
addRow(sheet, 6, 26000, "Net income for the fifth year"); addRow(sheet, 6, 26000, "Net income for the fifth year");
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb); HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
HSSFCell cell = wb.getSheetAt(0).getRow(0).createCell(100); HSSFCell cell = wb.getSheetAt(0).getRow(0).createCell(100);
assertDouble(fe, cell, "IRR(A2:A6)", -0.02124484827341093); final double tolerance = 1E-4;
assertDouble(fe, cell, "IRR(A2:A7)", 0.08663094803653162); assertDouble(fe, cell, "IRR(A2:A6)", -0.02124484827341093, tolerance);
assertDouble(fe, cell, "IRR(A2:A4,-0.1)", -0.44350694133474067); assertDouble(fe, cell, "IRR(A2:A7)", 0.08663094803653162, tolerance);
assertDouble(fe, cell, "IRR(A2:A4,-0.1)", -0.44350694133474067, tolerance);
} }
} }
@ -154,7 +155,7 @@ final class TestIrr {
1462.8749999999998, 1462.8749999999998, 1462.8749999999998, 1462.8749999999998, 1462.8749999999998, 1462.8749999999998, 1462.8749999999998, 1462.8749999999998, 1462.8749999999998, 1462.8749999999998,
1462.8749999999998, 1462.8749999999998, 1462.8749999999998, 10000.0}; 1462.8749999999998, 1462.8749999999998, 1462.8749999999998, 10000.0};
double result = Irr.irr(incomes); double result = Irr.irr(incomes);
assertEquals(-0.009463562705856032, result); assertEquals(-0.009463562705856032, result, 1E-4); // should agree within 0.01%
} }
private static void assertFormulaResult(CellValue cv, HSSFCell cell){ private static void assertFormulaResult(CellValue cv, HSSFCell cell){

View File

@ -71,6 +71,15 @@ public class Utils {
assertEquals(expectedResult, result.getNumberValue()); assertEquals(expectedResult, result.getNumberValue());
} }
public static void assertDouble(FormulaEvaluator fe, Cell cell, String formulaText,
double expectedResult, double tolerance) {
cell.setCellFormula(formulaText);
fe.notifyUpdateCell(cell);
CellValue result = fe.evaluate(cell);
assertEquals(CellType.NUMERIC, result.getCellType());
assertEquals(expectedResult, result.getNumberValue(), tolerance);
}
public static void assertError(FormulaEvaluator fe, Cell cell, String formulaText, FormulaError expectedError) { public static void assertError(FormulaEvaluator fe, Cell cell, String formulaText, FormulaError expectedError) {
cell.setCellFormula(formulaText); cell.setCellFormula(formulaText);
fe.notifyUpdateCell(cell); fe.notifyUpdateCell(cell);