private void validateReference(bool abs, AreaPtg ref1) { Assert.AreEqual(abs, !ref1.IsFirstColRelative, "First column reference is not " + (abs ? "absolute" : "relative")); Assert.AreEqual(abs, !ref1.IsLastColRelative, "Last column reference is not " + (abs ? "absolute" : "relative")); Assert.AreEqual(abs, !ref1.IsFirstRowRelative, "First row reference is not " + (abs ? "absolute" : "relative")); Assert.AreEqual(abs, !ref1.IsLastRowRelative, "Last row reference is not " + (abs ? "absolute" : "relative")); }
public void TestGetValue_bug44950() { // TODO - this Test probably isn't Testing much anymore AreaPtg ptg = new AreaPtg("B2:D3"); NumberEval one = new NumberEval(1); ValueEval[] values = { one, new NumberEval(2), new NumberEval(3), new NumberEval(4), new NumberEval(5), new NumberEval(6), }; AreaEval ae = EvalFactory.CreateAreaEval(ptg, values); if (one == ae.GetAbsoluteValue(1, 2)) { throw new AssertionException("Identified bug 44950 a"); } Confirm(1, ae, 1, 1); Confirm(2, ae, 1, 2); Confirm(3, ae, 1, 3); Confirm(4, ae, 2, 1); Confirm(5, ae, 2, 2); Confirm(6, ae, 2, 3); }
private static void resetColumns(AreaPtg aptg) { int fc = aptg.FirstColumn; int lc = aptg.LastColumn; aptg.FirstColumn = (fc); aptg.LastColumn = (lc); Assert.AreEqual(fc, aptg.FirstColumn); Assert.AreEqual(lc, aptg.LastColumn); }
public void SetUp() { short firstRow = 5; short lastRow = 13; short firstCol = 7; short lastCol = 17; relative = new AreaPtg(firstRow, lastRow, firstCol, lastCol, true, true, true, true); absolute = new AreaPtg(firstRow, lastRow, firstCol, lastCol, false, false, false, false); }
/** * Creates a dummy AreaEval * @param values empty (<code>null</code>) entries in this array will be Converted to NumberEval.ZERO */ public static AreaEval CreateAreaEval(AreaPtg areaPtg, ValueEval[] values) { int nCols = areaPtg.LastColumn - areaPtg.FirstColumn + 1; int nRows = areaPtg.LastRow - areaPtg.FirstRow + 1; int nExpected = nRows * nCols; if (values.Length != nExpected) { throw new SystemException("Expected " + nExpected + " values but got " + values.Length); } for (int i = 0; i < nExpected; i++) { if (values[i] == null) { values[i] = NumberEval.ZERO; } } return new MockAreaEval(areaPtg, values); }
public void TestAbsoluteRelativeRefs() { AreaPtg sca1 = new AreaPtg(4, 5, 6, 7, true, false, true, false); AreaPtg sca2 = new AreaPtg(4, 5, 6, 7, false, true, false, true); AreaPtg sca3 = new AreaPtg(5, 5, 7, 7, true, false, true, false); AreaPtg sca4 = new AreaPtg(5, 5, 7, 7, false, true, false, true); Assert.AreEqual("G5:$H$6", sca1.ToFormulaString(), "first rel., last abs."); Assert.AreEqual("$G$5:H6", sca2.ToFormulaString(), "first abs., last rel."); Assert.AreEqual("H6:$H$6", sca3.ToFormulaString(), "first rel., last abs."); Assert.AreEqual("$H$6:H6", sca4.ToFormulaString(), "first abs., last rel."); AreaPtg cla1 = CloneArea(sca1); AreaPtg cla2 = CloneArea(sca2); AreaPtg cla3 = CloneArea(sca3); AreaPtg cla4 = CloneArea(sca4); Assert.AreEqual("G5:$H$6", cla1.ToFormulaString(), "first rel., last abs."); Assert.AreEqual("$G$5:H6", cla2.ToFormulaString(), "first abs., last rel."); Assert.AreEqual("H6:$H$6", cla3.ToFormulaString(), "first rel., last abs."); Assert.AreEqual("$H$6:H6", cla4.ToFormulaString(), "first abs., last rel."); }
public void TestColumnOperand() { short firstRow = (short)8; short lastRow = (short)12; short colNum = (short)5; AreaPtg areaPtg = new AreaPtg(firstRow, lastRow, colNum, colNum, false, false, false, false); ValueEval[] values = { new NumberEval(27), new NumberEval(29), new NumberEval(35), // value in row 10 new NumberEval(37), new NumberEval(38), }; ValueEval[] args = { EvalFactory.CreateAreaEval(areaPtg, values), }; double result = NumericFunctionInvoker.Invoke(EvalInstances.UnaryPlus, args, 10, (short)20); Assert.AreEqual(35, result, 0); }
private static void ConfirmAreaShift(AreaPtg aptg, int firstRowMoved, int lastRowMoved, int numberRowsMoved, int expectedAreaFirstRow, int expectedAreaLastRow) { FormulaShifter fs = FormulaShifter.CreateForRowShift(0, firstRowMoved, lastRowMoved, numberRowsMoved); bool expectedChanged = aptg.FirstRow != expectedAreaFirstRow || aptg.LastRow != expectedAreaLastRow; AreaPtg copyPtg = (AreaPtg)aptg.Copy(); // clone so we can re-use aptg in calling method Ptg[] ptgs = { copyPtg, }; bool actualChanged = fs.AdjustFormula(ptgs, 0); if (expectedAreaFirstRow < 0) { Assert.AreEqual(typeof(AreaErrPtg), ptgs[0].GetType()); return; } Assert.AreEqual(expectedChanged, actualChanged); Assert.AreEqual(copyPtg, ptgs[0]); // expected to change in place (although this is not a strict requirement) Assert.AreEqual(expectedAreaFirstRow, copyPtg.FirstRow); Assert.AreEqual(expectedAreaLastRow, copyPtg.LastRow); }
/** * Creates a dummy AreaEval * @param values empty (<code>null</code>) entries in this array will be Converted to NumberEval.ZERO */ public static AreaEval CreateAreaEval(String areaRefStr, ValueEval[] values) { AreaPtg areaPtg = new AreaPtg(areaRefStr); return CreateAreaEval(areaPtg, values); }
private AreaPtg CloneArea(AreaPtg a) { return new AreaPtg( a.FirstRow, a.LastRow, a.FirstColumn, a.LastColumn, a.IsFirstRowRelative, a.IsLastRowRelative, a.IsFirstColRelative, a.IsLastColRelative ); }
/** * * @param sheetIden may be <code>null</code> * @param part1 * @param part2 may be <code>null</code> */ private ParseNode CreateAreaRefParseNode(SheetIdentifier sheetIden, SimpleRangePart part1, SimpleRangePart part2) { int extIx; if (sheetIden == null) { extIx = Int32.MinValue; } else { String sName = sheetIden.SheetID.Name; if (sheetIden.BookName == null) { extIx = _book.GetExternalSheetIndex(sName); } else { extIx = _book.GetExternalSheetIndex(sheetIden.BookName, sName); } } Ptg ptg; if (part2 == null) { CellReference cr = part1.getCellReference(); if (sheetIden == null) { ptg = new RefPtg(cr); } else { ptg = new Ref3DPtg(cr, extIx); } } else { AreaReference areaRef = CreateAreaRef(part1, part2); if (sheetIden == null) { ptg = new AreaPtg(areaRef); } else { ptg = new Area3DPtg(areaRef, extIx); } } return new ParseNode(ptg); }
private static CellRangeAddress ShiftRange(FormulaShifter Shifter, CellRangeAddress cra, int currentExternSheetIx) { // FormulaShifter works well in terms of Ptgs - so convert CellRangeAddress to AreaPtg (and back) here AreaPtg aptg = new AreaPtg(cra.FirstRow, cra.LastRow, cra.FirstColumn, cra.LastColumn, false, false, false, false); Ptg[] ptgs = { aptg, }; if (!Shifter.AdjustFormula(ptgs, currentExternSheetIx)) { return cra; } Ptg ptg0 = ptgs[0]; if (ptg0 is AreaPtg) { AreaPtg bptg = (AreaPtg)ptg0; return new CellRangeAddress(bptg.FirstRow, bptg.LastRow, bptg.FirstColumn, bptg.LastColumn); } if (ptg0 is AreaErrPtg) { return null; } throw new InvalidOperationException("Unexpected Shifted ptg class (" + ptg0.GetType().Name + ")"); }
/** * * @param sheetIden may be <code>null</code> * @param part1 * @param part2 may be <code>null</code> */ private ParseNode CreateAreaRefParseNode(SheetIdentifier sheetIden, SimpleRangePart part1, SimpleRangePart part2) { Ptg ptg; if (part2 == null) { CellReference cr = part1.CellReference; if (sheetIden == null) { ptg = new RefPtg(cr); } else { ptg = _book.Get3DReferencePtg(cr, sheetIden); } } else { AreaReference areaRef = CreateAreaRef(part1, part2); if (sheetIden == null) { ptg = new AreaPtg(areaRef); } else { ptg = _book.Get3DReferencePtg(areaRef, sheetIden); } } return new ParseNode(ptg); }