| using System; |
| using System.Text; |
| using System.Collections.Generic; |
| using System.Linq; |
| using Microsoft.VisualStudio.TestTools.UnitTesting; |
| using OfficeOpenXml.FormulaParsing.ExpressionGraph; |
| using ExpGraph = OfficeOpenXml.FormulaParsing.ExpressionGraph.ExpressionGraph; |
| using OfficeOpenXml.FormulaParsing.Excel.Operators; |
| |
| namespace EPPlusTest.FormulaParsing.ExpressionGraph |
| { |
| [TestClass] |
| public class ExpressionCompilerTests |
| { |
| private IExpressionCompiler _expressionCompiler; |
| private ExpGraph _graph; |
| |
| [TestInitialize] |
| public void Setup() |
| { |
| _expressionCompiler = new ExpressionCompiler(); |
| _graph = new ExpGraph(); |
| } |
| |
| [TestMethod] |
| public void ShouldCompileTwoInterExpressionsToCorrectResult() |
| { |
| var exp1 = new IntegerExpression("2"); |
| exp1.Operator = Operator.Plus; |
| _graph.Add(exp1); |
| var exp2 = new IntegerExpression("2"); |
| _graph.Add(exp2); |
| |
| var result = _expressionCompiler.Compile(_graph.Expressions); |
| |
| Assert.AreEqual(4d, result.Result); |
| } |
| |
| |
| [TestMethod] |
| public void CompileShouldMultiplyGroupExpressionWithFollowingIntegerExpression() |
| { |
| var groupExpression = new GroupExpression(false); |
| groupExpression.AddChild(new IntegerExpression("2")); |
| groupExpression.Children.First().Operator = Operator.Plus; |
| groupExpression.AddChild(new IntegerExpression("3")); |
| groupExpression.Operator = Operator.Multiply; |
| |
| _graph.Add(groupExpression); |
| _graph.Add(new IntegerExpression("2")); |
| |
| var result = _expressionCompiler.Compile(_graph.Expressions); |
| |
| Assert.AreEqual(10d, result.Result); |
| } |
| |
| [TestMethod] |
| public void CompileShouldCalculateMultipleExpressionsAccordingToPrecedence() |
| { |
| var exp1 = new IntegerExpression("2"); |
| exp1.Operator = Operator.Multiply; |
| _graph.Add(exp1); |
| var exp2 = new IntegerExpression("2"); |
| exp2.Operator = Operator.Plus; |
| _graph.Add(exp2); |
| var exp3 = new IntegerExpression("2"); |
| exp3.Operator = Operator.Multiply; |
| _graph.Add(exp3); |
| var exp4 = new IntegerExpression("2"); |
| _graph.Add(exp4); |
| |
| var result = _expressionCompiler.Compile(_graph.Expressions); |
| |
| Assert.AreEqual(8d, result.Result); |
| } |
| } |
| } |