Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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");
            }
        }
Esempio n. 3
0
 public static bool IsUnaryOperator(this TokenKind kind)
 => kind.UnaryOperatorPrecedence() > 0;