| using System; | 
 | using System.Text; | 
 | using System.Collections.Generic; | 
 | using System.Linq; | 
 | using Microsoft.VisualStudio.TestTools.UnitTesting; | 
 | using OfficeOpenXml.FormulaParsing; | 
 | using Rhino.Mocks; | 
 |  | 
 |  | 
 | namespace EPPlusTest.FormulaParsing.IntegrationTests | 
 | { | 
 |     [TestClass] | 
 |     public class BasicCalcTests : FormulaParserTestBase | 
 |     { | 
 |         [TestInitialize] | 
 |         public void Setup() | 
 |         { | 
 |             var excelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>(); | 
 |             _parser = new FormulaParser(excelDataProvider); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ShouldAddIntegersCorrectly() | 
 |         { | 
 |             var result = _parser.Parse("1 + 2"); | 
 |             Assert.AreEqual(3d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ShouldSubtractIntegersCorrectly() | 
 |         { | 
 |             var result = _parser.Parse("2 - 1"); | 
 |             Assert.AreEqual(1d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ShouldMultiplyIntegersCorrectly() | 
 |         { | 
 |             var result = _parser.Parse("2 * 3"); | 
 |             Assert.AreEqual(6d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ShouldDivideIntegersCorrectly() | 
 |         { | 
 |             var result = _parser.Parse("8 / 4"); | 
 |             Assert.AreEqual(2d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ShouldDivideDecimalWithIntegerCorrectly() | 
 |         { | 
 |             var result = _parser.Parse("2.5/2"); | 
 |             Assert.AreEqual(1.25d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ShouldHandleExpCorrectly() | 
 |         { | 
 |             var result = _parser.Parse("2 ^ 4"); | 
 |             Assert.AreEqual(16d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ShouldHandleExpWithDecimalCorrectly() | 
 |         { | 
 |             var result = _parser.Parse("2.5 ^ 2"); | 
 |             Assert.AreEqual(6.25d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ShouldMultiplyDecimalWithDecimalCorrectly() | 
 |         { | 
 |             var result = _parser.Parse("2.5 * 1.5"); | 
 |             Assert.AreEqual(3.75d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ThreeGreaterThanTwoShouldBeTrue() | 
 |         { | 
 |             var result = _parser.Parse("3 > 2"); | 
 |             Assert.IsTrue((bool)result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ThreeLessThanTwoShouldBeFalse() | 
 |         { | 
 |             var result = _parser.Parse("3 < 2"); | 
 |             Assert.IsFalse((bool)result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ThreeLessThanOrEqualToThreeShouldBeTrue() | 
 |         { | 
 |             var result = _parser.Parse("3 <= 3"); | 
 |             Assert.IsTrue((bool)result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ThreeLessThanOrEqualToTwoDotThreeShouldBeFalse() | 
 |         { | 
 |             var result = _parser.Parse("3 <= 2.3"); | 
 |             Assert.IsFalse((bool)result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ThreeGreaterThanOrEqualToThreeShouldBeTrue() | 
 |         { | 
 |             var result = _parser.Parse("3 >= 3"); | 
 |             Assert.IsTrue((bool)result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void TwoDotTwoGreaterThanOrEqualToThreeShouldBeFalse() | 
 |         { | 
 |             var result = _parser.Parse("2.2 >= 3"); | 
 |             Assert.IsFalse((bool)result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void TwelveAndTwelveShouldBeEqual() | 
 |         { | 
 |             var result = _parser.Parse("2=2"); | 
 |             Assert.IsTrue((bool)result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void TenPercentShouldBe0Point1() | 
 |         { | 
 |             var result = _parser.Parse("10%"); | 
 |             Assert.AreEqual(0.1, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ShouldHandleMultiplePercentSigns() | 
 |         { | 
 |             var result = _parser.Parse("10%%"); | 
 |             Assert.AreEqual(0.001, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ShouldHandlePercentageOnFunctionResult() | 
 |         { | 
 |             var result = _parser.Parse("SUM(1;2;3)%"); | 
 |             Assert.AreEqual(0.06, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ShouldHandlePercentageOnParantethis() | 
 |         { | 
 |             var result = _parser.Parse("(1+2)%"); | 
 |             Assert.AreEqual(0.03, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ShouldIgnoreLeadingPlus() | 
 |         { | 
 |             var result = _parser.Parse("+(1-2)"); | 
 |             Assert.AreEqual(-1d, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ShouldHandleDecimalNumberWhenDividingIntegers() | 
 |         { | 
 |             var result = _parser.Parse("224567455/400000000*500000"); | 
 |             Assert.AreEqual(280709.31875, result); | 
 |         } | 
 |  | 
 |         [TestMethod] | 
 |         public void ShouldNegateExpressionInParenthesis() | 
 |         { | 
 |             var result = _parser.Parse("-(1+2)"); | 
 |             Assert.AreEqual(-3d, result); | 
 |         } | 
 |     } | 
 | } |