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