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