From: Cédric Walter Date: Mon, 4 Nov 2013 21:27:12 +0000 (+0000) Subject: Bug 54535: Bug in INTERCEPT and SLOPE, review and integration test added to FormulaEv... X-Git-Tag: REL_3_10_FINAL~68 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=26dc6796dfe7950566d935f12eb17171cc042051;p=poi.git Bug 54535: Bug in INTERCEPT and SLOPE, review and integration test added to FormulaEvalTestData.xls git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1538772 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/poi/ss/formula/functions/LinearRegressionFunction.java b/src/java/org/apache/poi/ss/formula/functions/LinearRegressionFunction.java index a676f5b347..4fed7f9e98 100644 --- a/src/java/org/apache/poi/ss/formula/functions/LinearRegressionFunction.java +++ b/src/java/org/apache/poi/ss/formula/functions/LinearRegressionFunction.java @@ -68,7 +68,7 @@ public final class LinearRegressionFunction extends Fixed2ArgFunction { super(1); _value = value; } - @Override + protected ValueEval getItemInternal(int index) { return _value; } @@ -80,7 +80,7 @@ public final class LinearRegressionFunction extends Fixed2ArgFunction { super(1); _ref = ref; } - @Override + protected ValueEval getItemInternal(int index) { return _ref.getInnerValueEval(); } @@ -95,7 +95,7 @@ public final class LinearRegressionFunction extends Fixed2ArgFunction { _ae = ae; _width = ae.getWidth(); } - @Override + protected ValueEval getItemInternal(int index) { int rowIx = index / _width; int colIx = index % _width; @@ -114,8 +114,8 @@ public final class LinearRegressionFunction extends Fixed2ArgFunction { ValueEval arg0, ValueEval arg1) { double result; try { - ValueVector vvX = createValueVector(arg0); - ValueVector vvY = createValueVector(arg1); + ValueVector vvY = createValueVector(arg0); + ValueVector vvX = createValueVector(arg1); int size = vvX.getSize(); if (size == 0 || vvY.getSize() != size) { return ErrorEval.NA; @@ -137,7 +137,6 @@ public final class LinearRegressionFunction extends Fixed2ArgFunction { ErrorEval firstXerr = null; ErrorEval firstYerr = null; boolean accumlatedSome = false; - double result = 0.0; // first pass: read in data, compute xbar and ybar double sumx = 0.0, sumy = 0.0; diff --git a/src/testcases/org/apache/poi/ss/formula/functions/TestIntercept.java b/src/testcases/org/apache/poi/ss/formula/functions/TestIntercept.java index 942ab6b019..34b6d85794 100644 --- a/src/testcases/org/apache/poi/ss/formula/functions/TestIntercept.java +++ b/src/testcases/org/apache/poi/ss/formula/functions/TestIntercept.java @@ -59,7 +59,7 @@ public final class TestIntercept extends TestCase { public void testBasic() { Double exp = Math.pow(10, 7.5); - ValueEval[] xValues = { + ValueEval[] yValues = { new NumberEval(3+exp), new NumberEval(4+exp), new NumberEval(2+exp), @@ -67,9 +67,9 @@ public final class TestIntercept extends TestCase { new NumberEval(4+exp), new NumberEval(7+exp), }; - ValueEval areaEvalX = createAreaEval(xValues); + ValueEval areaEvalY = createAreaEval(yValues); - ValueEval[] yValues = { + ValueEval[] xValues = { new NumberEval(1), new NumberEval(2), new NumberEval(3), @@ -77,7 +77,7 @@ public final class TestIntercept extends TestCase { new NumberEval(5), new NumberEval(6), }; - ValueEval areaEvalY = createAreaEval(yValues); + ValueEval areaEvalX = createAreaEval(xValues); confirm(INTERCEPT, areaEvalX, areaEvalY, -24516534.39905822); // Excel 2010 gives -24516534.3990583 } @@ -86,9 +86,9 @@ public final class TestIntercept extends TestCase { * number of items in array is not limited to 30 */ public void testLargeArrays() { - ValueEval[] xValues = createMockNumberArray(100, 3); // [1,2,0,1,2,0,...,0,1] - xValues[0] = new NumberEval(2.0); // Changes first element to 2 - ValueEval[] yValues = createMockNumberArray(100, 101); // [1,2,3,4,...,99,100] + ValueEval[] yValues = createMockNumberArray(100, 3); // [1,2,0,1,2,0,...,0,1] + yValues[0] = new NumberEval(2.0); // Changes first element to 2 + ValueEval[] xValues = createMockNumberArray(100, 101); // [1,2,3,4,...,99,100] confirm(INTERCEPT, createAreaEval(xValues), createAreaEval(yValues), 51.74384236453202); // Excel 2010 gives 51.74384236453200 @@ -136,8 +136,8 @@ public final class TestIntercept extends TestCase { confirmError(areaEvalX, areaEvalX, ErrorEval.REF_INVALID); // search for errors array by array, not pair by pair - confirmError(areaEvalX, areaEvalY, ErrorEval.REF_INVALID); - confirmError(areaEvalY, areaEvalX, ErrorEval.NULL_INTERSECTION); + confirmError(areaEvalX, areaEvalY, ErrorEval.NULL_INTERSECTION); + confirmError(areaEvalY, areaEvalX, ErrorEval.REF_INVALID); } /** diff --git a/src/testcases/org/apache/poi/ss/formula/functions/TestSlope.java b/src/testcases/org/apache/poi/ss/formula/functions/TestSlope.java index 2ea0332eda..db5fee109b 100644 --- a/src/testcases/org/apache/poi/ss/formula/functions/TestSlope.java +++ b/src/testcases/org/apache/poi/ss/formula/functions/TestSlope.java @@ -54,7 +54,7 @@ public final class TestSlope extends TestCase { public void testBasic() { Double exp = Math.pow(10, 7.5); - ValueEval[] xValues = { + ValueEval[] yValues = { new NumberEval(3+exp), new NumberEval(4+exp), new NumberEval(2+exp), @@ -62,9 +62,9 @@ public final class TestSlope extends TestCase { new NumberEval(4+exp), new NumberEval(7+exp), }; - ValueEval areaEvalX = createAreaEval(xValues); + ValueEval areaEvalY = createAreaEval(yValues); - ValueEval[] yValues = { + ValueEval[] xValues = { new NumberEval(1), new NumberEval(2), new NumberEval(3), @@ -72,7 +72,7 @@ public final class TestSlope extends TestCase { new NumberEval(5), new NumberEval(6), }; - ValueEval areaEvalY = createAreaEval(yValues); + ValueEval areaEvalX = createAreaEval(xValues); confirm(SLOPE, areaEvalX, areaEvalY, 0.7752808988764045); // Excel 2010 gives 0.775280898876405 } @@ -81,9 +81,9 @@ public final class TestSlope extends TestCase { * number of items in array is not limited to 30 */ public void testLargeArrays() { - ValueEval[] xValues = createMockNumberArray(100, 3); // [1,2,0,1,2,0,...,0,1] - xValues[0] = new NumberEval(2.0); // Changes first element to 2 - ValueEval[] yValues = createMockNumberArray(100, 101); // [1,2,3,4,...,99,100] + ValueEval[] yValues = createMockNumberArray(100, 3); // [1,2,0,1,2,0,...,0,1] + yValues[0] = new NumberEval(2.0); // Changes first element to 2 + ValueEval[] xValues = createMockNumberArray(100, 101); // [1,2,3,4,...,99,100] confirm(SLOPE, createAreaEval(xValues), createAreaEval(yValues), -1.231527093596059); // Excel 2010 gives -1.23152709359606 @@ -131,7 +131,7 @@ public final class TestSlope extends TestCase { confirmError(areaEvalX, areaEvalX, ErrorEval.REF_INVALID); // search for errors array by array, not pair by pair - confirmError(areaEvalX, areaEvalY, ErrorEval.REF_INVALID); - confirmError(areaEvalY, areaEvalX, ErrorEval.NULL_INTERSECTION); + confirmError(areaEvalX, areaEvalY, ErrorEval.NULL_INTERSECTION); + confirmError(areaEvalY, areaEvalX, ErrorEval.REF_INVALID); } } diff --git a/test-data/spreadsheet/FormulaEvalTestData.xls b/test-data/spreadsheet/FormulaEvalTestData.xls index f06572b625..afe3af10a0 100644 Binary files a/test-data/spreadsheet/FormulaEvalTestData.xls and b/test-data/spreadsheet/FormulaEvalTestData.xls differ