blob: b9a419cbf7fe454ec22710000e283724b1bc9c8d [file] [log] [blame]
using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OfficeOpenXml.FormulaParsing;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
using OfficeOpenXml.FormulaParsing.ExcelUtilities;
using EPPlusTest.FormulaParsing.TestHelpers;
using OfficeOpenXml.FormulaParsing.Excel;
using OfficeOpenXml;
using OfficeOpenXml.FormulaParsing.Exceptions;
namespace EPPlusTest.Excel.Functions
{
[TestClass]
public class SubtotalTests
{
private ParsingContext _context;
[TestInitialize]
public void Setup()
{
_context = ParsingContext.Create();
_context.Scopes.NewScope(RangeAddress.Empty);
}
[TestMethod, ExpectedException(typeof(ExcelErrorValueException))]
public void ShouldThrowIfInvalidFuncNumber()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(139, 1);
func.Execute(args, _context);
}
[TestMethod]
public void ShouldCalculateAverageWhenCalcTypeIs1()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(1, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(30d, result.Result);
}
[TestMethod]
public void ShouldCalculateCountWhenCalcTypeIs2()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(2, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(5d, result.Result);
}
[TestMethod]
public void ShouldCalculateCountAWhenCalcTypeIs3()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(3, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(5d, result.Result);
}
[TestMethod]
public void ShouldCalculateMaxWhenCalcTypeIs4()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(4, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(50d, result.Result);
}
[TestMethod]
public void ShouldCalculateMinWhenCalcTypeIs5()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(5, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(10d, result.Result);
}
[TestMethod]
public void ShouldCalculateProductWhenCalcTypeIs6()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(6, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(12000000d, result.Result);
}
[TestMethod]
public void ShouldCalculateStdevWhenCalcTypeIs7()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(7, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
var resultRounded = Math.Round((double)result.Result, 5);
Assert.AreEqual(15.81139d, resultRounded);
}
[TestMethod]
public void ShouldCalculateStdevPWhenCalcTypeIs8()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(8, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
var resultRounded = Math.Round((double)result.Result, 8);
Assert.AreEqual(14.14213562, resultRounded);
}
[TestMethod]
public void ShouldCalculateSumWhenCalcTypeIs9()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(9, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(150d, result.Result);
}
[TestMethod]
public void ShouldCalculateVarWhenCalcTypeIs10()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(10, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(250d, result.Result);
}
[TestMethod]
public void ShouldCalculateVarPWhenCalcTypeIs11()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(11, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(200d, result.Result);
}
[TestMethod]
public void ShouldCalculateAverageWhenCalcTypeIs101()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(101, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(30d, result.Result);
}
[TestMethod]
public void ShouldCalculateCountWhenCalcTypeIs102()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(102, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(5d, result.Result);
}
[TestMethod]
public void ShouldCalculateCountAWhenCalcTypeIs103()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(103, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(5d, result.Result);
}
[TestMethod]
public void ShouldCalculateMaxWhenCalcTypeIs104()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(104, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(50d, result.Result);
}
[TestMethod]
public void ShouldCalculateMinWhenCalcTypeIs105()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(105, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(10d, result.Result);
}
[TestMethod]
public void ShouldCalculateProductWhenCalcTypeIs106()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(106, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(12000000d, result.Result);
}
[TestMethod]
public void ShouldCalculateStdevWhenCalcTypeIs107()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(107, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
var resultRounded = Math.Round((double)result.Result, 5);
Assert.AreEqual(15.81139d, resultRounded);
}
[TestMethod]
public void ShouldCalculateStdevPWhenCalcTypeIs108()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(108, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
var resultRounded = Math.Round((double)result.Result, 8);
Assert.AreEqual(14.14213562, resultRounded);
}
[TestMethod]
public void ShouldCalculateSumWhenCalcTypeIs109()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(109, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(150d, result.Result);
}
[TestMethod]
public void ShouldCalculateVarWhenCalcTypeIs110()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(110, 10, 20, 30, 40, 50, 51);
args.Last().SetExcelStateFlag(ExcelCellState.HiddenCell);
var result = func.Execute(args, _context);
Assert.AreEqual(250d, result.Result);
}
[TestMethod]
public void ShouldCalculateVarPWhenCalcTypeIs111()
{
var func = new Subtotal();
var args = FunctionsHelper.CreateArgs(111, 10, 20, 30, 40, 50);
var result = func.Execute(args, _context);
Assert.AreEqual(200d, result.Result);
}
}
}