| using System; |
| using System.Text; |
| using System.Collections.Generic; |
| using System.Linq; |
| using Microsoft.VisualStudio.TestTools.UnitTesting; |
| using System.Threading; |
| using OfficeOpenXml.FormulaParsing; |
| using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; |
| using EPPlusTest.FormulaParsing.TestHelpers; |
| using OfficeOpenXml.FormulaParsing.Excel; |
| using OfficeOpenXml.FormulaParsing.Exceptions; |
| using OfficeOpenXml.FormulaParsing.Excel.Functions; |
| using OfficeOpenXml.FormulaParsing.ExcelUtilities; |
| using OfficeOpenXml; |
| |
| namespace EPPlusTest.Excel.Functions |
| { |
| [TestClass] |
| public class MathFunctionsTests |
| { |
| private ParsingContext _parsingContext; |
| |
| [TestInitialize] |
| public void Initialize() |
| { |
| _parsingContext = ParsingContext.Create(); |
| _parsingContext.Scopes.NewScope(RangeAddress.Empty); |
| } |
| |
| [TestMethod] |
| public void PiShouldReturnPIConstant() |
| { |
| var expectedValue = (double)Math.Round(Math.PI, 14); |
| var func = new Pi(); |
| var args = FunctionsHelper.CreateArgs(0); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(expectedValue, result.Result); |
| } |
| |
| [TestMethod] |
| public void AbsShouldReturnCorrectResult() |
| { |
| var expectedValue = 3d; |
| var func = new Abs(); |
| var args = FunctionsHelper.CreateArgs(-3d); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(expectedValue, result.Result); |
| } |
| |
| [TestMethod] |
| public void AsinShouldReturnCorrectResult() |
| { |
| const double expectedValue = 1.5708; |
| var func = new Asin(); |
| var args = FunctionsHelper.CreateArgs(1d); |
| var result = func.Execute(args, _parsingContext); |
| var rounded = Math.Round((double)result.Result, 4); |
| Assert.AreEqual(expectedValue, rounded); |
| } |
| |
| [TestMethod] |
| public void AsinhShouldReturnCorrectResult() |
| { |
| const double expectedValue = 0.0998; |
| var func = new Asinh(); |
| var args = FunctionsHelper.CreateArgs(0.1d); |
| var result = func.Execute(args, _parsingContext); |
| var rounded = Math.Round((double)result.Result, 4); |
| Assert.AreEqual(expectedValue, rounded); |
| } |
| |
| [TestMethod] |
| public void CeilingShouldRoundUpAccordingToParamsSignificanceLowerThan0() |
| { |
| var expectedValue = 22.36d; |
| var func = new Ceiling(); |
| var args = FunctionsHelper.CreateArgs(22.35d, 0.01); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(expectedValue, result.Result); |
| } |
| |
| [TestMethod] |
| public void CeilingShouldRoundTowardsZeroIfSignificanceAndNumberIsMinus0point1() |
| { |
| var expectedValue = -22.4d; |
| var func = new Ceiling(); |
| var args = FunctionsHelper.CreateArgs(-22.35d, -0.1); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(expectedValue, System.Math.Round((double)result.Result, 2)); |
| } |
| |
| [TestMethod] |
| public void CeilingShouldRoundUpAccordingToParamsSignificanceIs1() |
| { |
| var expectedValue = 23d; |
| var func = new Ceiling(); |
| var args = FunctionsHelper.CreateArgs(22.35d, 1); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(expectedValue, result.Result); |
| } |
| |
| [TestMethod] |
| public void CeilingShouldRoundUpAccordingToParamsSignificanceIs10() |
| { |
| var expectedValue = 30d; |
| var func = new Ceiling(); |
| var args = FunctionsHelper.CreateArgs(22.35d, 10); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(expectedValue, result.Result); |
| } |
| |
| [TestMethod] |
| public void CeilingShouldRoundTowardsZeroIfSignificanceAndNumberIsNegative() |
| { |
| var expectedValue = -30d; |
| var func = new Ceiling(); |
| var args = FunctionsHelper.CreateArgs(-22.35d, -10); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(expectedValue, result.Result); |
| } |
| |
| [TestMethod, ExpectedException(typeof(InvalidOperationException))] |
| public void CeilingShouldThrowExceptionIfNumberIsPositiveAndSignificanceIsNegative() |
| { |
| var expectedValue = 30d; |
| var func = new Ceiling(); |
| var args = FunctionsHelper.CreateArgs(22.35d, -1); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(expectedValue, result.Result); |
| } |
| |
| [TestMethod] |
| public void SumShouldCalculate2Plus3AndReturn5() |
| { |
| var func = new Sum(); |
| var args = FunctionsHelper.CreateArgs(2, 3); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(5d, result.Result); |
| } |
| |
| [TestMethod] |
| public void SumShouldCalculateEnumerableOf2Plus5Plus3AndReturn10() |
| { |
| var func = new Sum(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(2, 5), 3); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(10d, result.Result); |
| } |
| |
| [TestMethod] |
| public void SumShouldIgnoreHiddenValuesWhenIgnoreHiddenValuesIsSet() |
| { |
| var func = new Sum(); |
| func.IgnoreHiddenValues = true; |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(2, 5), 3, 4); |
| args.Last().SetExcelStateFlag(ExcelCellState.HiddenCell); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(10d, result.Result); |
| } |
| |
| [TestMethod] |
| public void SumIfShouldCalculateMatchingValuesOnly() |
| { |
| var func = new SumIf(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(3, 4, 5), "4"); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(4d, result.Result); |
| } |
| |
| [TestMethod] |
| public void SumIfShouldCalculateWithExpression() |
| { |
| var func = new SumIf(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(3, 4, 5), ">3"); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(9d, result.Result); |
| } |
| |
| |
| [TestMethod, ExpectedException(typeof(ExcelErrorValueException))] |
| public void SumIfShouldThrowIfCriteriaIsLargerThan255Chars() |
| { |
| var longString = "a"; |
| for (var x = 0; x < 256; x++) { longString = string.Concat(longString, "a"); } |
| var func = new SumIf(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(3, 4, 5), longString, (FunctionsHelper.CreateArgs(3, 2, 1))); |
| var result = func.Execute(args, _parsingContext); |
| } |
| |
| [TestMethod] |
| public void SumSqShouldCalculateArray() |
| { |
| var func = new Sumsq(); |
| var args = FunctionsHelper.CreateArgs(2, 4); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(20d, result.Result); |
| } |
| |
| [TestMethod] |
| public void SumSqShouldIncludeTrueAsOne() |
| { |
| var func = new Sumsq(); |
| var args = FunctionsHelper.CreateArgs(2, 4, true); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(21d, result.Result); |
| } |
| |
| [TestMethod] |
| public void SumSqShouldNoCountTrueTrueInArray() |
| { |
| var func = new Sumsq(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(2, 4, true)); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(20d, result.Result); |
| } |
| |
| [TestMethod] |
| public void StdevShouldCalculateCorrectResult() |
| { |
| var func = new Stdev(); |
| var args = FunctionsHelper.CreateArgs(1, 3, 5); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(2d, result.Result); |
| } |
| |
| [TestMethod] |
| public void StdevShouldIgnoreHiddenValuesWhenIgnoreHiddenValuesIsSet() |
| { |
| var func = new Stdev(); |
| func.IgnoreHiddenValues = true; |
| var args = FunctionsHelper.CreateArgs(1, 3, 5, 6); |
| args.Last().SetExcelStateFlag(ExcelCellState.HiddenCell); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(2d, result.Result); |
| } |
| |
| [TestMethod] |
| public void StdevPShouldCalculateCorrectResult() |
| { |
| var func = new StdevP(); |
| var args = FunctionsHelper.CreateArgs(2, 3, 4); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(0.8165d, Math.Round((double)result.Result, 5)); |
| } |
| |
| [TestMethod] |
| public void StdevPShouldIgnoreHiddenValuesWhenIgnoreHiddenValuesIsSet() |
| { |
| var func = new StdevP(); |
| func.IgnoreHiddenValues = true; |
| var args = FunctionsHelper.CreateArgs(2, 3, 4, 165); |
| args.Last().SetExcelStateFlag(ExcelCellState.HiddenCell); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(0.8165d, Math.Round((double)result.Result, 5)); |
| } |
| |
| [TestMethod] |
| public void ExpShouldCalculateCorrectResult() |
| { |
| var func = new Exp(); |
| var args = FunctionsHelper.CreateArgs(4); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(54.59815003d, System.Math.Round((double)result.Result, 8)); |
| } |
| |
| [TestMethod] |
| public void MaxShouldCalculateCorrectResult() |
| { |
| var func = new Max(); |
| var args = FunctionsHelper.CreateArgs(4, 2, 5, 2); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(5d, result.Result); |
| } |
| |
| [TestMethod] |
| public void MaxShouldIgnoreHiddenValuesIfIgnoreHiddenValuesIsTrue() |
| { |
| var func = new Max(); |
| func.IgnoreHiddenValues = true; |
| var args = FunctionsHelper.CreateArgs(4, 2, 5, 2); |
| args.ElementAt(2).SetExcelStateFlag(ExcelCellState.HiddenCell); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(4d, result.Result); |
| } |
| |
| [TestMethod] |
| public void MaxaShouldCalculateCorrectResult() |
| { |
| var func = new Maxa(); |
| var args = FunctionsHelper.CreateArgs(-1, 0, 1); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(1d, result.Result); |
| } |
| |
| [TestMethod] |
| public void MaxaShouldCalculateCorrectResultUsingBool() |
| { |
| var func = new Maxa(); |
| var args = FunctionsHelper.CreateArgs(-1, 0, true); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(1d, result.Result); |
| } |
| |
| [TestMethod] |
| public void MaxaShouldCalculateCorrectResultUsingString() |
| { |
| var func = new Maxa(); |
| var args = FunctionsHelper.CreateArgs(-1, "test"); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(0d, result.Result); |
| } |
| |
| [TestMethod] |
| public void MinShouldCalculateCorrectResult() |
| { |
| var func = new Min(); |
| var args = FunctionsHelper.CreateArgs(4, 2, 5, 2); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(2d, result.Result); |
| } |
| |
| [TestMethod] |
| public void MinShouldIgnoreHiddenValuesIfIgnoreHiddenValuesIsTrue() |
| { |
| var func = new Min(); |
| func.IgnoreHiddenValues = true; |
| var args = FunctionsHelper.CreateArgs(4, 2, 5, 3); |
| args.ElementAt(1).SetExcelStateFlag(ExcelCellState.HiddenCell); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(3d, result.Result); |
| } |
| |
| [TestMethod] |
| public void AverageShouldCalculateCorrectResult() |
| { |
| var expectedResult = (4d + 2d + 5d + 2d) / 4d; |
| var func = new Average(); |
| var args = FunctionsHelper.CreateArgs(4d, 2d, 5d, 2d); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(expectedResult, result.Result); |
| } |
| |
| [TestMethod] |
| public void AverageShouldCalculateCorrectResultWithEnumerableAndBoolMembers() |
| { |
| var expectedResult = (4d + 2d + 5d + 2d + 1d) / 5d; |
| var func = new Average(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(4d, 2d), 5d, 2d, true); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(expectedResult, result.Result); |
| } |
| |
| [TestMethod] |
| public void AverageShouldIgnoreHiddenFieldsIfIgnoreHiddenValuesIsTrue() |
| { |
| var expectedResult = (4d + 2d + 2d + 1d) / 4d; |
| var func = new Average(); |
| func.IgnoreHiddenValues = true; |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(4d, 2d), 5d, 2d, true); |
| args.ElementAt(1).SetExcelStateFlag(ExcelCellState.HiddenCell); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(expectedResult, result.Result); |
| } |
| |
| [TestMethod] |
| public void AverageShouldThrowDivByZeroExcelErrorValueIfEmptyArgs() |
| { |
| eErrorType errorType = eErrorType.Value; |
| |
| var func = new Average(); |
| var args = new FunctionArgument[0]; |
| try |
| { |
| func.Execute(args, _parsingContext); |
| } |
| catch (ExcelErrorValueException e) |
| { |
| errorType = e.ErrorValue.Type; |
| } |
| Assert.AreEqual(eErrorType.Div0, errorType); |
| } |
| |
| [TestMethod] |
| public void AverageAShouldCalculateCorrectResult() |
| { |
| var expectedResult = (4d + 2d + 5d + 2d) / 4d; |
| var func = new AverageA(); |
| var args = FunctionsHelper.CreateArgs(4d, 2d, 5d, 2d); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(expectedResult, result.Result); |
| } |
| |
| [TestMethod] |
| public void AverageAShouldIncludeTrueAs1() |
| { |
| var expectedResult = (4d + 2d + 5d + 2d + 1d) / 5d; |
| var func = new AverageA(); |
| var args = FunctionsHelper.CreateArgs(4d, 2d, 5d, 2d, true); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(expectedResult, result.Result); |
| } |
| |
| [TestMethod, ExpectedException(typeof(ExcelErrorValueException))] |
| public void AverageAShouldThrowValueExceptionIfNonNumericTextIsSupplied() |
| { |
| var func = new AverageA(); |
| var args = FunctionsHelper.CreateArgs(4d, 2d, 5d, 2d, "ABC"); |
| var result = func.Execute(args, _parsingContext); |
| } |
| |
| [TestMethod] |
| public void AverageAShouldCountValueAs0IfNonNumericTextIsSuppliedInArray() |
| { |
| var func = new AverageA(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(1d, 2d, 3d, "ABC")); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(1.5d,result.Result); |
| } |
| |
| [TestMethod] |
| public void AverageAShouldCountNumericStringWithValue() |
| { |
| var func = new AverageA(); |
| var args = FunctionsHelper.CreateArgs(4d, 2d, "9"); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(5d, result.Result); |
| } |
| |
| [TestMethod] |
| public void RoundShouldReturnCorrectResult() |
| { |
| var func = new Round(); |
| var args = FunctionsHelper.CreateArgs(2.3433, 3); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(2.343d, result.Result); |
| } |
| |
| [TestMethod] |
| public void RoundShouldReturnCorrectResultWhenNbrOfDecimalsIsNegative() |
| { |
| var func = new Round(); |
| var args = FunctionsHelper.CreateArgs(9333, -3); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(9000d, result.Result); |
| } |
| |
| [TestMethod] |
| public void FloorShouldReturnCorrectResultWhenSignificanceIsBetween0And1() |
| { |
| var func = new Floor(); |
| var args = FunctionsHelper.CreateArgs(26.75d, 0.1); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(26.7d, result.Result); |
| } |
| |
| [TestMethod] |
| public void FloorShouldReturnCorrectResultWhenSignificanceIs1() |
| { |
| var func = new Floor(); |
| var args = FunctionsHelper.CreateArgs(26.75d, 1); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(26d, result.Result); |
| } |
| |
| [TestMethod] |
| public void FloorShouldReturnCorrectResultWhenSignificanceIsMinus1() |
| { |
| var func = new Floor(); |
| var args = FunctionsHelper.CreateArgs(-26.75d, -1); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(-26d, result.Result); |
| } |
| |
| [TestMethod] |
| public void RandShouldReturnAValueBetween0and1() |
| { |
| var func = new Rand(); |
| var args = new FunctionArgument[0]; |
| var result1 = func.Execute(args, _parsingContext); |
| Assert.IsTrue(((double)result1.Result) > 0 && ((double) result1.Result) < 1); |
| var result2 = func.Execute(args, _parsingContext); |
| Assert.AreNotEqual(result1.Result, result2.Result, "The two numbers were the same"); |
| Assert.IsTrue(((double)result2.Result) > 0 && ((double)result2.Result) < 1); |
| } |
| |
| [TestMethod] |
| public void RandBetweenShouldReturnAnIntegerValueBetweenSuppliedValues() |
| { |
| var func = new RandBetween(); |
| var args = FunctionsHelper.CreateArgs(1, 5); |
| var result = func.Execute(args, _parsingContext); |
| CollectionAssert.Contains(new List<double> { 1d, 2d, 3d, 4d, 5d }, result.Result); |
| } |
| |
| [TestMethod] |
| public void RandBetweenShouldReturnAnIntegerValueBetweenSuppliedValuesWhenLowIsNegative() |
| { |
| var func = new RandBetween(); |
| var args = FunctionsHelper.CreateArgs(-5, 0); |
| var result = func.Execute(args, _parsingContext); |
| CollectionAssert.Contains(new List<double> { 0d, -1d, -2d, -3d, -4d, -5d }, result.Result); |
| } |
| |
| [TestMethod] |
| public void CountShouldReturnNumberOfNumericItems() |
| { |
| var func = new Count(); |
| var args = FunctionsHelper.CreateArgs(1d, 2m, 3, new DateTime(2012, 4, 1), "4"); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(5d, result.Result); |
| } |
| |
| [TestMethod] |
| public void CountShouldIncludeNumericStringsAndDatesInArray() |
| { |
| var func = new Count(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(1d, 2m, 3, new DateTime(2012, 4, 1), "4")); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(5d, result.Result); |
| } |
| |
| |
| [TestMethod] |
| public void CountShouldIncludeEnumerableMembers() |
| { |
| var func = new Count(); |
| var args = FunctionsHelper.CreateArgs(1d, FunctionsHelper.CreateArgs(12, 13)); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(3d, result.Result); |
| } |
| |
| [TestMethod, Ignore] |
| public void CountShouldIgnoreHiddenValuesIfIgnoreHiddenValuesIsTrue() |
| { |
| var func = new Count(); |
| func.IgnoreHiddenValues = true; |
| var args = FunctionsHelper.CreateArgs(1d, FunctionsHelper.CreateArgs(12, 13)); |
| args.ElementAt(0).SetExcelStateFlag(ExcelCellState.HiddenCell); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(2d, result.Result); |
| } |
| |
| [TestMethod] |
| public void CountAShouldReturnNumberOfNonWhitespaceItems() |
| { |
| var func = new CountA(); |
| var args = FunctionsHelper.CreateArgs(1d, 2m, 3, new DateTime(2012, 4, 1), "4", null, string.Empty); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(5d, result.Result); |
| } |
| |
| [TestMethod] |
| public void CountAShouldIncludeEnumerableMembers() |
| { |
| var func = new CountA(); |
| var args = FunctionsHelper.CreateArgs(1d, FunctionsHelper.CreateArgs(12, 13)); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(3d, result.Result); |
| } |
| |
| [TestMethod] |
| public void CountAShouldIgnoreHiddenValuesIfIgnoreHiddenValuesIsTrue() |
| { |
| var func = new CountA(); |
| func.IgnoreHiddenValues = true; |
| var args = FunctionsHelper.CreateArgs(1d, FunctionsHelper.CreateArgs(12, 13)); |
| args.ElementAt(0).SetExcelStateFlag(ExcelCellState.HiddenCell); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(2d, result.Result); |
| } |
| |
| [TestMethod] |
| public void CountIfShouldReturnNbrOfNumericItemsThatMatch() |
| { |
| var func = new CountIf(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(1d, 2d, 3d), ">1"); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(2d, result.Result); |
| } |
| |
| [TestMethod] |
| public void CountIfShouldReturnNbrOfAlphaNumItemsThatMatch() |
| { |
| var func = new CountIf(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs("Monday", "Tuesday", "Thursday"), "T*day"); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(2d, result.Result); |
| } |
| |
| [TestMethod] |
| public void ProductShouldMultiplyArguments() |
| { |
| var func = new Product(); |
| var args = FunctionsHelper.CreateArgs(2d, 2d, 4d); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(16d, result.Result); |
| } |
| |
| [TestMethod] |
| public void ProductShouldHandleEnumerable() |
| { |
| var func = new Product(); |
| var args = FunctionsHelper.CreateArgs(2d, 2d, FunctionsHelper.CreateArgs(4d, 2d)); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(32d, result.Result); |
| } |
| |
| [TestMethod] |
| public void ProductShouldIgnoreHiddenValuesIfIgnoreHiddenIsTrue() |
| { |
| var func = new Product(); |
| func.IgnoreHiddenValues = true; |
| var args = FunctionsHelper.CreateArgs(2d, 2d, FunctionsHelper.CreateArgs(4d, 2d)); |
| args.ElementAt(1).SetExcelStateFlag(ExcelCellState.HiddenCell); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(16d, result.Result); |
| } |
| |
| [TestMethod] |
| public void ProductShouldHandleFirstItemIsEnumerable() |
| { |
| var func = new Product(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(4d, 2d), 2d, 2d); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(32d, result.Result); |
| } |
| |
| [TestMethod] |
| public void VarShouldReturnCorrectResult() |
| { |
| var func = new Var(); |
| var args = FunctionsHelper.CreateArgs(1, 2, 3, 4); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(1.6667d, System.Math.Round((double)result.Result, 4)); |
| } |
| |
| [TestMethod] |
| public void VarShouldIgnoreHiddenValuesIfIgnoreHiddenIsTrue() |
| { |
| var func = new Var(); |
| func.IgnoreHiddenValues = true; |
| var args = FunctionsHelper.CreateArgs(1, 2, 3, 4, 9); |
| args.Last().SetExcelStateFlag(ExcelCellState.HiddenCell); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(1.6667d, System.Math.Round((double)result.Result, 4)); |
| } |
| |
| [TestMethod] |
| public void VarPShouldReturnCorrectResult() |
| { |
| var func = new VarP(); |
| var args = FunctionsHelper.CreateArgs(1, 2, 3, 4); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(1.25d, result.Result); |
| } |
| |
| [TestMethod] |
| public void VarPShouldIgnoreHiddenValuesIfIgnoreHiddenIsTrue() |
| { |
| var func = new VarP(); |
| func.IgnoreHiddenValues = true; |
| var args = FunctionsHelper.CreateArgs(1, 2, 3, 4, 9); |
| args.Last().SetExcelStateFlag(ExcelCellState.HiddenCell); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(1.25d, result.Result); |
| } |
| |
| [TestMethod] |
| public void ModShouldReturnCorrectResult() |
| { |
| var func = new Mod(); |
| var args = FunctionsHelper.CreateArgs(5, 2); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(1d, result.Result); |
| } |
| |
| [TestMethod] |
| public void CosShouldReturnCorrectResult() |
| { |
| var func = new Cos(); |
| var args = FunctionsHelper.CreateArgs(2); |
| var result = func.Execute(args, _parsingContext); |
| var roundedResult = Math.Round((double)result.Result, 9); |
| Assert.AreEqual(-0.416146837d, roundedResult); |
| } |
| |
| [TestMethod] |
| public void CosHShouldReturnCorrectResult() |
| { |
| var func = new Cosh(); |
| var args = FunctionsHelper.CreateArgs(2); |
| var result = func.Execute(args, _parsingContext); |
| var roundedResult = Math.Round((double)result.Result, 9); |
| Assert.AreEqual(3.762195691, roundedResult); |
| } |
| |
| [TestMethod] |
| public void AcosShouldReturnCorrectResult() |
| { |
| var func = new Acos(); |
| var args = FunctionsHelper.CreateArgs(0.1); |
| var result = func.Execute(args, _parsingContext); |
| var roundedResult = Math.Round((double)result.Result, 4); |
| Assert.AreEqual(1.4706, roundedResult); |
| } |
| |
| [TestMethod] |
| public void ACosHShouldReturnCorrectResult() |
| { |
| var func = new Acosh(); |
| var args = FunctionsHelper.CreateArgs(2); |
| var result = func.Execute(args, _parsingContext); |
| var roundedResult = Math.Round((double)result.Result, 3); |
| Assert.AreEqual(1.317, roundedResult); |
| } |
| |
| [TestMethod] |
| public void SinShouldReturnCorrectResult() |
| { |
| var func = new Sin(); |
| var args = FunctionsHelper.CreateArgs(2); |
| var result = func.Execute(args, _parsingContext); |
| var roundedResult = Math.Round((double)result.Result, 9); |
| Assert.AreEqual(0.909297427, roundedResult); |
| } |
| |
| [TestMethod] |
| public void SinhShouldReturnCorrectResult() |
| { |
| var func = new Sinh(); |
| var args = FunctionsHelper.CreateArgs(2); |
| var result = func.Execute(args, _parsingContext); |
| var roundedResult = Math.Round((double)result.Result, 9); |
| Assert.AreEqual(3.626860408d, roundedResult); |
| } |
| |
| [TestMethod] |
| public void TanShouldReturnCorrectResult() |
| { |
| var func = new Tan(); |
| var args = FunctionsHelper.CreateArgs(2); |
| var result = func.Execute(args, _parsingContext); |
| var roundedResult = Math.Round((double)result.Result, 9); |
| Assert.AreEqual(-2.185039863d, roundedResult); |
| } |
| |
| [TestMethod] |
| public void TanhShouldReturnCorrectResult() |
| { |
| var func = new Tanh(); |
| var args = FunctionsHelper.CreateArgs(2); |
| var result = func.Execute(args, _parsingContext); |
| var roundedResult = Math.Round((double)result.Result, 9); |
| Assert.AreEqual(0.96402758d, roundedResult); |
| } |
| |
| [TestMethod] |
| public void AtanShouldReturnCorrectResult() |
| { |
| var func = new Atan(); |
| var args = FunctionsHelper.CreateArgs(10); |
| var result = func.Execute(args, _parsingContext); |
| var roundedResult = Math.Round((double) result.Result, 9); |
| Assert.AreEqual(1.471127674d, roundedResult); |
| } |
| |
| [TestMethod] |
| public void Atan2ShouldReturnCorrectResult() |
| { |
| var func = new Atan2(); |
| var args = FunctionsHelper.CreateArgs(1,2); |
| var result = func.Execute(args, _parsingContext); |
| var roundedResult = Math.Round((double)result.Result, 9); |
| Assert.AreEqual(1.107148718d, roundedResult); |
| } |
| |
| [TestMethod] |
| public void AtanhShouldReturnCorrectResult() |
| { |
| var func = new Atanh(); |
| var args = FunctionsHelper.CreateArgs(0.1); |
| var result = func.Execute(args, _parsingContext); |
| var roundedResult = Math.Round((double)result.Result, 4); |
| Assert.AreEqual(0.1003d, roundedResult); |
| } |
| |
| [TestMethod] |
| public void LogShouldReturnCorrectResult() |
| { |
| var func = new Log(); |
| var args = FunctionsHelper.CreateArgs(2); |
| var result = func.Execute(args, _parsingContext); |
| var roundedResult = Math.Round((double)result.Result, 9); |
| Assert.AreEqual(0.301029996d, roundedResult); |
| } |
| |
| [TestMethod] |
| public void LogShouldReturnCorrectResultWithBase() |
| { |
| var func = new Log(); |
| var args = FunctionsHelper.CreateArgs(2, 2); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(1d, result.Result); |
| } |
| |
| [TestMethod] |
| public void Log10ShouldReturnCorrectResult() |
| { |
| var func = new Log10(); |
| var args = FunctionsHelper.CreateArgs(2); |
| var result = func.Execute(args, _parsingContext); |
| var roundedResult = Math.Round((double)result.Result, 9); |
| Assert.AreEqual(0.301029996d, roundedResult); |
| } |
| |
| [TestMethod] |
| public void LnShouldReturnCorrectResult() |
| { |
| var func = new Ln(); |
| var args = FunctionsHelper.CreateArgs(5); |
| var result = func.Execute(args, _parsingContext); |
| var roundedResult = Math.Round((double)result.Result, 5); |
| Assert.AreEqual(1.60944d, roundedResult); |
| } |
| |
| [TestMethod] |
| public void SqrtPiShouldReturnCorrectResult() |
| { |
| var func = new SqrtPi(); |
| var args = FunctionsHelper.CreateArgs(2); |
| var result = func.Execute(args, _parsingContext); |
| var roundedResult = Math.Round((double)result.Result, 9); |
| Assert.AreEqual(2.506628275d, roundedResult); |
| } |
| |
| [TestMethod] |
| public void SignShouldReturnMinus1IfArgIsNegative() |
| { |
| var func = new Sign(); |
| var args = FunctionsHelper.CreateArgs(-2); |
| var result = func.Execute(args, _parsingContext).Result; |
| Assert.AreEqual(-1d, result); |
| } |
| |
| [TestMethod] |
| public void SignShouldReturn1IfArgIsPositive() |
| { |
| var func = new Sign(); |
| var args = FunctionsHelper.CreateArgs(2); |
| var result = func.Execute(args, _parsingContext).Result; |
| Assert.AreEqual(1d, result); |
| } |
| |
| [TestMethod] |
| public void RounddownShouldReturnCorrectResultWithPositiveNumber() |
| { |
| var func = new Rounddown(); |
| var args = FunctionsHelper.CreateArgs(9.999, 2); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(9.99, result.Result); |
| } |
| |
| [TestMethod] |
| public void RounddownShouldHandleNegativeNumber() |
| { |
| var func = new Rounddown(); |
| var args = FunctionsHelper.CreateArgs(-9.999, 2); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(-9.99, result.Result); |
| } |
| |
| [TestMethod] |
| public void RounddownShouldHandleNegativeNumDigits() |
| { |
| var func = new Rounddown(); |
| var args = FunctionsHelper.CreateArgs(999.999, -2); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(900d, result.Result); |
| } |
| |
| [TestMethod] |
| public void RounddownShouldReturn0IfNegativeNumDigitsIsTooLarge() |
| { |
| var func = new Rounddown(); |
| var args = FunctionsHelper.CreateArgs(999.999, -4); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(0d, result.Result); |
| } |
| |
| [TestMethod] |
| public void RounddownShouldHandleZeroNumDigits() |
| { |
| var func = new Rounddown(); |
| var args = FunctionsHelper.CreateArgs(999.999, 0); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(999d, result.Result); |
| } |
| |
| [TestMethod] |
| public void RoundupShouldReturnCorrectResultWithPositiveNumber() |
| { |
| var func = new Roundup(); |
| var args = FunctionsHelper.CreateArgs(9.9911, 3); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(9.992, result.Result); |
| } |
| |
| [TestMethod] |
| public void RoundupShouldHandleNegativeNumDigits() |
| { |
| var func = new Roundup(); |
| var args = FunctionsHelper.CreateArgs(99123, -2); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(99200d, result.Result); |
| } |
| |
| [TestMethod] |
| public void RoundupShouldHandleZeroNumDigits() |
| { |
| var func = new Roundup(); |
| var args = FunctionsHelper.CreateArgs(999.999, 0); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(1000d, result.Result); |
| } |
| |
| [TestMethod] |
| public void TruncShouldReturnCorrectResult() |
| { |
| var func = new Trunc(); |
| var args = FunctionsHelper.CreateArgs(99.99); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(99d, result.Result); |
| } |
| |
| [TestMethod] |
| public void FactShouldRoundDownAndReturnCorrectResult() |
| { |
| var func = new Fact(); |
| var args = FunctionsHelper.CreateArgs(5.99); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(120d, result.Result); |
| } |
| |
| [TestMethod, ExpectedException(typeof (ExcelErrorValueException))] |
| public void FactShouldThrowWhenNegativeNumber() |
| { |
| var func = new Fact(); |
| var args = FunctionsHelper.CreateArgs(-1); |
| func.Execute(args, _parsingContext); |
| } |
| |
| [TestMethod] |
| public void QuotientShouldReturnCorrectResult() |
| { |
| var func = new Quotient(); |
| var args = FunctionsHelper.CreateArgs(5, 2); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(2, result.Result); |
| } |
| |
| [TestMethod, ExpectedException(typeof(ExcelErrorValueException))] |
| public void QuotientShouldThrowWhenDenomIs0() |
| { |
| var func = new Quotient(); |
| var args = FunctionsHelper.CreateArgs(1, 0); |
| func.Execute(args, _parsingContext); |
| } |
| |
| [TestMethod] |
| public void LargeShouldReturnTheLargestNumberIf1() |
| { |
| var func = new Large(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(1, 2, 3), 1); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(3d, result.Result); |
| } |
| |
| [TestMethod] |
| public void LargeShouldReturnTheSecondLargestNumberIf2() |
| { |
| var func = new Large(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(4, 1, 2, 3), 2); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(3d, result.Result); |
| } |
| |
| [TestMethod, ExpectedException(typeof(ExcelErrorValueException))] |
| public void LargeShouldThrowIfIndexOutOfBounds() |
| { |
| var func = new Large(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(4, 1, 2, 3), 6); |
| var result = func.Execute(args, _parsingContext); |
| } |
| |
| [TestMethod] |
| public void SmallShouldReturnTheSmallestNumberIf1() |
| { |
| var func = new Small(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(1, 2, 3), 1); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(1d, result.Result); |
| } |
| |
| [TestMethod] |
| public void SmallShouldReturnTheSecondSmallestNumberIf2() |
| { |
| var func = new Small(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(4, 1, 2, 3), 2); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(2d, result.Result); |
| } |
| |
| [TestMethod, ExpectedException(typeof(ExcelErrorValueException))] |
| public void SmallShouldThrowIfIndexOutOfBounds() |
| { |
| var func = new Small(); |
| var args = FunctionsHelper.CreateArgs(FunctionsHelper.CreateArgs(4, 1, 2, 3), 6); |
| var result = func.Execute(args, _parsingContext); |
| } |
| |
| [TestMethod, ExpectedException(typeof(ExcelErrorValueException))] |
| public void MedianShouldThrowIfNoArgs() |
| { |
| var func = new Median(); |
| var args = FunctionsHelper.Empty(); |
| func.Execute(args, _parsingContext); |
| } |
| |
| [TestMethod] |
| public void MedianShouldCalculateCorrectlyWithOneMember() |
| { |
| var func = new Median(); |
| var args = FunctionsHelper.CreateArgs(1); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(1d, result.Result); |
| } |
| |
| [TestMethod] |
| public void MedianShouldCalculateCorrectlyWithOddMembers() |
| { |
| var func = new Median(); |
| var args = FunctionsHelper.CreateArgs(3, 5, 1, 4, 2); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(3d, result.Result); |
| } |
| |
| [TestMethod] |
| public void MedianShouldCalculateCorrectlyWithEvenMembers() |
| { |
| var func = new Median(); |
| var args = FunctionsHelper.CreateArgs(1, 2, 3, 4); |
| var result = func.Execute(args, _parsingContext); |
| Assert.AreEqual(2.5d, result.Result); |
| } |
| } |
| } |