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