blob: f3f2c9ccf2a9e5ba5fe0e6ffa6d3fe4877618209 [file] [log] [blame]
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);
}
}
}