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 ParseComplexArithmeticExampleCorrectly() { var parseTree = _parser.Parse("145.2/3+7-(8*45+22*(2-19))-88/8 + 17"); var calculator = new CalculateVisitor(); parseTree.Accept(calculator); Assert.Equal(75.4, calculator.Result); var parenthesisVisitor = new FullParenthesisVisitor(); parseTree.Accept(parenthesisVisitor); Assert.Equal("(((((145.2/3)+7)-((8*45)+(22*(2-19))))-(88/8))+17)", parenthesisVisitor.Result); }
public void ParseSimpleFloatCorrectly() { var parseTree = _parser.Parse("3.14159265"); var number = parseTree as NumberNode; Assert.NotNull(number); Assert.Equal(3.14159265, number?.Number); var calculator = new CalculateVisitor(); parseTree.Accept(calculator); Assert.Equal(3.14159265, calculator.Result); var parenthesisVisitor = new FullParenthesisVisitor(); parseTree.Accept(parenthesisVisitor); Assert.Equal("3.14159265", parenthesisVisitor.Result); }
public void ParseSingleNumberCorrectly() { var parseTree = _parser.Parse("22"); var number = parseTree as NumberNode; Assert.NotNull(number); Assert.Equal(22.0, number?.Number); var calculator = new CalculateVisitor(); parseTree.Accept(calculator); Assert.Equal(22.0, calculator.Result); var parenthesisVisitor = new FullParenthesisVisitor(); parseTree.Accept(parenthesisVisitor); Assert.Equal("22", parenthesisVisitor.Result); }