public void ThePowerOperatorIsLeftAssociative() { // There is no unique standard: // https://codeplea.com/exponentiation-associativity-options var parseTree = _parser.Parse("2^2^3"); var calculator = new CalculateVisitor(); parseTree.Accept(calculator); // Left Associative Assert.Equal(64, calculator.Result); // Right Associative Assert.NotEqual(256, calculator.Result); var fullParenthesisVisitor = new FullParenthesisVisitor(); parseTree.Accept(fullParenthesisVisitor); Assert.Equal("((2^2)^3)", fullParenthesisVisitor.Result); var minimalParenthesisVisitor = new MinimalParenthesisVisitor(); parseTree.Accept(minimalParenthesisVisitor); Assert.Equal("2^2^3", minimalParenthesisVisitor.Result); }
public void TheMinimalParenthesisVisitorWorksCorrectlyWithPower() { var parseTree = _parser.Parse("1-2*2^3*3-2"); var minimalParenthesisVisitor = new MinimalParenthesisVisitor(); parseTree.Accept(minimalParenthesisVisitor); Assert.Equal("1-2*2^3*3-2", minimalParenthesisVisitor.Result); }
public void ShouldCreateExpressionWithMinimalParenthesisGivenExpressionWithVariablesAndFunctions() { var parseTree = _parser.Parse("(((7*a)+(5*cos(Pi)))+(10/sqrt(c+(d*5))))"); var parenthesisVisitor = new MinimalParenthesisVisitor(); parseTree.Accept(parenthesisVisitor); Assert.Equal("7*a+5*cos(Pi)+10/sqrt(c+d*5)", parenthesisVisitor.Result); }
public void ShouldSimplifyToExpressionWithoutParenthesis() { var parseTree = _parser.Parse("(((7*8)+(5*6))+(10/5))"); var parenthesisVisitor = new MinimalParenthesisVisitor(); parseTree.Accept(parenthesisVisitor); Assert.Equal("7*8+5*6+10/5", parenthesisVisitor.Result); }
public void ShouldCreatesDivisionWithMinimalAmountOfParenthesis() { var parseTree = _parser.Parse("((24/1)/(2/3))"); var parenthesisVisitor = new MinimalParenthesisVisitor(); parseTree.Accept(parenthesisVisitor); Assert.Equal("24/1/(2/3)", parenthesisVisitor.Result); }
public void ShouldCreateMultiplicationWithMinimalAmountOfParenthesis() { var parseTree = _parser.Parse("6*(1+2+3)"); var parenthesisVisitor = new MinimalParenthesisVisitor(); parseTree.Accept(parenthesisVisitor); Assert.Equal("6*(1+2+3)", parenthesisVisitor.Result); }
public void TheMinimalParenthesisVisitorWorksWithDivideCorrectly() { var visitor = new MinimalParenthesisVisitor(); _parser.Parse("1/(2/3)").Accept(visitor); Assert.Equal("1/(2/3)", visitor.Result); visitor.Clear(); _parser.Parse("1/2/3").Accept(visitor); Assert.Equal("1/2/3", visitor.Result); }
public void CreatesArithmeticExpressionWithMinimalAmountOfParenthesis() { var plusParseTree = _parser.Parse("(1+(2+(3+4)))"); var parenthesisVisitor = new MinimalParenthesisVisitor(); plusParseTree.Accept(parenthesisVisitor); Assert.Equal("1+2+3+4", parenthesisVisitor.Result); var minusParseTree = _parser.Parse("(-1-(2-(3-4)))"); var minimalParenthesisVisitor = new MinimalParenthesisVisitor(); minusParseTree.Accept(minimalParenthesisVisitor); Assert.Equal("-1-(2-(3-4))", minimalParenthesisVisitor.Result); }