| 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 PrecedenceTests : FormulaParserTestBase |
| { |
| |
| [TestInitialize] |
| public void Setup() |
| { |
| var excelDataProvider = MockRepository.GenerateStub<ExcelDataProvider>(); |
| _parser = new FormulaParser(excelDataProvider); |
| } |
| |
| [TestMethod] |
| public void ShouldCaluclateUsingPrecedenceMultiplyBeforeAdd() |
| { |
| var result = _parser.Parse("4 + 6 * 2"); |
| Assert.AreEqual(16d, result); |
| } |
| |
| [TestMethod] |
| public void ShouldCaluclateUsingPrecedenceDivideBeforeAdd() |
| { |
| var result = _parser.Parse("4 + 6 / 2"); |
| Assert.AreEqual(7d, result); |
| } |
| |
| [TestMethod] |
| public void ShouldCalculateTwoGroupsUsingDivideAndMultiplyBeforeSubtract() |
| { |
| var result = _parser.Parse("4/2 + 3 * 3"); |
| Assert.AreEqual(11d, result); |
| } |
| |
| [TestMethod] |
| public void ShouldCalculateExpressionWithinParenthesisBeforeMultiply() |
| { |
| var result = _parser.Parse("(2+4) * 2"); |
| Assert.AreEqual(12d, result); |
| } |
| |
| [TestMethod] |
| public void ShouldConcatAfterAdd() |
| { |
| var result = _parser.Parse("2 + 4 & \"abc\""); |
| Assert.AreEqual("6abc", result); |
| } |
| |
| [TestMethod] |
| public void Bugfixtest() |
| { |
| var result = _parser.Parse("(1+2)+3^2"); |
| } |
| } |
| } |