| using System; | 
 | using System.IO; | 
 | using System.Text; | 
 | using System.Collections.Generic; | 
 | using System.Linq; | 
 | using Microsoft.VisualStudio.TestTools.UnitTesting; | 
 | using Rhino.Mocks; | 
 | using OfficeOpenXml.FormulaParsing; | 
 | using OfficeOpenXml; | 
 | namespace EPPlusTest.FormulaParsing.IntegrationTests.BuiltInFunctions | 
 | { | 
 |     [TestClass] | 
 |     public class SubtotalTests : FormulaParserTestBase | 
 |     { | 
 |         private ExcelWorksheet _worksheet; | 
 |         private ExcelPackage _package; | 
 |  | 
 |         [TestInitialize] | 
 |         public void Setup() | 
 |         { | 
 |             _package = new ExcelPackage(new MemoryStream()); | 
 |             _worksheet = _package.Workbook.Worksheets.Add("Test"); | 
 |             _parser = _worksheet.Workbook.FormulaParser; | 
 |         } | 
 |  | 
 |         [TestCleanup] | 
 |         public void Cleanup() | 
 |         { | 
 |             _package.Dispose(); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void SubtotalShouldNotIncludeSubtotalChildren_Avg() | 
 |         { | 
 |             _worksheet.Cells["A1"].Formula = "SUBTOTAL(1, A2:A3)"; | 
 |             _worksheet.Cells["A2"].Formula = "SUBTOTAL(9, A5:A6)"; | 
 |             _worksheet.Cells["A3"].Value = 2d; | 
 |             _worksheet.Cells["A5"].Value = 2d; | 
 |             _worksheet.Calculate(); | 
 |             var result = _worksheet.Cells["A1"].Value; | 
 |             Assert.AreEqual(2d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void SubtotalShouldNotIncludeSubtotalChildren_Count() | 
 |         { | 
 |             _worksheet.Cells["A1"].Formula = "SUBTOTAL(2, A2:A3)"; | 
 |             _worksheet.Cells["A2"].Formula = "SUBTOTAL(9, A5:A6)"; | 
 |             _worksheet.Cells["A3"].Value = 2d; | 
 |             _worksheet.Cells["A5"].Value = 2d; | 
 |             _worksheet.Calculate(); | 
 |             var result = _worksheet.Cells["A1"].Value; | 
 |             Assert.AreEqual(1d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void SubtotalShouldNotIncludeSubtotalChildren_CountA() | 
 |         { | 
 |             _worksheet.Cells["A1"].Formula = "SUBTOTAL(3, A2:A3)"; | 
 |             _worksheet.Cells["A2"].Formula = "SUBTOTAL(9, A5:A6)"; | 
 |             _worksheet.Cells["A3"].Value = 2d; | 
 |             _worksheet.Cells["A5"].Value = 2d; | 
 |             _worksheet.Calculate(); | 
 |             var result = _worksheet.Cells["A1"].Value; | 
 |             Assert.AreEqual(1d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void SubtotalShouldNotIncludeSubtotalChildren_Max() | 
 |         { | 
 |             _worksheet.Cells["A1"].Formula = "SUBTOTAL(4, A2:A3)"; | 
 |             _worksheet.Cells["A2"].Formula = "SUBTOTAL(9, A5:A6)"; | 
 |             _worksheet.Cells["A3"].Value = 2d; | 
 |             _worksheet.Cells["A5"].Value = 2d; | 
 |             _worksheet.Calculate(); | 
 |             var result = _worksheet.Cells["A1"].Value; | 
 |             Assert.AreEqual(2d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void SubtotalShouldNotIncludeSubtotalChildren_Min() | 
 |         { | 
 |             _worksheet.Cells["A1"].Formula = "SUBTOTAL(5, A2:A3)"; | 
 |             _worksheet.Cells["A2"].Formula = "SUBTOTAL(9, A5:A6)"; | 
 |             _worksheet.Cells["A3"].Value = 2d; | 
 |             _worksheet.Cells["A5"].Value = 2d; | 
 |             _worksheet.Calculate(); | 
 |             var result = _worksheet.Cells["A1"].Value; | 
 |             Assert.AreEqual(2d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void SubtotalShouldNotIncludeSubtotalChildren_Product() | 
 |         { | 
 |             _worksheet.Cells["A1"].Formula = "SUBTOTAL(6, A2:A3)"; | 
 |             _worksheet.Cells["A2"].Formula = "SUBTOTAL(9, A5:A6)"; | 
 |             _worksheet.Cells["A3"].Value = 2d; | 
 |             _worksheet.Cells["A5"].Value = 2d; | 
 |             _worksheet.Calculate(); | 
 |             var result = _worksheet.Cells["A1"].Value; | 
 |             Assert.AreEqual(2d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void SubtotalShouldNotIncludeSubtotalChildren_Stdev() | 
 |         { | 
 |             _worksheet.Cells["A1"].Formula = "SUBTOTAL(7, A2:A4)"; | 
 |             _worksheet.Cells["A2"].Formula = "SUBTOTAL(7, A5:A6)"; | 
 |             _worksheet.Cells["A3"].Value = 5d; | 
 |             _worksheet.Cells["A4"].Value = 4d; | 
 |             _worksheet.Cells["A5"].Value = 2d; | 
 |             _worksheet.Cells["A6"].Value = 4d; | 
 |             _worksheet.Calculate(); | 
 |             var result = _worksheet.Cells["A1"].Value; | 
 |             result = Math.Round((double)result, 9); | 
 |             Assert.AreEqual(0.707106781d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void SubtotalShouldNotIncludeSubtotalChildren_StdevP() | 
 |         { | 
 |             _worksheet.Cells["A1"].Formula = "SUBTOTAL(8, A2:A4)"; | 
 |             _worksheet.Cells["A2"].Formula = "SUBTOTAL(8, A5:A6)"; | 
 |             _worksheet.Cells["A3"].Value = 5d; | 
 |             _worksheet.Cells["A4"].Value = 4d; | 
 |             _worksheet.Cells["A5"].Value = 2d; | 
 |             _worksheet.Cells["A6"].Value = 4d; | 
 |             _worksheet.Calculate(); | 
 |             var result = _worksheet.Cells["A1"].Value; | 
 |             Assert.AreEqual(0.5d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void SubtotalShouldNotIncludeSubtotalChildren_Sum() | 
 |         { | 
 |             _worksheet.Cells["A1"].Formula = "SUBTOTAL(9, A2:A3)"; | 
 |             _worksheet.Cells["A2"].Formula = "SUBTOTAL(9, A5:A6)"; | 
 |             _worksheet.Cells["A3"].Value = 2d; | 
 |             _worksheet.Cells["A5"].Value = 2d; | 
 |             _worksheet.Calculate(); | 
 |             var result = _worksheet.Cells["A1"].Value; | 
 |             Assert.AreEqual(2d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void SubtotalShouldNotIncludeSubtotalChildren_Var() | 
 |         { | 
 |             _worksheet.Cells["A1"].Formula = "SUBTOTAL(9, A2:A4)"; | 
 |             _worksheet.Cells["A2"].Formula = "SUBTOTAL(8, A5:A6)"; | 
 |             _worksheet.Cells["A3"].Value = 5d; | 
 |             _worksheet.Cells["A4"].Value = 4d; | 
 |             _worksheet.Cells["A5"].Value = 2d; | 
 |             _worksheet.Cells["A6"].Value = 4d; | 
 |             _worksheet.Calculate(); | 
 |             var result = _worksheet.Cells["A1"].Value; | 
 |             Assert.AreEqual(9d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void SubtotalShouldNotIncludeSubtotalChildren_VarP() | 
 |         { | 
 |             _worksheet.Cells["A1"].Formula = "SUBTOTAL(10, A2:A4)"; | 
 |             _worksheet.Cells["A2"].Formula = "SUBTOTAL(8, A5:A6)"; | 
 |             _worksheet.Cells["A3"].Value = 5d; | 
 |             _worksheet.Cells["A4"].Value = 4d; | 
 |             _worksheet.Cells["A5"].Value = 2d; | 
 |             _worksheet.Cells["A6"].Value = 4d; | 
 |             _worksheet.Calculate(); | 
 |             var result = _worksheet.Cells["A1"].Value; | 
 |             Assert.AreEqual(0.5d, result); | 
 |         } | 
 |     } | 
 | } |