From 805d583babb63603041dab32eedee471bd0aad75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Walter?= Date: Mon, 7 Oct 2013 09:42:38 +0000 Subject: [PATCH] Bug 55037: patch for missing function DELTA Add missing TestDeltaFunctionsFromSpreadsheet and register Delta in AnalysisToolPak git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1529809 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/ss/formula/atp/AnalysisToolPak.java | 2 +- .../apache/poi/ss/formula/functions/Delta.java | 12 +++++++++++- .../TestDeltaFunctionsFromSpreadsheet.java | 13 +++++++++++++ .../spreadsheet/DeltaFunctionTestCaseData.xls | Bin 0 -> 27648 bytes 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 src/testcases/org/apache/poi/ss/formula/functions/TestDeltaFunctionsFromSpreadsheet.java create mode 100644 test-data/spreadsheet/DeltaFunctionTestCaseData.xls diff --git a/src/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java b/src/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java index 551ff75474..b866c61bf3 100644 --- a/src/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java +++ b/src/java/org/apache/poi/ss/formula/atp/AnalysisToolPak.java @@ -91,7 +91,7 @@ public final class AnalysisToolPak implements UDFFinder { r(m, "DEC2BIN", null); r(m, "DEC2HEX", null); r(m, "DEC2OCT", null); - r(m, "DELTA", null); + r(m, "DELTA", Delta.instance); r(m, "DISC", null); r(m, "DOLLARDE", null); r(m, "DOLLARFR", null); diff --git a/src/java/org/apache/poi/ss/formula/functions/Delta.java b/src/java/org/apache/poi/ss/formula/functions/Delta.java index 8488189aa5..2f1bd88dfc 100644 --- a/src/java/org/apache/poi/ss/formula/functions/Delta.java +++ b/src/java/org/apache/poi/ss/formula/functions/Delta.java @@ -17,6 +17,7 @@ package org.apache.poi.ss.formula.functions; +import org.apache.poi.ss.formula.OperationEvaluationContext; import org.apache.poi.ss.formula.eval.*; import java.math.BigDecimal; @@ -37,7 +38,9 @@ import java.math.BigDecimal; * * @author cedric dot walter @ gmail dot com */ -public final class Delta extends Fixed2ArgFunction { +public final class Delta extends Fixed2ArgFunction implements FreeRefFunction { + + public static final FreeRefFunction instance = new Delta(); private final static NumberEval ONE = new NumberEval(1); private final static NumberEval ZERO = new NumberEval(0); @@ -72,4 +75,11 @@ public final class Delta extends Fixed2ArgFunction { return result == 0 ? ONE : ZERO; } + public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) { + if (args.length == 2) { + return evaluate(ec.getRowIndex(), ec.getColumnIndex(), args[0], args[1]); + } + + return ErrorEval.VALUE_INVALID; + } } \ No newline at end of file diff --git a/src/testcases/org/apache/poi/ss/formula/functions/TestDeltaFunctionsFromSpreadsheet.java b/src/testcases/org/apache/poi/ss/formula/functions/TestDeltaFunctionsFromSpreadsheet.java new file mode 100644 index 0000000000..47bea2134a --- /dev/null +++ b/src/testcases/org/apache/poi/ss/formula/functions/TestDeltaFunctionsFromSpreadsheet.java @@ -0,0 +1,13 @@ +package org.apache.poi.ss.formula.functions; + +/** +* Tests DELTA() as loaded from a test data spreadsheet.

+* +* @author cedric dot walter @ gmail dot com +*/ +public class TestDeltaFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { + + protected String getFilename() { + return "DeltaFunctionTestCaseData.xls"; + } +} diff --git a/test-data/spreadsheet/DeltaFunctionTestCaseData.xls b/test-data/spreadsheet/DeltaFunctionTestCaseData.xls new file mode 100644 index 0000000000000000000000000000000000000000..e66e96cc69f9dd39f28cddc7e24f2e2972569f69 GIT binary patch literal 27648 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 TqqIPM@@)Gl+P{&EE&l%n#P-vc literal 0 HcmV?d00001