|  | using System; | 
|  | using Microsoft.VisualStudio.TestTools.UnitTesting; | 
|  | using OfficeOpenXml; | 
|  |  | 
|  | namespace EPPlusTest.FormulaParsing.IntegrationTests.BuiltInFunctions.ExcelRanges | 
|  | { | 
|  | [TestClass] | 
|  | public class MathExcelRangeTests | 
|  | { | 
|  | private ExcelPackage _package; | 
|  | private ExcelWorksheet _worksheet; | 
|  |  | 
|  | [TestInitialize] | 
|  | public void Initialize() | 
|  | { | 
|  | _package = new ExcelPackage(); | 
|  | _worksheet = _package.Workbook.Worksheets.Add("Test"); | 
|  |  | 
|  | _worksheet.Cells["A1"].Value = 1; | 
|  | _worksheet.Cells["A2"].Value = 3; | 
|  | _worksheet.Cells["A3"].Value = 6; | 
|  | } | 
|  |  | 
|  | [TestCleanup] | 
|  | public void Cleanup() | 
|  | { | 
|  | _package.Dispose(); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void AbsShouldReturn3() | 
|  | { | 
|  | _worksheet.Cells["A4"].Formula = "ABS(A2)"; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A4"].Value; | 
|  | Assert.AreEqual(3d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void CountShouldReturn3() | 
|  | { | 
|  | _worksheet.Cells["A4"].Formula = "COUNT(A1:A3)"; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A4"].Value; | 
|  | Assert.AreEqual(3d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void CountShouldReturn2IfACellValueIsNull() | 
|  | { | 
|  | _worksheet.Cells["A2"].Value = null; | 
|  | _worksheet.Cells["A4"].Formula = "COUNT(A1:A3)"; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A4"].Value; | 
|  | Assert.AreEqual(2d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void CountAShouldReturn3() | 
|  | { | 
|  | _worksheet.Cells["A4"].Formula = "COUNTA(A1:A3)"; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A4"].Value; | 
|  | Assert.AreEqual(3d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void CountIfShouldReturnCorrectResult() | 
|  | { | 
|  | _worksheet.Cells["A4"].Formula = "COUNTIF(A1:A3, \">2\")"; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A4"].Value; | 
|  | Assert.AreEqual(2d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void MaxShouldReturn6() | 
|  | { | 
|  | _worksheet.Cells["A4"].Formula = "Max(A1:A3)"; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A4"].Value; | 
|  | Assert.AreEqual(6d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void MinShouldReturn1() | 
|  | { | 
|  | _worksheet.Cells["A4"].Formula = "Min(A1:A3)"; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A4"].Value; | 
|  | Assert.AreEqual(1d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void AverageShouldReturn3Point333333() | 
|  | { | 
|  | _worksheet.Cells["A4"].Formula = "Average(A1:A3)"; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A4"].Value; | 
|  | Assert.AreEqual(3d + (1d/3d), result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void AverageIfShouldHandleSingleRangeNumericExpressionMatch() | 
|  | { | 
|  | _worksheet.Cells["A4"].Value = "B"; | 
|  | _worksheet.Cells["A5"].Value = 3; | 
|  | _worksheet.Cells["A6"].Formula = "AverageIf(A1:A5,\">1\")"; | 
|  | _worksheet.Calculate(); | 
|  | Assert.AreEqual(4d, _worksheet.Cells["A6"].Value); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void AverageIfShouldHandleSingleRangeStringMatch() | 
|  | { | 
|  | _worksheet.Cells["A4"].Value = "ABC"; | 
|  | _worksheet.Cells["A5"].Value = "3"; | 
|  | _worksheet.Cells["A6"].Formula = "AverageIf(A1:A5,\">1\")"; | 
|  | _worksheet.Calculate(); | 
|  | Assert.AreEqual(4.5d, _worksheet.Cells["A6"].Value); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void AverageIfShouldHandleLookupRangeStringMatch() | 
|  | { | 
|  | _worksheet.Cells["A1"].Value = "abc"; | 
|  | _worksheet.Cells["A2"].Value = "abc"; | 
|  | _worksheet.Cells["A3"].Value = "def"; | 
|  | _worksheet.Cells["A4"].Value = "def"; | 
|  | _worksheet.Cells["A5"].Value = "abd"; | 
|  |  | 
|  | _worksheet.Cells["B1"].Value = 1; | 
|  | _worksheet.Cells["B2"].Value = 3; | 
|  | _worksheet.Cells["B3"].Value = 5; | 
|  | _worksheet.Cells["B4"].Value = 6; | 
|  | _worksheet.Cells["B5"].Value = 7; | 
|  |  | 
|  | _worksheet.Cells["A6"].Formula = "AverageIf(A1:A5,\"abc\",B1:B5)"; | 
|  | _worksheet.Calculate(); | 
|  | Assert.AreEqual(2d, _worksheet.Cells["A6"].Value); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void AverageIfShouldHandleLookupRangeStringNumericMatch() | 
|  | { | 
|  | _worksheet.Cells["A1"].Value = 1; | 
|  | _worksheet.Cells["A2"].Value = 3; | 
|  | _worksheet.Cells["A3"].Value = 3; | 
|  | _worksheet.Cells["A4"].Value = 5; | 
|  | _worksheet.Cells["A5"].Value = 2; | 
|  |  | 
|  | _worksheet.Cells["B1"].Value = 3; | 
|  | _worksheet.Cells["B2"].Value = 3; | 
|  | _worksheet.Cells["B3"].Value = 2; | 
|  | _worksheet.Cells["B4"].Value = 1; | 
|  | _worksheet.Cells["B5"].Value = 8; | 
|  |  | 
|  | _worksheet.Cells["A6"].Formula = "AverageIf(A1:A5,\">2\",B1:B5)"; | 
|  | _worksheet.Calculate(); | 
|  | Assert.AreEqual(2d, _worksheet.Cells["A6"].Value); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void AverageIfShouldHandleLookupRangeStringWildCardMatch() | 
|  | { | 
|  | _worksheet.Cells["A1"].Value = "abc"; | 
|  | _worksheet.Cells["A2"].Value = "abc"; | 
|  | _worksheet.Cells["A3"].Value = "def"; | 
|  | _worksheet.Cells["A4"].Value = "def"; | 
|  | _worksheet.Cells["A5"].Value = "abd"; | 
|  |  | 
|  | _worksheet.Cells["B1"].Value = 1; | 
|  | _worksheet.Cells["B2"].Value = 3; | 
|  | _worksheet.Cells["B3"].Value = 5; | 
|  | _worksheet.Cells["B4"].Value = 6; | 
|  | _worksheet.Cells["B5"].Value = 8; | 
|  |  | 
|  | _worksheet.Cells["A6"].Formula = "AverageIf(A1:A5, \"ab*\",B1:B5)"; | 
|  | _worksheet.Calculate(); | 
|  | Assert.AreEqual(4d, _worksheet.Cells["A6"].Value); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void SumProductWithRange() | 
|  | { | 
|  | _worksheet.Cells["A1"].Value = 1; | 
|  | _worksheet.Cells["A2"].Value = 2; | 
|  | _worksheet.Cells["A3"].Value = 3; | 
|  | _worksheet.Cells["B1"].Value = 5; | 
|  | _worksheet.Cells["B2"].Value = 6; | 
|  | _worksheet.Cells["B3"].Value = 4; | 
|  | _worksheet.Cells["A4"].Formula = "SUMPRODUCT(A1:A3,B1:B3)"; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A4"].Value; | 
|  | Assert.AreEqual(29d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void SumProductWithRangeAndValues() | 
|  | { | 
|  | _worksheet.Cells["A1"].Value = 1; | 
|  | _worksheet.Cells["A2"].Value = 2; | 
|  | _worksheet.Cells["A3"].Value = 3; | 
|  | _worksheet.Cells["B1"].Value = 5; | 
|  | _worksheet.Cells["B2"].Value = 6; | 
|  | _worksheet.Cells["B3"].Value = 4; | 
|  | _worksheet.Cells["A4"].Formula = "SUMPRODUCT(A1:A3,B1:B3,{2,4,1})"; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A4"].Value; | 
|  | Assert.AreEqual(70d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void SignShouldReturn1WhenRefIsPositive() | 
|  | { | 
|  | _worksheet.Cells["A4"].Formula = "SIGN(A1)"; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A4"].Value; | 
|  | Assert.AreEqual(1d, result); | 
|  | } | 
|  |  | 
|  | [TestMethod] | 
|  | public void SubTotalShouldNotIncludeHiddenRow() | 
|  | { | 
|  | _worksheet.Row(2).Hidden = true; | 
|  | _worksheet.Cells["A4"].Formula = "SUBTOTAL(109,A1:A3)"; | 
|  | _worksheet.Calculate(); | 
|  | var result = _worksheet.Cells["A4"].Value; | 
|  | Assert.AreEqual(7d, result); | 
|  | } | 
|  | } | 
|  | } |