From 174458f38f6fbafb7c03f4deaf0725bece464b45 Mon Sep 17 00:00:00 2001 From: Josh Micich Date: Mon, 17 Aug 2009 20:04:45 +0000 Subject: [PATCH] Replaced obsolete Eval with ValueEval in signature of Function.evaluate() git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@805119 13f79535-47bb-0310-9956-ffa450edef68 --- .../record/formula/atp/AnalysisToolPak.java | 1 - .../record/formula/eval/FunctionEval.java | 68 +++++++++++++++-- .../formula/functions/BooleanFunction.java | 2 +- .../functions/CalendarFieldFunction.java | 3 +- .../hssf/record/formula/functions/Choose.java | 3 +- .../hssf/record/formula/functions/Column.java | 3 +- .../record/formula/functions/Columns.java | 3 +- .../hssf/record/formula/functions/Count.java | 3 +- .../hssf/record/formula/functions/Counta.java | 3 +- .../record/formula/functions/Countif.java | 3 +- .../record/formula/functions/Errortype.java | 4 +- .../hssf/record/formula/functions/False.java | 3 +- .../record/formula/functions/Function.java | 9 +-- .../record/formula/functions/Hlookup.java | 2 +- .../record/formula/functions/Hyperlink.java | 4 +- .../poi/hssf/record/formula/functions/If.java | 7 +- .../hssf/record/formula/functions/Index.java | 2 +- .../record/formula/functions/IsError.java | 3 +- .../hssf/record/formula/functions/IsNa.java | 3 +- .../record/formula/functions/Isblank.java | 2 +- .../record/formula/functions/Islogical.java | 53 ------------- .../record/formula/functions/Isnontext.java | 53 ------------- .../record/formula/functions/Isnumber.java | 53 ------------- .../hssf/record/formula/functions/Isref.java | 26 +++---- .../hssf/record/formula/functions/Istext.java | 53 ------------- .../formula/functions/LogicalFunction.java | 74 +++++++++++++++---- .../hssf/record/formula/functions/Lookup.java | 3 +- .../hssf/record/formula/functions/Match.java | 2 +- .../hssf/record/formula/functions/Mode.java | 2 +- .../MultiOperandNumericFunction.java | 2 +- .../poi/hssf/record/formula/functions/Na.java | 4 +- .../hssf/record/formula/functions/Not.java | 3 +- .../functions/NotImplementedFunction.java | 4 +- .../hssf/record/formula/functions/Now.java | 4 +- .../formula/functions/NumericFunction.java | 2 +- .../hssf/record/formula/functions/Offset.java | 2 +- .../poi/hssf/record/formula/functions/Pi.java | 3 +- .../hssf/record/formula/functions/Rand.java | 3 +- .../hssf/record/formula/functions/Row.java | 3 +- .../hssf/record/formula/functions/Rows.java | 3 +- .../hssf/record/formula/functions/Sumif.java | 2 +- .../record/formula/functions/Sumproduct.java | 20 ++--- .../poi/hssf/record/formula/functions/T.java | 6 +- .../formula/functions/TextFunction.java | 2 +- .../hssf/record/formula/functions/Time.java | 2 +- .../hssf/record/formula/functions/Today.java | 4 +- .../hssf/record/formula/functions/True.java | 3 +- .../hssf/record/formula/functions/Value.java | 3 +- .../record/formula/functions/Vlookup.java | 2 +- .../formula/functions/XYNumericFunction.java | 2 +- .../record/formula/functions/TestAverage.java | 11 ++- .../record/formula/functions/TestIndex.java | 2 +- .../record/formula/functions/TestLen.java | 27 ++++--- .../record/formula/functions/TestMatch.java | 7 +- .../record/formula/functions/TestMid.java | 13 ++-- .../record/formula/functions/TestNper.java | 8 +- .../record/formula/functions/TestPmt.java | 19 +++-- .../formula/functions/TestRoundFuncs.java | 24 +++--- .../formula/functions/TestSumproduct.java | 39 +++++----- .../record/formula/functions/TestTFunc.java | 45 ++++++----- .../record/formula/functions/TestTrim.java | 28 +++---- .../record/formula/functions/TestValue.java | 12 +-- .../functions/TestXYNumericFunction.java | 50 ++++++------- 63 files changed, 338 insertions(+), 476 deletions(-) delete mode 100644 src/java/org/apache/poi/hssf/record/formula/functions/Islogical.java delete mode 100644 src/java/org/apache/poi/hssf/record/formula/functions/Isnontext.java delete mode 100644 src/java/org/apache/poi/hssf/record/formula/functions/Isnumber.java delete mode 100644 src/java/org/apache/poi/hssf/record/formula/functions/Istext.java diff --git a/src/java/org/apache/poi/hssf/record/formula/atp/AnalysisToolPak.java b/src/java/org/apache/poi/hssf/record/formula/atp/AnalysisToolPak.java index 96a43170e7..af56041521 100644 --- a/src/java/org/apache/poi/hssf/record/formula/atp/AnalysisToolPak.java +++ b/src/java/org/apache/poi/hssf/record/formula/atp/AnalysisToolPak.java @@ -20,7 +20,6 @@ package org.apache.poi.hssf.record.formula.atp; import java.util.HashMap; import java.util.Map; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.ValueEval; import org.apache.poi.hssf.record.formula.functions.FreeRefFunction; import org.apache.poi.ss.formula.EvaluationWorkbook; diff --git a/src/java/org/apache/poi/hssf/record/formula/eval/FunctionEval.java b/src/java/org/apache/poi/hssf/record/formula/eval/FunctionEval.java index 5928fe40fe..5d04de0fc3 100644 --- a/src/java/org/apache/poi/hssf/record/formula/eval/FunctionEval.java +++ b/src/java/org/apache/poi/hssf/record/formula/eval/FunctionEval.java @@ -20,7 +20,63 @@ package org.apache.poi.hssf.record.formula.eval; import org.apache.poi.hssf.record.formula.AbstractFunctionPtg; import org.apache.poi.hssf.record.formula.function.FunctionMetadata; import org.apache.poi.hssf.record.formula.function.FunctionMetadataRegistry; -import org.apache.poi.hssf.record.formula.functions.*; +import org.apache.poi.hssf.record.formula.functions.AggregateFunction; +import org.apache.poi.hssf.record.formula.functions.And; +import org.apache.poi.hssf.record.formula.functions.CalendarFieldFunction; +import org.apache.poi.hssf.record.formula.functions.Choose; +import org.apache.poi.hssf.record.formula.functions.Column; +import org.apache.poi.hssf.record.formula.functions.Columns; +import org.apache.poi.hssf.record.formula.functions.Count; +import org.apache.poi.hssf.record.formula.functions.Counta; +import org.apache.poi.hssf.record.formula.functions.Countif; +import org.apache.poi.hssf.record.formula.functions.DateFunc; +import org.apache.poi.hssf.record.formula.functions.Errortype; +import org.apache.poi.hssf.record.formula.functions.Even; +import org.apache.poi.hssf.record.formula.functions.False; +import org.apache.poi.hssf.record.formula.functions.FinanceFunction; +import org.apache.poi.hssf.record.formula.functions.Find; +import org.apache.poi.hssf.record.formula.functions.FreeRefFunction; +import org.apache.poi.hssf.record.formula.functions.Function; +import org.apache.poi.hssf.record.formula.functions.Hlookup; +import org.apache.poi.hssf.record.formula.functions.Hyperlink; +import org.apache.poi.hssf.record.formula.functions.If; +import org.apache.poi.hssf.record.formula.functions.Index; +import org.apache.poi.hssf.record.formula.functions.Indirect; +import org.apache.poi.hssf.record.formula.functions.IsError; +import org.apache.poi.hssf.record.formula.functions.IsNa; +import org.apache.poi.hssf.record.formula.functions.Isblank; +import org.apache.poi.hssf.record.formula.functions.Isref; +import org.apache.poi.hssf.record.formula.functions.LogicalFunction; +import org.apache.poi.hssf.record.formula.functions.Lookup; +import org.apache.poi.hssf.record.formula.functions.Match; +import org.apache.poi.hssf.record.formula.functions.MinaMaxa; +import org.apache.poi.hssf.record.formula.functions.Mode; +import org.apache.poi.hssf.record.formula.functions.Na; +import org.apache.poi.hssf.record.formula.functions.Not; +import org.apache.poi.hssf.record.formula.functions.NotImplementedFunction; +import org.apache.poi.hssf.record.formula.functions.Now; +import org.apache.poi.hssf.record.formula.functions.NumericFunction; +import org.apache.poi.hssf.record.formula.functions.Odd; +import org.apache.poi.hssf.record.formula.functions.Offset; +import org.apache.poi.hssf.record.formula.functions.Or; +import org.apache.poi.hssf.record.formula.functions.Pi; +import org.apache.poi.hssf.record.formula.functions.Rand; +import org.apache.poi.hssf.record.formula.functions.Replace; +import org.apache.poi.hssf.record.formula.functions.Row; +import org.apache.poi.hssf.record.formula.functions.Rows; +import org.apache.poi.hssf.record.formula.functions.Substitute; +import org.apache.poi.hssf.record.formula.functions.Sumif; +import org.apache.poi.hssf.record.formula.functions.Sumproduct; +import org.apache.poi.hssf.record.formula.functions.Sumx2my2; +import org.apache.poi.hssf.record.formula.functions.Sumx2py2; +import org.apache.poi.hssf.record.formula.functions.Sumxmy2; +import org.apache.poi.hssf.record.formula.functions.T; +import org.apache.poi.hssf.record.formula.functions.TextFunction; +import org.apache.poi.hssf.record.formula.functions.Time; +import org.apache.poi.hssf.record.formula.functions.Today; +import org.apache.poi.hssf.record.formula.functions.True; +import org.apache.poi.hssf.record.formula.functions.Value; +import org.apache.poi.hssf.record.formula.functions.Vlookup; import org.apache.poi.ss.formula.eval.NotImplementedException; /** @@ -151,8 +207,8 @@ public final class FunctionEval implements OperationEval { retval[124] = new Find(); - retval[127] = new Istext(); - retval[128] = new Isnumber(); + retval[127] = LogicalFunction.IsText; + retval[128] = LogicalFunction.IsNumber; retval[129] = new Isblank(); retval[130] = new T(); @@ -163,9 +219,9 @@ public final class FunctionEval implements OperationEval { retval[183] = AggregateFunction.PRODUCT; retval[184] = NumericFunction.FACT; - retval[190] = new Isnontext(); + retval[190] = LogicalFunction.IsNonText; - retval[198] = new Islogical(); + retval[198] = LogicalFunction.IsLogical; retval[212] = NumericFunction.ROUNDUP; retval[213] = NumericFunction.ROUNDDOWN; @@ -248,7 +304,7 @@ public final class FunctionEval implements OperationEval { if (f == null) { throw new NotImplementedException("FuncIx=" + getFunctionIndex()); } - return (ValueEval) f.evaluate(operands, srcRow, srcCol); + return f.evaluate(operands, srcRow, srcCol); } public int getNumberOfOperands() { diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/BooleanFunction.java b/src/java/org/apache/poi/hssf/record/formula/functions/BooleanFunction.java index 4995599ea5..76be216f2f 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/BooleanFunction.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/BooleanFunction.java @@ -39,7 +39,7 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval; */ public abstract class BooleanFunction implements Function { - public final Eval evaluate(Eval[] args, int srcRow, short srcCol) { + public final ValueEval evaluate(ValueEval[] args, int srcRow, short srcCol) { if (args.length < 1) { return ErrorEval.VALUE_INVALID; } diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/CalendarFieldFunction.java b/src/java/org/apache/poi/hssf/record/formula/functions/CalendarFieldFunction.java index ce6c2b4285..90e8c16675 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/CalendarFieldFunction.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/CalendarFieldFunction.java @@ -22,7 +22,6 @@ import java.util.Date; import java.util.GregorianCalendar; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.EvaluationException; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.OperandResolver; @@ -49,7 +48,7 @@ public final class CalendarFieldFunction implements Function { _needsOneBaseAdjustment = needsOneBaseAdjustment; } - public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] operands, int srcCellRow, short srcCellCol) { if (operands.length != 1) { return ErrorEval.VALUE_INVALID; } diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Choose.java b/src/java/org/apache/poi/hssf/record/formula/functions/Choose.java index dbe0aa7a9b..e7a827f4bd 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Choose.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Choose.java @@ -18,7 +18,6 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.EvaluationException; import org.apache.poi.hssf.record.formula.eval.OperandResolver; import org.apache.poi.hssf.record.formula.eval.ValueEval; @@ -29,7 +28,7 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval; */ public final class Choose implements Function { - public Eval evaluate(Eval[] args, int srcRowIndex, short srcColumnIndex) { + public ValueEval evaluate(ValueEval[] args, int srcRowIndex, short srcColumnIndex) { if (args.length < 2) { return ErrorEval.VALUE_INVALID; } diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Column.java b/src/java/org/apache/poi/hssf/record/formula/functions/Column.java index 5b04836123..e329abe3de 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Column.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Column.java @@ -19,13 +19,12 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.AreaEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.RefEval; import org.apache.poi.hssf.record.formula.eval.ValueEval; public final class Column implements Function { - public Eval evaluate(Eval[] evals, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] evals, int srcCellRow, short srcCellCol) { ValueEval retval = null; int cnum = -1; diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Columns.java b/src/java/org/apache/poi/hssf/record/formula/functions/Columns.java index 2a57bedb2d..2871c63410 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Columns.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Columns.java @@ -22,6 +22,7 @@ import org.apache.poi.hssf.record.formula.eval.ErrorEval; import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.RefEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; /** * Implementation for Excel COLUMNS function. @@ -30,7 +31,7 @@ import org.apache.poi.hssf.record.formula.eval.RefEval; */ public final class Columns implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { switch(args.length) { case 1: // expected diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Count.java b/src/java/org/apache/poi/hssf/record/formula/functions/Count.java index 4b8b217f4d..827fc0449f 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Count.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Count.java @@ -21,6 +21,7 @@ import org.apache.poi.hssf.record.formula.eval.ErrorEval; import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.MissingArgEval; import org.apache.poi.hssf.record.formula.eval.NumberEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; import org.apache.poi.hssf.record.formula.functions.CountUtils.I_MatchPredicate; /** @@ -36,7 +37,7 @@ import org.apache.poi.hssf.record.formula.functions.CountUtils.I_MatchPredicate; */ public final class Count implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { int nArgs = args.length; if (nArgs < 1) { // too few arguments diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Counta.java b/src/java/org/apache/poi/hssf/record/formula/functions/Counta.java index 7ce7eadcb5..609301db6d 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Counta.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Counta.java @@ -21,6 +21,7 @@ import org.apache.poi.hssf.record.formula.eval.BlankEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; import org.apache.poi.hssf.record.formula.functions.CountUtils.I_MatchPredicate; /** @@ -34,7 +35,7 @@ import org.apache.poi.hssf.record.formula.functions.CountUtils.I_MatchPredicate; */ public final class Counta implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { int nArgs = args.length; if (nArgs < 1) { // too few arguments diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Countif.java b/src/java/org/apache/poi/hssf/record/formula/functions/Countif.java index 5b9debc28d..e1de081d8b 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Countif.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Countif.java @@ -29,6 +29,7 @@ import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.OperandResolver; import org.apache.poi.hssf.record.formula.eval.RefEval; import org.apache.poi.hssf.record.formula.eval.StringEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; import org.apache.poi.hssf.record.formula.functions.CountUtils.I_MatchPredicate; import org.apache.poi.ss.usermodel.ErrorConstants; @@ -400,7 +401,7 @@ public final class Countif implements Function { } } - public Eval evaluate(Eval[] args, int srcRowIndex, short srcColumnIndex) { + public ValueEval evaluate(ValueEval[] args, int srcRowIndex, short srcColumnIndex) { switch(args.length) { case 2: // expected diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Errortype.java b/src/java/org/apache/poi/hssf/record/formula/functions/Errortype.java index 0240f817e7..a2a2572587 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Errortype.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Errortype.java @@ -18,10 +18,10 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.EvaluationException; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.OperandResolver; +import org.apache.poi.hssf.record.formula.eval.ValueEval; import org.apache.poi.hssf.usermodel.HSSFErrorConstants; /** @@ -52,7 +52,7 @@ import org.apache.poi.hssf.usermodel.HSSFErrorConstants; */ public final class Errortype implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { try { OperandResolver.getSingleValue(args[0], srcCellRow, srcCellCol); diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/False.java b/src/java/org/apache/poi/hssf/record/formula/functions/False.java index b94686bb9e..c5ddc266ac 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/False.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/False.java @@ -19,7 +19,6 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.BoolEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.ValueEval; /** @@ -28,7 +27,7 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval; */ public final class False implements Function { - public Eval evaluate(Eval[] operands, int srcRow, short srcCol) { + public ValueEval evaluate(ValueEval[] operands, int srcRow, short srcCol) { ValueEval retval; switch (operands.length) { default: diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Function.java b/src/java/org/apache/poi/hssf/record/formula/functions/Function.java index 90e6afe05f..1aff51cf4f 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Function.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Function.java @@ -19,7 +19,6 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.BlankEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.MissingArgEval; import org.apache.poi.hssf.record.formula.eval.ValueEval; @@ -31,16 +30,14 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval; public interface Function { /** - * @param args the evaluated function arguments. Elements of this array typically implement - * {@link ValueEval}. Empty values are represented with {@link BlankEval} or {@link - * MissingArgEval}, never null. + * @param args the evaluated function arguments. Empty values are represented with + * {@link BlankEval} or {@link MissingArgEval}, never null. * @param srcRowIndex row index of the cell containing the formula under evaluation * @param srcColumnIndex column index of the cell containing the formula under evaluation * @return The evaluated result, possibly an {@link ErrorEval}, never null. * Note - Excel uses the error code #NUM! instead of IEEE NaN, so when * numeric functions evaluate to {@link Double#NaN} be sure to translate the result to {@link * ErrorEval#NUM_ERROR}. - * */ - Eval evaluate(Eval[] args, int srcRowIndex, short srcColumnIndex); + ValueEval evaluate(ValueEval[] args, int srcRowIndex, short srcColumnIndex); } diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Hlookup.java b/src/java/org/apache/poi/hssf/record/formula/functions/Hlookup.java index 8230fb01f9..35a0b3ae34 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Hlookup.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Hlookup.java @@ -42,7 +42,7 @@ import org.apache.poi.hssf.record.formula.functions.LookupUtils.ValueVector; */ public final class Hlookup implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { Eval arg3 = null; switch(args.length) { case 4: diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Hyperlink.java b/src/java/org/apache/poi/hssf/record/formula/functions/Hyperlink.java index ecfdebf26f..19659081ec 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Hyperlink.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Hyperlink.java @@ -18,10 +18,10 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.EvaluationException; import org.apache.poi.hssf.record.formula.eval.OperandResolver; import org.apache.poi.hssf.record.formula.eval.StringEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; /** * Implementation of Excel HYPERLINK function.

@@ -41,7 +41,7 @@ import org.apache.poi.hssf.record.formula.eval.StringEval; */ public final class Hyperlink implements Function { - public Eval evaluate(Eval[] operands, int srcRow, short srcCol) { + public ValueEval evaluate(ValueEval[] operands, int srcRow, short srcCol) { int lastArgIx = operands.length - 1; if (lastArgIx < 0 || lastArgIx > 1) { return ErrorEval.VALUE_INVALID; diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/If.java b/src/java/org/apache/poi/hssf/record/formula/functions/If.java index 450a96834b..f8d3c03ee3 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/If.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/If.java @@ -19,7 +19,6 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.BoolEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.EvaluationException; import org.apache.poi.hssf.record.formula.eval.OperandResolver; import org.apache.poi.hssf.record.formula.eval.ValueEval; @@ -30,8 +29,8 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval; */ public final class If implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { - Eval falseResult; + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { + ValueEval falseResult; switch (args.length) { case 3: falseResult = args[2]; @@ -54,7 +53,7 @@ public final class If implements Function { return falseResult; } - private static boolean evaluateFirstArg(Eval arg, int srcCellRow, short srcCellCol) + private static boolean evaluateFirstArg(ValueEval arg, int srcCellRow, short srcCellCol) throws EvaluationException { ValueEval ve = OperandResolver.getSingleValue(arg, srcCellRow, srcCellCol); Boolean b = OperandResolver.coerceValueToBoolean(ve, false); diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Index.java b/src/java/org/apache/poi/hssf/record/formula/functions/Index.java index b4eca2b9b5..acdd6adde8 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Index.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Index.java @@ -47,7 +47,7 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval; */ public final class Index implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { int nArgs = args.length; if(nArgs < 2) { // too few arguments diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/IsError.java b/src/java/org/apache/poi/hssf/record/formula/functions/IsError.java index 818a463d95..55919a3a84 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/IsError.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/IsError.java @@ -20,7 +20,6 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.AreaEval; import org.apache.poi.hssf.record.formula.eval.BoolEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.RefEval; import org.apache.poi.hssf.record.formula.eval.ValueEval; @@ -30,7 +29,7 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval; */ public final class IsError implements Function { - public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] operands, int srcCellRow, short srcCellCol) { ValueEval retval = null; boolean b = false; diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/IsNa.java b/src/java/org/apache/poi/hssf/record/formula/functions/IsNa.java index 0c9cf4f200..d8f9ac9ecb 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/IsNa.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/IsNa.java @@ -22,6 +22,7 @@ import org.apache.poi.hssf.record.formula.eval.ErrorEval; import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.EvaluationException; import org.apache.poi.hssf.record.formula.eval.OperandResolver; +import org.apache.poi.hssf.record.formula.eval.ValueEval; import org.apache.poi.ss.usermodel.ErrorConstants; /** @@ -38,7 +39,7 @@ import org.apache.poi.ss.usermodel.ErrorConstants; */ public final class IsNa implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { if(args.length != 1) { return ErrorEval.VALUE_INVALID; } diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Isblank.java b/src/java/org/apache/poi/hssf/record/formula/functions/Isblank.java index 655d296c39..51e8ee441f 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Isblank.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Isblank.java @@ -31,7 +31,7 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval; */ public final class Isblank implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { if(args.length != 1) { return ErrorEval.VALUE_INVALID; } diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Islogical.java b/src/java/org/apache/poi/hssf/record/formula/functions/Islogical.java deleted file mode 100644 index 666c89ee04..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Islogical.java +++ /dev/null @@ -1,53 +0,0 @@ -/* ==================================================================== - 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.hssf.record.formula.functions; - -import org.apache.poi.hssf.record.formula.eval.BoolEval; -import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; -import org.apache.poi.hssf.record.formula.eval.RefEval; - -/** - * @author Amol S. Deshmukh < amolweb at ya hoo dot com > - * - */ -public final class Islogical extends LogicalFunction { - - public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) { - Eval retval = BoolEval.FALSE; - - switch (operands.length) { - default: - retval = ErrorEval.VALUE_INVALID; - break; - case 1: - Eval eval = operands[0]; - if (eval instanceof BoolEval) { - retval = BoolEval.TRUE; - } - else if (eval instanceof RefEval) { - Eval xlatedEval = xlateRefEval((RefEval) eval); - if (xlatedEval instanceof BoolEval) { - retval = BoolEval.TRUE; - } - } - } - - return retval; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Isnontext.java b/src/java/org/apache/poi/hssf/record/formula/functions/Isnontext.java deleted file mode 100644 index e62dc69019..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Isnontext.java +++ /dev/null @@ -1,53 +0,0 @@ -/* ==================================================================== - 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.hssf.record.formula.functions; - -import org.apache.poi.hssf.record.formula.eval.BoolEval; -import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; -import org.apache.poi.hssf.record.formula.eval.RefEval; -import org.apache.poi.hssf.record.formula.eval.StringEval; - -/** - * @author Amol S. Deshmukh < amolweb at ya hoo dot com > - * - */ -public final class Isnontext extends LogicalFunction { - public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) { - Eval retval = BoolEval.TRUE; - - switch (operands.length) { - default: - retval = ErrorEval.VALUE_INVALID; - break; - case 1: - Eval eval = operands[0]; - if (eval instanceof StringEval) { - retval = BoolEval.FALSE; - } - else if (eval instanceof RefEval) { - Eval xlatedEval = xlateRefEval((RefEval) eval); - if (xlatedEval instanceof StringEval) { - retval = BoolEval.FALSE; - } - } - } - - return retval; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Isnumber.java b/src/java/org/apache/poi/hssf/record/formula/functions/Isnumber.java deleted file mode 100644 index f00fd05c24..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Isnumber.java +++ /dev/null @@ -1,53 +0,0 @@ -/* ==================================================================== - 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.hssf.record.formula.functions; - -import org.apache.poi.hssf.record.formula.eval.BoolEval; -import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; -import org.apache.poi.hssf.record.formula.eval.NumberEval; -import org.apache.poi.hssf.record.formula.eval.RefEval; - -/** - * @author Amol S. Deshmukh < amolweb at ya hoo dot com > - * - */ -public final class Isnumber extends LogicalFunction { - public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) { - Eval retval = BoolEval.FALSE; - - switch (operands.length) { - default: - retval = ErrorEval.VALUE_INVALID; - break; - case 1: - Eval eval = operands[0]; - if (eval instanceof NumberEval) { - retval = BoolEval.TRUE; - } - else if (eval instanceof RefEval) { - Eval xlatedEval = xlateRefEval((RefEval) eval); - if (xlatedEval instanceof NumberEval) { - retval = BoolEval.TRUE; - } - } - } - - return retval; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Isref.java b/src/java/org/apache/poi/hssf/record/formula/functions/Isref.java index 565d5e4989..f5d8ac7e38 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Isref.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Isref.java @@ -22,26 +22,22 @@ import org.apache.poi.hssf.record.formula.eval.BoolEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.RefEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; /** * @author Amol S. Deshmukh < amolweb at ya hoo dot com > - * */ public final class Isref implements Function { - public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) { - Eval retval = BoolEval.FALSE; + public ValueEval evaluate(ValueEval[] operands, int srcCellRow, short srcCellCol) { + if (operands.length != 1) { + return ErrorEval.VALUE_INVALID; + } - switch (operands.length) { - default: - retval = ErrorEval.VALUE_INVALID; - break; - case 1: - Eval eval = operands[0]; - if (eval instanceof RefEval || eval instanceof AreaEval) { - retval = BoolEval.TRUE; - } - } + Eval eval = operands[0]; + if (eval instanceof RefEval || eval instanceof AreaEval) { + return BoolEval.TRUE; + } - return retval; - } + return BoolEval.FALSE; + } } diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Istext.java b/src/java/org/apache/poi/hssf/record/formula/functions/Istext.java deleted file mode 100644 index f669d7f497..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Istext.java +++ /dev/null @@ -1,53 +0,0 @@ -/* ==================================================================== - 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.hssf.record.formula.functions; - -import org.apache.poi.hssf.record.formula.eval.BoolEval; -import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; -import org.apache.poi.hssf.record.formula.eval.RefEval; -import org.apache.poi.hssf.record.formula.eval.StringEval; - -/** - * @author Amol S. Deshmukh < amolweb at ya hoo dot com > - * - */ -public final class Istext extends LogicalFunction { - public Eval evaluate(Eval[] operands, int srcCellRow, short srcCellCol) { - Eval retval = BoolEval.FALSE; - - switch (operands.length) { - default: - retval = ErrorEval.VALUE_INVALID; - break; - case 1: - Eval eval = operands[0]; - if (eval instanceof StringEval) { - retval = BoolEval.TRUE; - } - else if (eval instanceof RefEval) { - Eval xlatedEval = xlateRefEval((RefEval) eval); - if (xlatedEval instanceof StringEval) { - retval = BoolEval.TRUE; - } - } - } - - return retval; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/LogicalFunction.java b/src/java/org/apache/poi/hssf/record/formula/functions/LogicalFunction.java index ae5a0ebf6b..fadad2ca7c 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/LogicalFunction.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/LogicalFunction.java @@ -17,28 +17,76 @@ package org.apache.poi.hssf.record.formula.functions; +import org.apache.poi.hssf.record.formula.eval.BoolEval; +import org.apache.poi.hssf.record.formula.eval.ErrorEval; +import org.apache.poi.hssf.record.formula.eval.EvaluationException; +import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.OperandResolver; import org.apache.poi.hssf.record.formula.eval.RefEval; +import org.apache.poi.hssf.record.formula.eval.StringEval; import org.apache.poi.hssf.record.formula.eval.ValueEval; /** * @author Amol S. Deshmukh < amolweb at ya hoo dot com > - * */ public abstract class LogicalFunction implements Function { - /** - * recursively evaluate any RefEvals - * TODO - use {@link OperandResolver} - */ - protected ValueEval xlateRefEval(RefEval reval) { - ValueEval retval = reval.getInnerValueEval(); + /** + * recursively evaluate any RefEvals TODO - use {@link OperandResolver} + */ + private static ValueEval xlateRefEval(RefEval reval) { + ValueEval retval = reval.getInnerValueEval(); - if (retval instanceof RefEval) { - RefEval re = (RefEval) retval; - retval = xlateRefEval(re); - } + if (retval instanceof RefEval) { + RefEval re = (RefEval) retval; + retval = xlateRefEval(re); + } - return retval; - } + return retval; + } + + public final ValueEval evaluate(ValueEval[] operands, int srcCellRow, short srcCellCol) { + if (operands.length != 1) { + return ErrorEval.VALUE_INVALID; + } + ValueEval ve; + try { + ve = OperandResolver.getSingleValue(operands[0], srcCellRow, srcCellCol); + } catch (EvaluationException e) { + if (false) { + // Note - it is more usual to propagate error codes straight to the result like this: + return e.getErrorEval(); + // but logical functions behave a little differently + } + // this will usually cause a 'FALSE' result except for ISNONTEXT() + ve = e.getErrorEval(); + } + if (ve instanceof RefEval) { + ve = xlateRefEval((RefEval) ve); + } + return BoolEval.valueOf(evaluate(ve)); + + } + protected abstract boolean evaluate(ValueEval arg); + + public static final Function IsLogical = new LogicalFunction() { + protected boolean evaluate(ValueEval arg) { + return arg instanceof BoolEval; + } + }; + public static final Function IsNonText = new LogicalFunction() { + protected boolean evaluate(ValueEval arg) { + return !(arg instanceof StringEval); + } + }; + public static final Function IsNumber = new LogicalFunction() { + protected boolean evaluate(ValueEval arg) { + return arg instanceof NumberEval; + } + }; + public static final Function IsText = new LogicalFunction() { + protected boolean evaluate(ValueEval arg) { + return arg instanceof StringEval; + } + }; } diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Lookup.java b/src/java/org/apache/poi/hssf/record/formula/functions/Lookup.java index 0cbae7fb88..7bb3326d4e 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Lookup.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Lookup.java @@ -19,7 +19,6 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.AreaEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.EvaluationException; import org.apache.poi.hssf.record.formula.eval.OperandResolver; import org.apache.poi.hssf.record.formula.eval.ValueEval; @@ -41,7 +40,7 @@ import org.apache.poi.hssf.record.formula.functions.LookupUtils.ValueVector; */ public final class Lookup implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { switch(args.length) { case 3: break; diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Match.java b/src/java/org/apache/poi/hssf/record/formula/functions/Match.java index 7a8cc6cc24..9f61937440 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Match.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Match.java @@ -67,7 +67,7 @@ import org.apache.poi.hssf.record.formula.functions.LookupUtils.ValueVector; public final class Match implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { double match_type = 1; // default diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Mode.java b/src/java/org/apache/poi/hssf/record/formula/functions/Mode.java index 767e980c1c..4c6295615d 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Mode.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Mode.java @@ -74,7 +74,7 @@ public final class Mode implements Function { } - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { double result; try { List temp = new ArrayList(); diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/MultiOperandNumericFunction.java b/src/java/org/apache/poi/hssf/record/formula/functions/MultiOperandNumericFunction.java index 30b72ee74f..67bfaa038b 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/MultiOperandNumericFunction.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/MultiOperandNumericFunction.java @@ -83,7 +83,7 @@ public abstract class MultiOperandNumericFunction implements Function { private static final int DEFAULT_MAX_NUM_OPERANDS = 30; - public final Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public final ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { double d; try { diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Na.java b/src/java/org/apache/poi/hssf/record/formula/functions/Na.java index 720b0c661f..d24a5994a9 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Na.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Na.java @@ -18,7 +18,7 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; /** * Implementation of Excel function NA() @@ -27,7 +27,7 @@ import org.apache.poi.hssf.record.formula.eval.Eval; */ public final class Na implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { return ErrorEval.NA; } diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Not.java b/src/java/org/apache/poi/hssf/record/formula/functions/Not.java index 46d1e7142a..4e89ac3096 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Not.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Not.java @@ -19,7 +19,6 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.BoolEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.EvaluationException; import org.apache.poi.hssf.record.formula.eval.OperandResolver; import org.apache.poi.hssf.record.formula.eval.ValueEval; @@ -33,7 +32,7 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval; */ public final class Not implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { if (args.length != 1) { return ErrorEval.VALUE_INVALID; } diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/NotImplementedFunction.java b/src/java/org/apache/poi/hssf/record/formula/functions/NotImplementedFunction.java index 9c685d0f51..e243e87289 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/NotImplementedFunction.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/NotImplementedFunction.java @@ -17,7 +17,7 @@ package org.apache.poi.hssf.record.formula.functions; -import org.apache.poi.hssf.record.formula.eval.Eval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; import org.apache.poi.ss.formula.eval.NotImplementedException; /** @@ -38,7 +38,7 @@ public final class NotImplementedFunction implements Function { _functionName = name; } - public Eval evaluate(Eval[] operands, int srcRow, short srcCol) { + public ValueEval evaluate(ValueEval[] operands, int srcRow, short srcCol) { throw new NotImplementedException(_functionName); } public String getFunctionName() { diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Now.java b/src/java/org/apache/poi/hssf/record/formula/functions/Now.java index 528d7f98ab..cb9687654b 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Now.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Now.java @@ -20,8 +20,8 @@ package org.apache.poi.hssf.record.formula.functions; import java.util.Date; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; import org.apache.poi.hssf.usermodel.HSSFDateUtil; /** @@ -31,7 +31,7 @@ import org.apache.poi.hssf.usermodel.HSSFDateUtil; */ public final class Now implements Function { - public Eval evaluate(Eval[] evals, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] evals, int srcCellRow, short srcCellCol) { if (evals.length > 0) { return ErrorEval.VALUE_INVALID; } diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/NumericFunction.java b/src/java/org/apache/poi/hssf/record/formula/functions/NumericFunction.java index 136cf36630..310be7bb15 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/NumericFunction.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/NumericFunction.java @@ -46,7 +46,7 @@ public abstract class NumericFunction implements Function { } } - public final Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public final ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { double result; try { result = eval(args, srcCellRow, srcCellCol); diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Offset.java b/src/java/org/apache/poi/hssf/record/formula/functions/Offset.java index 0fda540e3a..c83e1b8f57 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Offset.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Offset.java @@ -164,7 +164,7 @@ public final class Offset implements Function { } } - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { if(args.length < 3 || args.length > 5) { return ErrorEval.VALUE_INVALID; } diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Pi.java b/src/java/org/apache/poi/hssf/record/formula/functions/Pi.java index d69015b148..3282c7d786 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Pi.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Pi.java @@ -18,7 +18,6 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.ValueEval; @@ -30,7 +29,7 @@ public final class Pi implements Function { private static final NumberEval PI_EVAL = new NumberEval(Math.PI); - public Eval evaluate(Eval[] operands, int srcRow, short srcCol) { + public ValueEval evaluate(ValueEval[] operands, int srcRow, short srcCol) { ValueEval retval; switch (operands.length) { default: diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Rand.java b/src/java/org/apache/poi/hssf/record/formula/functions/Rand.java index c9940fffed..5f5173e856 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Rand.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Rand.java @@ -18,7 +18,6 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.ValueEval; @@ -28,7 +27,7 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval; */ public final class Rand implements Function { - public Eval evaluate(Eval[] operands, int srcRow, short srcCol) { + public ValueEval evaluate(ValueEval[] operands, int srcRow, short srcCol) { ValueEval retval; switch (operands.length) { default: diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Row.java b/src/java/org/apache/poi/hssf/record/formula/functions/Row.java index ac16401262..59c1203b75 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Row.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Row.java @@ -19,14 +19,13 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.AreaEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.RefEval; import org.apache.poi.hssf.record.formula.eval.ValueEval; public final class Row implements Function { - public Eval evaluate(Eval[] evals, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] evals, int srcCellRow, short srcCellCol) { ValueEval retval = null; int rnum = -1; diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Rows.java b/src/java/org/apache/poi/hssf/record/formula/functions/Rows.java index 9f331f47d7..7272a07c5d 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Rows.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Rows.java @@ -22,6 +22,7 @@ import org.apache.poi.hssf.record.formula.eval.ErrorEval; import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.RefEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; /** * Implementation for Excel ROWS function. @@ -30,7 +31,7 @@ import org.apache.poi.hssf.record.formula.eval.RefEval; */ public final class Rows implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { switch(args.length) { case 1: // expected diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Sumif.java b/src/java/org/apache/poi/hssf/record/formula/functions/Sumif.java index 8eb2565d89..97ba463d92 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Sumif.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Sumif.java @@ -41,7 +41,7 @@ import org.apache.poi.hssf.record.formula.functions.CountUtils.I_MatchPredicate; */ public final class Sumif implements Function { - public Eval evaluate(Eval[] args, int srcRowIndex, short srcColumnIndex) { + public ValueEval evaluate(ValueEval[] args, int srcRowIndex, short srcColumnIndex) { if (args.length < 2) { return ErrorEval.VALUE_INVALID; } diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Sumproduct.java b/src/java/org/apache/poi/hssf/record/formula/functions/Sumproduct.java index 572c67f926..bc743e7197 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Sumproduct.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Sumproduct.java @@ -20,7 +20,6 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.AreaEval; import org.apache.poi.hssf.record.formula.eval.BlankEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.EvaluationException; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.NumericValueEval; @@ -54,14 +53,14 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval; public final class Sumproduct implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { int maxN = args.length; if(maxN < 1) { return ErrorEval.VALUE_INVALID; } - Eval firstArg = args[0]; + ValueEval firstArg = args[0]; try { if(firstArg instanceof NumericValueEval) { return evaluateSingleProduct(args); @@ -83,7 +82,7 @@ public final class Sumproduct implements Function { + firstArg.getClass().getName() + ")"); } - private static Eval evaluateSingleProduct(Eval[] evalArgs) throws EvaluationException { + private static ValueEval evaluateSingleProduct(ValueEval[] evalArgs) throws EvaluationException { int maxN = evalArgs.length; double term = 1D; @@ -94,9 +93,9 @@ public final class Sumproduct implements Function { return new NumberEval(term); } - private static double getScalarValue(Eval arg) throws EvaluationException { + private static double getScalarValue(ValueEval arg) throws EvaluationException { - Eval eval; + ValueEval eval; if (arg instanceof RefEval) { RefEval re = (RefEval) arg; eval = re.getInnerValueEval(); @@ -116,15 +115,10 @@ public final class Sumproduct implements Function { eval = ae.getRelativeValue(0, 0); } - if (!(eval instanceof ValueEval)) { - throw new RuntimeException("Unexpected value eval class (" - + eval.getClass().getName() + ")"); - } - - return getProductTerm((ValueEval) eval, true); + return getProductTerm(eval, true); } - private static Eval evaluateAreaSumProduct(Eval[] evalArgs) throws EvaluationException { + private static ValueEval evaluateAreaSumProduct(ValueEval[] evalArgs) throws EvaluationException { int maxN = evalArgs.length; AreaEval[] args = new AreaEval[maxN]; try { diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/T.java b/src/java/org/apache/poi/hssf/record/formula/functions/T.java index 9d764c33bc..6f13d4c5ee 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/T.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/T.java @@ -18,20 +18,20 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.RefEval; import org.apache.poi.hssf.record.formula.eval.StringEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; public final class T implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { switch (args.length) { default: return ErrorEval.VALUE_INVALID; case 1: break; } - Eval arg = args[0]; + ValueEval arg = args[0]; if (arg instanceof RefEval) { RefEval re = (RefEval) arg; arg = re.getInnerValueEval(); diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/TextFunction.java b/src/java/org/apache/poi/hssf/record/formula/functions/TextFunction.java index 5fd758962d..ff55e1921f 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/TextFunction.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/TextFunction.java @@ -43,7 +43,7 @@ public abstract class TextFunction implements Function { return OperandResolver.coerceValueToInt(ve); } - public final Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public final ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { try { return evaluateFunc(args, srcCellRow, srcCellCol); } catch (EvaluationException e) { diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Time.java b/src/java/org/apache/poi/hssf/record/formula/functions/Time.java index 1ddb8516ff..6d1ef146ca 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Time.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Time.java @@ -38,7 +38,7 @@ public final class Time implements Function { private static final int SECONDS_PER_DAY = HOURS_PER_DAY * SECONDS_PER_HOUR; - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { if (args.length != 3) { return ErrorEval.VALUE_INVALID; } diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Today.java b/src/java/org/apache/poi/hssf/record/formula/functions/Today.java index b71fce4611..434653c12c 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Today.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Today.java @@ -21,8 +21,8 @@ import java.util.Calendar; import java.util.GregorianCalendar; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; import org.apache.poi.hssf.usermodel.HSSFDateUtil; /** @@ -32,7 +32,7 @@ import org.apache.poi.hssf.usermodel.HSSFDateUtil; */ public final class Today implements Function { - public Eval evaluate(Eval[] evals, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] evals, int srcCellRow, short srcCellCol) { if (evals.length > 0) { return ErrorEval.VALUE_INVALID; } diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/True.java b/src/java/org/apache/poi/hssf/record/formula/functions/True.java index 429cc5f0d5..9a80c8d479 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/True.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/True.java @@ -19,7 +19,6 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.BoolEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.ValueEval; /** @@ -28,7 +27,7 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval; */ public final class True implements Function { - public Eval evaluate(Eval[] operands, int srcRow, short srcCol) { + public ValueEval evaluate(ValueEval[] operands, int srcRow, short srcCol) { ValueEval retval; switch (operands.length) { default: diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Value.java b/src/java/org/apache/poi/hssf/record/formula/functions/Value.java index 0dbfdb52de..cfa6dff4c9 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Value.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Value.java @@ -18,7 +18,6 @@ package org.apache.poi.hssf.record.formula.functions; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.EvaluationException; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.OperandResolver; @@ -42,7 +41,7 @@ public final class Value implements Function { private static final int MIN_DISTANCE_BETWEEN_THOUSANDS_SEPARATOR = 4; private static final Double ZERO = new Double(0.0); - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { if (args.length != 1) { return ErrorEval.VALUE_INVALID; } diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/Vlookup.java b/src/java/org/apache/poi/hssf/record/formula/functions/Vlookup.java index 27d16ee867..9887f69c33 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/Vlookup.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/Vlookup.java @@ -42,7 +42,7 @@ import org.apache.poi.hssf.record.formula.functions.LookupUtils.ValueVector; */ public final class Vlookup implements Function { - public Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { Eval arg3 = null; switch(args.length) { case 4: diff --git a/src/java/org/apache/poi/hssf/record/formula/functions/XYNumericFunction.java b/src/java/org/apache/poi/hssf/record/formula/functions/XYNumericFunction.java index 5c80068fff..c43cca0adf 100644 --- a/src/java/org/apache/poi/hssf/record/formula/functions/XYNumericFunction.java +++ b/src/java/org/apache/poi/hssf/record/formula/functions/XYNumericFunction.java @@ -97,7 +97,7 @@ public abstract class XYNumericFunction implements Function { */ protected abstract Accumulator createAccumulator(); - public final Eval evaluate(Eval[] args, int srcCellRow, short srcCellCol) { + public final ValueEval evaluate(ValueEval[] args, int srcCellRow, short srcCellCol) { if (args.length != 2) { return ErrorEval.VALUE_INVALID; } diff --git a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestAverage.java b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestAverage.java index 727f6b7645..e14c1db951 100755 --- a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestAverage.java +++ b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestAverage.java @@ -22,7 +22,6 @@ import junit.framework.TestCase; import org.apache.poi.hssf.record.formula.eval.BlankEval; import org.apache.poi.hssf.record.formula.eval.BoolEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.ValueEval; /** @@ -32,18 +31,18 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval; */ public final class TestAverage extends TestCase { - private static Eval invokeAverage(Eval[] args) { + private static ValueEval invokeAverage(ValueEval[] args) { return AggregateFunction.AVERAGE.evaluate(args, -1, (short)-1); } - private void confirmAverage(Eval[] args, double expected) { - Eval result = invokeAverage(args); + private void confirmAverage(ValueEval[] args, double expected) { + ValueEval result = invokeAverage(args); assertEquals(NumberEval.class, result.getClass()); assertEquals(expected, ((NumberEval)result).getNumberValue(), 0); } - private void confirmAverage(Eval[] args, ErrorEval expectedError) { - Eval result = invokeAverage(args); + private void confirmAverage(ValueEval[] args, ErrorEval expectedError) { + ValueEval result = invokeAverage(args); assertEquals(ErrorEval.class, result.getClass()); assertEquals(expectedError.getErrorCode(), ((ErrorEval)result).getErrorCode()); } diff --git a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestIndex.java b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestIndex.java index 1352870c15..557833bed9 100755 --- a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestIndex.java +++ b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestIndex.java @@ -101,7 +101,7 @@ public final class TestIndex extends TestCase { ValueEval[] args = new ValueEval[] { arg0, MissingArgEval.instance, new NumberEval(2), }; ValueEval actualResult; try { - actualResult = (ValueEval) FUNC_INST.evaluate(args, 1, (short)1); + actualResult = FUNC_INST.evaluate(args, 1, (short)1); } catch (RuntimeException e) { if (e.getMessage().equals("Unexpected arg eval type (org.apache.poi.hssf.record.formula.eval.MissingArgEval")) { throw new AssertionFailedError("Identified bug 47048b - INDEX() should support missing-arg"); diff --git a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestLen.java b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestLen.java index 459d2fb555..610897a6ab 100755 --- a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestLen.java +++ b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestLen.java @@ -22,45 +22,44 @@ import junit.framework.TestCase; import org.apache.poi.hssf.record.formula.eval.BlankEval; import org.apache.poi.hssf.record.formula.eval.BoolEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.StringEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; /** * Tests for Excel function LEN() - * + * * @author Josh Micich */ public final class TestLen extends TestCase { - - private static Eval invokeLen(Eval text) { - Eval[] args = new Eval[] { text, }; + private static ValueEval invokeLen(ValueEval text) { + ValueEval[] args = new ValueEval[] { text, }; return TextFunction.LEN.evaluate(args, -1, (short)-1); } - private void confirmLen(Eval text, int expected) { - Eval result = invokeLen(text); + private void confirmLen(ValueEval text, int expected) { + ValueEval result = invokeLen(text); assertEquals(NumberEval.class, result.getClass()); assertEquals(expected, ((NumberEval)result).getNumberValue(), 0); } - private void confirmLen(Eval text, ErrorEval expectedError) { - Eval result = invokeLen(text); + private void confirmLen(ValueEval text, ErrorEval expectedError) { + ValueEval result = invokeLen(text); assertEquals(ErrorEval.class, result.getClass()); assertEquals(expectedError.getErrorCode(), ((ErrorEval)result).getErrorCode()); } - + public void testBasic() { - + confirmLen(new StringEval("galactic"), 8); } - + /** * Valid cases where text arg is not exactly a string */ public void testUnusualArgs() { - - // text (first) arg type is number, other args are strings with fractional digits + + // text (first) arg type is number, other args are strings with fractional digits confirmLen(new NumberEval(123456), 6); confirmLen(BoolEval.FALSE, 5); confirmLen(BoolEval.TRUE, 4); diff --git a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestMatch.java b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestMatch.java index 48104c22e5..a92dd1fbc1 100755 --- a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestMatch.java +++ b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestMatch.java @@ -22,7 +22,6 @@ import junit.framework.TestCase; import org.apache.poi.hssf.record.formula.eval.AreaEval; import org.apache.poi.hssf.record.formula.eval.BoolEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.NumericValueEval; import org.apache.poi.hssf.record.formula.eval.StringEval; @@ -41,11 +40,11 @@ public final class TestMatch extends TestCase { private static final NumberEval MATCH_SMALLEST_GTE = new NumberEval(-1); - private static Eval invokeMatch(Eval lookup_value, Eval lookup_array, Eval match_type) { - Eval[] args = { lookup_value, lookup_array, match_type, }; + private static ValueEval invokeMatch(ValueEval lookup_value, ValueEval lookup_array, ValueEval match_type) { + ValueEval[] args = { lookup_value, lookup_array, match_type, }; return new Match().evaluate(args, -1, (short)-1); } - private static void confirmInt(int expected, Eval actualEval) { + private static void confirmInt(int expected, ValueEval actualEval) { if(!(actualEval instanceof NumericValueEval)) { fail("Expected numeric result"); } diff --git a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestMid.java b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestMid.java index 81e78e737c..dc4d50208d 100755 --- a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestMid.java +++ b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestMid.java @@ -23,7 +23,6 @@ import org.apache.poi.hssf.record.formula.eval.AreaEval; import org.apache.poi.hssf.record.formula.eval.BlankEval; import org.apache.poi.hssf.record.formula.eval.BoolEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.RefEval; import org.apache.poi.hssf.record.formula.eval.StringEval; @@ -36,19 +35,19 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval; public final class TestMid extends TestCase { - private static Eval invokeMid(Eval text, Eval startPos, Eval numChars) { - Eval[] args = new Eval[] { text, startPos, numChars, }; + private static ValueEval invokeMid(ValueEval text, ValueEval startPos, ValueEval numChars) { + ValueEval[] args = new ValueEval[] { text, startPos, numChars, }; return TextFunction.MID.evaluate(args, -1, (short)-1); } - private void confirmMid(Eval text, Eval startPos, Eval numChars, String expected) { - Eval result = invokeMid(text, startPos, numChars); + private void confirmMid(ValueEval text, ValueEval startPos, ValueEval numChars, String expected) { + ValueEval result = invokeMid(text, startPos, numChars); assertEquals(StringEval.class, result.getClass()); assertEquals(expected, ((StringEval)result).getStringValue()); } - private void confirmMid(Eval text, Eval startPos, Eval numChars, ErrorEval expectedError) { - Eval result = invokeMid(text, startPos, numChars); + private void confirmMid(ValueEval text, ValueEval startPos, ValueEval numChars, ErrorEval expectedError) { + ValueEval result = invokeMid(text, startPos, numChars); assertEquals(ErrorEval.class, result.getClass()); assertEquals(expectedError.getErrorCode(), ((ErrorEval)result).getErrorCode()); } diff --git a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestNper.java b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestNper.java index a919c35af4..99fb4dea41 100644 --- a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestNper.java +++ b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestNper.java @@ -19,8 +19,8 @@ package org.apache.poi.hssf.record.formula.functions; import junit.framework.TestCase; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFErrorConstants; import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator; @@ -29,18 +29,18 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook; /** * Tests for {@link FinanceFunction#NPER} - * + * * @author Josh Micich */ public final class TestNper extends TestCase { public void testSimpleEvaluate() { - Eval[] args = { + ValueEval[] args = { new NumberEval(0.05), new NumberEval(250), new NumberEval(-1000), }; - Eval result = FinanceFunction.NPER.evaluate(args, 0, (short)0); + ValueEval result = FinanceFunction.NPER.evaluate(args, 0, (short)0); assertEquals(NumberEval.class, result.getClass()); assertEquals(4.57353557, ((NumberEval)result).getNumberValue(), 0.00000001); diff --git a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestPmt.java b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestPmt.java index 9a4cded9af..cac4bde13f 100644 --- a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestPmt.java +++ b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestPmt.java @@ -21,12 +21,11 @@ import junit.framework.AssertionFailedError; import junit.framework.TestCase; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.usermodel.HSSFErrorConstants; /** - * * @author Josh Micich */ public final class TestPmt extends TestCase { @@ -35,14 +34,14 @@ public final class TestPmt extends TestCase { // only asserting accuracy to 4 fractional digits assertEquals(expected, ne.getNumberValue(), 0.00005); } - private static Eval invoke(Eval[] args) { + private static ValueEval invoke(ValueEval[] args) { return FinanceFunction.PMT.evaluate(args, -1, (short)-1); } /** * Invocation when not expecting an error result */ - private static NumberEval invokeNormal(Eval[] args) { - Eval ev = invoke(args); + private static NumberEval invokeNormal(ValueEval[] args) { + ValueEval ev = invoke(args); if(ev instanceof ErrorEval) { throw new AssertionFailedError("Normal evaluation failed with error code: " + ev.toString()); @@ -51,7 +50,7 @@ public final class TestPmt extends TestCase { } private static void confirm(double expected, double rate, double nper, double pv, double fv, boolean isBeginning) { - Eval[] args = { + ValueEval[] args = { new NumberEval(rate), new NumberEval(nper), new NumberEval(pv), @@ -68,20 +67,20 @@ public final class TestPmt extends TestCase { } public void test3args() { - - Eval[] args = { + + ValueEval[] args = { new NumberEval(0.005), new NumberEval(24), new NumberEval(1000), }; - Eval ev = invoke(args); + ValueEval ev = invoke(args); if(ev instanceof ErrorEval) { ErrorEval err = (ErrorEval) ev; if(err.getErrorCode() == HSSFErrorConstants.ERROR_VALUE) { throw new AssertionFailedError("Identified bug 44691"); } } - + confirm(-44.3206, invokeNormal(args)); } } diff --git a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestRoundFuncs.java b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestRoundFuncs.java index 9dbbb438e0..d3fa564391 100755 --- a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestRoundFuncs.java +++ b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestRoundFuncs.java @@ -20,31 +20,31 @@ package org.apache.poi.hssf.record.formula.functions; import junit.framework.TestCase; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.StringEval; /** * Test cases for ROUND(), ROUNDUP(), ROUNDDOWN() - * + * * @author Josh Micich */ public final class TestRoundFuncs extends TestCase { private static final NumericFunction F = null; public void testRounddownWithStringArg() { - - Eval strArg = new StringEval("abc"); - Eval[] args = { strArg, new NumberEval(2), }; - Eval result = F.ROUNDDOWN.evaluate(args, -1, (short)-1); + + ValueEval strArg = new StringEval("abc"); + ValueEval[] args = { strArg, new NumberEval(2), }; + ValueEval result = F.ROUNDDOWN.evaluate(args, -1, (short)-1); assertEquals(ErrorEval.VALUE_INVALID, result); } - + public void testRoundupWithStringArg() { - - Eval strArg = new StringEval("abc"); - Eval[] args = { strArg, new NumberEval(2), }; - Eval result = F.ROUNDUP.evaluate(args, -1, (short)-1); + + ValueEval strArg = new StringEval("abc"); + ValueEval[] args = { strArg, new NumberEval(2), }; + ValueEval result = F.ROUNDUP.evaluate(args, -1, (short)-1); assertEquals(ErrorEval.VALUE_INVALID, result); } - + } diff --git a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestSumproduct.java b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestSumproduct.java index 47ee0afbb6..63d1088e8c 100755 --- a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestSumproduct.java +++ b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestSumproduct.java @@ -21,7 +21,6 @@ import junit.framework.TestCase; import org.apache.poi.hssf.record.formula.eval.AreaEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.NumericValueEval; import org.apache.poi.hssf.record.formula.eval.RefEval; @@ -29,16 +28,16 @@ import org.apache.poi.hssf.record.formula.eval.ValueEval; /** * Test cases for SUMPRODUCT() - * + * * @author Josh Micich */ public final class TestSumproduct extends TestCase { - - private static Eval invokeSumproduct(Eval[] args) { + + private static ValueEval invokeSumproduct(ValueEval[] args) { // srcCellRow and srcCellColumn are ignored by SUMPRODUCT return new Sumproduct().evaluate(args, -1, (short)-1); } - private static void confirmDouble(double expected, Eval actualEval) { + private static void confirmDouble(double expected, ValueEval actualEval) { if(!(actualEval instanceof NumericValueEval)) { fail("Expected numeric result"); } @@ -49,11 +48,11 @@ public final class TestSumproduct extends TestCase { public void testScalarSimple() { RefEval refEval = EvalFactory.createRefEval("A1", new NumberEval(3)); - Eval[] args = { - refEval, + ValueEval[] args = { + refEval, new NumberEval(2), }; - Eval result = invokeSumproduct(args); + ValueEval result = invokeSumproduct(args); confirmDouble(6D, result); } @@ -70,9 +69,9 @@ public final class TestSumproduct extends TestCase { }; AreaEval aeA = EvalFactory.createAreaEval("A1:A3", aValues); AreaEval aeB = EvalFactory.createAreaEval("B1:B3", bValues); - - Eval[] args = { aeA, aeB, }; - Eval result = invokeSumproduct(args); + + ValueEval[] args = { aeA, aeB, }; + ValueEval result = invokeSumproduct(args); confirmDouble(65D, result); } @@ -83,27 +82,27 @@ public final class TestSumproduct extends TestCase { AreaEval ae = EvalFactory.createAreaEval("A1:A1", new ValueEval[] { new NumberEval(7), }); - Eval[] args = { - ae, + ValueEval[] args = { + ae, new NumberEval(2), }; - Eval result = invokeSumproduct(args); + ValueEval result = invokeSumproduct(args); confirmDouble(14D, result); } public void testMismatchAreaDimensions() { - + AreaEval aeA = EvalFactory.createAreaEval("A1:A3", new ValueEval[3]); AreaEval aeB = EvalFactory.createAreaEval("B1:D1", new ValueEval[3]); - Eval[] args; - args = new Eval[] { aeA, aeB, }; + ValueEval[] args; + args = new ValueEval[] { aeA, aeB, }; assertEquals(ErrorEval.VALUE_INVALID, invokeSumproduct(args)); - args = new Eval[] { aeA, new NumberEval(5), }; + args = new ValueEval[] { aeA, new NumberEval(5), }; assertEquals(ErrorEval.VALUE_INVALID, invokeSumproduct(args)); } - + public void testAreaWithErrorCell() { ValueEval[] aValues = { ErrorEval.REF_INVALID, @@ -112,7 +111,7 @@ public final class TestSumproduct extends TestCase { AreaEval aeA = EvalFactory.createAreaEval("A1:A2", aValues); AreaEval aeB = EvalFactory.createAreaEval("B1:B2", new ValueEval[2]); - Eval[] args = { aeA, aeB, }; + ValueEval[] args = { aeA, aeB, }; assertEquals(ErrorEval.REF_INVALID, invokeSumproduct(args)); } } diff --git a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestTFunc.java b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestTFunc.java index ac7152d0e2..53482c86c8 100755 --- a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestTFunc.java +++ b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestTFunc.java @@ -22,14 +22,13 @@ import junit.framework.TestCase; import org.apache.poi.hssf.record.formula.eval.BlankEval; import org.apache.poi.hssf.record.formula.eval.BoolEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.StringEval; import org.apache.poi.hssf.record.formula.eval.ValueEval; /** * Test cases for Excel function T() - * + * * @author Josh Micich */ public final class TestTFunc extends TestCase { @@ -37,9 +36,9 @@ public final class TestTFunc extends TestCase { /** * @return the result of calling function T() with the specified argument */ - private static Eval invokeT(Eval arg) { - Eval[] args = { arg, }; - Eval result = new T().evaluate(args, -1, (short)-1); + private static ValueEval invokeT(ValueEval arg) { + ValueEval[] args = { arg, }; + ValueEval result = new T().evaluate(args, -1, (short)-1); assertNotNull("result may never be null", result); return result; } @@ -47,20 +46,20 @@ public final class TestTFunc extends TestCase { * Simulates call: T(A1) * where cell A1 has the specified innerValue */ - private Eval invokeTWithReference(ValueEval innerValue) { - Eval arg = EvalFactory.createRefEval("$B$2", innerValue); + private ValueEval invokeTWithReference(ValueEval innerValue) { + ValueEval arg = EvalFactory.createRefEval("$B$2", innerValue); return invokeT(arg); } - + private static void confirmText(String text) { - Eval arg = new StringEval(text); - Eval eval = invokeT(arg); + ValueEval arg = new StringEval(text); + ValueEval eval = invokeT(arg); StringEval se = (StringEval) eval; assertEquals(text, se.getStringValue()); } - + public void testTextValues() { - + confirmText("abc"); confirmText(""); confirmText(" "); @@ -68,26 +67,26 @@ public final class TestTFunc extends TestCase { confirmText("123"); confirmText("TRUE"); } - - private static void confirmError(Eval arg) { - Eval eval = invokeT(arg); + + private static void confirmError(ValueEval arg) { + ValueEval eval = invokeT(arg); assertTrue(arg == eval); } public void testErrorValues() { - + confirmError(ErrorEval.VALUE_INVALID); confirmError(ErrorEval.NA); confirmError(ErrorEval.REF_INVALID); } - - private static void confirmString(Eval eval, String expected) { + + private static void confirmString(ValueEval eval, String expected) { assertTrue(eval instanceof StringEval); assertEquals(expected, ((StringEval)eval).getStringValue()); } - private static void confirmOther(Eval arg) { - Eval eval = invokeT(arg); + private static void confirmOther(ValueEval arg) { + ValueEval eval = invokeT(arg); confirmString(eval, ""); } @@ -98,8 +97,8 @@ public final class TestTFunc extends TestCase { } public void testRefValues() { - Eval eval; - + ValueEval eval; + eval = invokeTWithReference(new StringEval("def")); confirmString(eval, "def"); eval = invokeTWithReference(new StringEval(" ")); @@ -109,7 +108,7 @@ public final class TestTFunc extends TestCase { confirmString(eval, ""); eval = invokeTWithReference(BoolEval.TRUE); confirmString(eval, ""); - + eval = invokeTWithReference(ErrorEval.NAME_INVALID); assertTrue(eval == ErrorEval.NAME_INVALID); } diff --git a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestTrim.java b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestTrim.java index 1c65c9ca6d..a95b15157c 100755 --- a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestTrim.java +++ b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestTrim.java @@ -22,36 +22,36 @@ import junit.framework.TestCase; import org.apache.poi.hssf.record.formula.eval.BlankEval; import org.apache.poi.hssf.record.formula.eval.BoolEval; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.StringEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; /** * Tests for Excel function TRIM() - * + * * @author Josh Micich */ public final class TestTrim extends TestCase { - - private static Eval invokeTrim(Eval text) { - Eval[] args = new Eval[] { text, }; + + private static ValueEval invokeTrim(ValueEval text) { + ValueEval[] args = new ValueEval[] { text, }; return TextFunction.TRIM.evaluate(args, -1, (short)-1); } - private void confirmTrim(Eval text, String expected) { - Eval result = invokeTrim(text); + private void confirmTrim(ValueEval text, String expected) { + ValueEval result = invokeTrim(text); assertEquals(StringEval.class, result.getClass()); assertEquals(expected, ((StringEval)result).getStringValue()); } - private void confirmTrim(Eval text, ErrorEval expectedError) { - Eval result = invokeTrim(text); + private void confirmTrim(ValueEval text, ErrorEval expectedError) { + ValueEval result = invokeTrim(text); assertEquals(ErrorEval.class, result.getClass()); assertEquals(expectedError.getErrorCode(), ((ErrorEval)result).getErrorCode()); } - + public void testBasic() { - + confirmTrim(new StringEval(" hi "), "hi"); confirmTrim(new StringEval("hi "), "hi"); confirmTrim(new StringEval(" hi"), "hi"); @@ -59,13 +59,13 @@ public final class TestTrim extends TestCase { confirmTrim(new StringEval(""), ""); confirmTrim(new StringEval(" "), ""); } - + /** * Valid cases where text arg is not exactly a string */ public void testUnusualArgs() { - - // text (first) arg type is number, other args are strings with fractional digits + + // text (first) arg type is number, other args are strings with fractional digits confirmTrim(new NumberEval(123456), "123456"); confirmTrim(BoolEval.FALSE, "FALSE"); confirmTrim(BoolEval.TRUE, "TRUE"); diff --git a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestValue.java b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestValue.java index 5f74fbf1a6..19a6d68927 100644 --- a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestValue.java +++ b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestValue.java @@ -20,30 +20,30 @@ package org.apache.poi.hssf.record.formula.functions; import junit.framework.TestCase; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.StringEval; +import org.apache.poi.hssf.record.formula.eval.ValueEval; /** * Tests for {@link Value} - * + * * @author Josh Micich */ public final class TestValue extends TestCase { - private static Eval invokeValue(String strText) { - Eval[] args = new Eval[] { new StringEval(strText), }; + private static ValueEval invokeValue(String strText) { + ValueEval[] args = new ValueEval[] { new StringEval(strText), }; return new Value().evaluate(args, -1, (short) -1); } private static void confirmValue(String strText, double expected) { - Eval result = invokeValue(strText); + ValueEval result = invokeValue(strText); assertEquals(NumberEval.class, result.getClass()); assertEquals(expected, ((NumberEval) result).getNumberValue(), 0.0); } private static void confirmValueError(String strText) { - Eval result = invokeValue(strText); + ValueEval result = invokeValue(strText); assertEquals(ErrorEval.class, result.getClass()); assertEquals(ErrorEval.VALUE_INVALID, result); } diff --git a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestXYNumericFunction.java b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestXYNumericFunction.java index 0d62b1fb0f..818409cae7 100755 --- a/src/testcases/org/apache/poi/hssf/record/formula/functions/TestXYNumericFunction.java +++ b/src/testcases/org/apache/poi/hssf/record/formula/functions/TestXYNumericFunction.java @@ -20,45 +20,44 @@ package org.apache.poi.hssf.record.formula.functions; import junit.framework.TestCase; import org.apache.poi.hssf.record.formula.eval.ErrorEval; -import org.apache.poi.hssf.record.formula.eval.Eval; import org.apache.poi.hssf.record.formula.eval.NumberEval; import org.apache.poi.hssf.record.formula.eval.ValueEval; /** * Tests for Excel functions SUMX2MY2(), SUMX2PY2(), SUMXMY2() - * + * * @author Josh Micich */ public final class TestXYNumericFunction extends TestCase { private static final Function SUM_SQUARES = new Sumx2py2(); private static final Function DIFF_SQUARES = new Sumx2my2(); private static final Function SUM_SQUARES_OF_DIFFS = new Sumxmy2(); - - private static Eval invoke(Function function, Eval xArray, Eval yArray) { - Eval[] args = new Eval[] { xArray, yArray, }; + + private static ValueEval invoke(Function function, ValueEval xArray, ValueEval yArray) { + ValueEval[] args = new ValueEval[] { xArray, yArray, }; return function.evaluate(args, -1, (short)-1); } - private void confirm(Function function, Eval xArray, Eval yArray, double expected) { - Eval result = invoke(function, xArray, yArray); + private void confirm(Function function, ValueEval xArray, ValueEval yArray, double expected) { + ValueEval result = invoke(function, xArray, yArray); assertEquals(NumberEval.class, result.getClass()); assertEquals(expected, ((NumberEval)result).getNumberValue(), 0); } - private void confirmError(Function function, Eval xArray, Eval yArray, ErrorEval expectedError) { - Eval result = invoke(function, xArray, yArray); + private void confirmError(Function function, ValueEval xArray, ValueEval yArray, ErrorEval expectedError) { + ValueEval result = invoke(function, xArray, yArray); assertEquals(ErrorEval.class, result.getClass()); assertEquals(expectedError.getErrorCode(), ((ErrorEval)result).getErrorCode()); } - private void confirmError(Eval xArray, Eval yArray, ErrorEval expectedError) { + private void confirmError(ValueEval xArray, ValueEval yArray, ErrorEval expectedError) { confirmError(SUM_SQUARES, xArray, yArray, expectedError); confirmError(DIFF_SQUARES, xArray, yArray, expectedError); confirmError(SUM_SQUARES_OF_DIFFS, xArray, yArray, expectedError); } - + public void testBasic() { ValueEval[] xValues = { - new NumberEval(1), - new NumberEval(2), + new NumberEval(1), + new NumberEval(2), }; ValueEval areaEvalX = createAreaEval(xValues); confirm(SUM_SQUARES, areaEvalX, areaEvalX, 10.0); @@ -66,27 +65,27 @@ public final class TestXYNumericFunction extends TestCase { confirm(SUM_SQUARES_OF_DIFFS, areaEvalX, areaEvalX, 0.0); ValueEval[] yValues = { - new NumberEval(3), - new NumberEval(4), + new NumberEval(3), + new NumberEval(4), }; ValueEval areaEvalY = createAreaEval(yValues); confirm(SUM_SQUARES, areaEvalX, areaEvalY, 30.0); confirm(DIFF_SQUARES, areaEvalX, areaEvalY, -20.0); confirm(SUM_SQUARES_OF_DIFFS, areaEvalX, areaEvalY, 8.0); } - + /** * number of items in array is not limited to 30 */ public void testLargeArrays() { ValueEval[] xValues = createMockNumberArray(100, 3); ValueEval[] yValues = createMockNumberArray(100, 2); - + confirm(SUM_SQUARES, createAreaEval(xValues), createAreaEval(yValues), 1300.0); confirm(DIFF_SQUARES, createAreaEval(xValues), createAreaEval(yValues), 500.0); confirm(SUM_SQUARES_OF_DIFFS, createAreaEval(xValues), createAreaEval(yValues), 100.0); } - + private ValueEval[] createMockNumberArray(int size, double value) { ValueEval[] result = new ValueEval[size]; @@ -103,20 +102,20 @@ public final class TestXYNumericFunction extends TestCase { public void testErrors() { ValueEval[] xValues = { - ErrorEval.REF_INVALID, - new NumberEval(2), + ErrorEval.REF_INVALID, + new NumberEval(2), }; ValueEval areaEvalX = createAreaEval(xValues); ValueEval[] yValues = { - new NumberEval(2), - ErrorEval.NULL_INTERSECTION, + new NumberEval(2), + ErrorEval.NULL_INTERSECTION, }; ValueEval areaEvalY = createAreaEval(yValues); ValueEval[] zValues = { // wrong size - new NumberEval(2), + new NumberEval(2), }; ValueEval areaEvalZ = createAreaEval(zValues); - + // if either arg is an error, that error propagates confirmError(ErrorEval.REF_INVALID, ErrorEval.NAME_INVALID, ErrorEval.REF_INVALID); confirmError(areaEvalX, ErrorEval.NAME_INVALID, ErrorEval.NAME_INVALID); @@ -128,10 +127,9 @@ public final class TestXYNumericFunction extends TestCase { // any error in an array item propagates up 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); - } }