| 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); | |
| } | |
| } | |
| } |