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