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