public void UnaryOperatorPrecedence_HigherThanBinaryOperatorPrecedence( [ValueSource(nameof(UnaryOperators))] TokenKind unaryOp, [ValueSource(nameof(BinaryOperators))] TokenKind binaryOp) { // Arrange var unaryPrecedence = unaryOp.UnaryOperatorPrecedence(); var binaryPrecedence = binaryOp.BinaryOperatorPrecedence(); // Act var highter = unaryPrecedence > binaryPrecedence; // Assert Assert.That(highter, Is.True); }
public void Parse_WithBinaryUnaryPair_HonorsPrecedences( [ValueSource(nameof(UnaryOperators))] TokenKind unaryOp, [ValueSource(nameof(BinaryOperators))] TokenKind binaryOp) { // Arrange var unaryPrecedence = unaryOp.UnaryOperatorPrecedence(); var binaryPrecedence = binaryOp.BinaryOperatorPrecedence(); var unaryText = unaryOp.GetText(); var binaryText = binaryOp.GetText(); var text = $"{unaryText} a {binaryText} b"; // Act var expression = ParseExpression(text); // Assert if (unaryPrecedence >= binaryPrecedence) { // Expected: // binary // / \ // unary b // | // a using var e = expression.Enumerate(); e.AssertBinaryExpression(binaryOp); e.AssertUnaryExpression(unaryOp); e.AssertNameExpression("a"); e.AssertNameExpression("b"); } else { // Expected: // unary // | // binary // / \ // a b using var e = expression.Enumerate(); e.AssertUnaryExpression(unaryOp); e.AssertBinaryExpression(binaryOp); e.AssertNameExpression("a"); e.AssertNameExpression("b"); } }
public static bool IsUnaryOperator(this TokenKind kind) => kind.UnaryOperatorPrecedence() > 0;