コード例 #1
0
 public void comments(string toParse, string expected)
 {
     StringTokenizer.Parse(toParse)
     .SequenceEqual(expected.Split(',')
                    .Select(Enum.Parse <TokenType>))
     .Should().BeTrue();
 }
コード例 #2
0
        public static void RedundantParenthesesAreRemovedFromNumbers()
        {
            var expected = new List <SymbolToken> {
                SymbolTokens.Number(3)
            };
            var result = StringTokenizer.Parse("((3))");

            Assert.AreEqual(expected, result);
        }
コード例 #3
0
        public static void CanIdentifyCorrectPositionOfUnknownWord()
        {
            var e = Assert.Throws <UnrecognizedTokenException>(() =>
            {
                StringTokenizer.Parse("1+ abrex  ");
            });

            Assert.AreEqual(3, e.Position);
            Assert.AreEqual(5, e.Length);
        }
コード例 #4
0
        public static void CannotHaveConsecutiveBinaryOperators()
        {
            var e = Assert.Throws <InvalidTokenException>(() =>
            {
                StringTokenizer.Parse("2 ++3");
            });

            Assert.AreEqual(3, e.Position);
            Assert.AreEqual(1, e.Length);
        }
コード例 #5
0
        public static void MismatchedParenthesesThrow()
        {
            var e = Assert.Throws <InvalidParenthesisException>(() =>
            {
                StringTokenizer.Parse("(3 + 5))");
            });

            Assert.AreEqual(7, e.Position);
            Assert.AreEqual(1, e.Length);
        }
コード例 #6
0
        public static void EmptyParenthesesThrowInMiddle()
        {
            var e = Assert.Throws <InvalidParenthesisException>(() =>
            {
                StringTokenizer.Parse("4 + (()6");
            });

            Assert.AreEqual(6, e.Position);
            Assert.AreEqual(1, e.Length);
        }
コード例 #7
0
        public static void NumbersCannotHaveMultipleDecimalPoints()
        {
            var e = Assert.Throws <InvalidTokenException>(() =>
            {
                StringTokenizer.Parse("1.3 + 123.34.56");
            });

            Assert.AreEqual(6, e.Position);
            Assert.AreEqual(9, e.Length);
        }
コード例 #8
0
        public static void UnaryOperatorMustHaveParenthesisFollowing()
        {
            var e = Assert.Throws <InvalidTokenException>(() =>
            {
                StringTokenizer.Parse("sin2");
            });

            Assert.AreEqual(3, e.Position);
            Assert.AreEqual(1, e.Length);
        }
コード例 #9
0
        public static void ChokesOnUnknownSymbol()
        {
            var e = Assert.Throws <UnrecognizedTokenException>(() =>
            {
                StringTokenizer.Parse("2 ; 3");
            });

            Assert.AreEqual(2, e.Position);
            Assert.AreEqual(1, e.Length);
        }
コード例 #10
0
        public static void ChokesOnUnknownWord()
        {
            var e = Assert.Throws <UnrecognizedTokenException>(() =>
            {
                StringTokenizer.Parse("2 + foo(3)");
            });

            Assert.AreEqual(4, e.Position);
            Assert.AreEqual(3, e.Length);
        }
コード例 #11
0
        public static void CanTokenizeSimpleExponentiation()
        {
            var expectedResult = new List <SymbolToken> {
                SymbolTokens.Number(23),
                SymbolTokens.Exponentiation,
                SymbolTokens.Number(41)
            };

            var result = StringTokenizer.Parse("23^41");

            Assert.AreEqual(expectedResult, result);
        }
コード例 #12
0
        public static void CanTokenizeSimpleAddition()
        {
            var expected = new List <SymbolToken> {
                SymbolTokens.Number(23),
                SymbolTokens.Addition,
                SymbolTokens.Number(41)
            };

            var result = StringTokenizer.Parse("23+41");

            Assert.AreEqual(expected, result);
        }
コード例 #13
0
        public static void CanTokenizeSimpleSine()
        {
            var expected = new List <SymbolToken> {
                SymbolTokens.Sine,
                SymbolTokens.LeftParen,
                SymbolTokens.Number(123),
                SymbolTokens.RightParen
            };

            var result = StringTokenizer.Parse("sin(123)");

            Assert.AreEqual(expected, result);
        }
コード例 #14
0
        public static void MissingParenthesesAreAutomaticallyAdded()
        {
            var expected = new List <SymbolToken> {
                SymbolTokens.Number(4),
                SymbolTokens.Multiplication,
                SymbolToken.OpenBracket,
                SymbolTokens.Number(3),
                SymbolTokens.Addition,
                SymbolTokens.Number(5),
                SymbolToken.CloseBracket
            };
            var result = StringTokenizer.Parse("4 * ((3 + 5)  ");

            Assert.AreEqual(expected, result);
        }
コード例 #15
0
        public static void CanTokenizeSimpleNegation()
        {
            var expected = new List <SymbolToken> {
                SymbolToken.NegationToken,
                SymbolTokens.LeftParen,
                SymbolTokens.Number(123),
                SymbolTokens.RightParen
            };

            var result1 = StringTokenizer.Parse("-123");
            var result2 = StringTokenizer.Parse("-(123)");

            Assert.AreEqual(expected, result1);
            Assert.AreEqual(expected, result2);
        }
コード例 #16
0
        public static void RedundantParenthesesAreRemovedFromExpressions()
        {
            var expected = new List <SymbolToken> {
                SymbolTokens.Number(4),
                SymbolTokens.Multiplication,
                SymbolToken.OpenBracket,
                SymbolTokens.Number(3),
                SymbolTokens.Addition,
                SymbolTokens.Number(5),
                SymbolToken.CloseBracket
            };
            var result = StringTokenizer.Parse("4 * ((3 + 5) )  ");

            Assert.AreEqual(expected, result);
        }
コード例 #17
0
        public static void CanTokenizeMultipleAdditions()
        {
            var expected = new List <SymbolToken> {
                SymbolTokens.Number(23),
                SymbolTokens.Addition,
                SymbolTokens.Number(41),
                SymbolTokens.Addition,
                SymbolToken.NegationToken,
                SymbolToken.OpenBracket,
                SymbolTokens.Number(100.5),
                SymbolToken.CloseBracket,
            };

            var result = StringTokenizer.Parse("23 +41 +-100.5");

            Assert.AreEqual(expected, result);
        }
コード例 #18
0
        public static void CanTokenizeWithNegatedUnary()
        {
            var expected = new List <SymbolToken> {
                SymbolTokens.Number(20),
                SymbolTokens.Multiplication,
                SymbolToken.NegationToken,
                SymbolToken.OpenBracket,
                SymbolTokens.Sine,
                SymbolToken.OpenBracket,
                SymbolTokens.Number(123.45),
                SymbolToken.CloseBracket,
                SymbolToken.CloseBracket
            };

            var result = StringTokenizer.Parse("20 * -sin(123.45)");

            Assert.AreEqual(expected, result);
        }
コード例 #19
0
        public static void CanTokenizeNegatedParenthesizedExpression()
        {
            var expected = new List <SymbolToken> {
                SymbolTokens.Number(20),
                SymbolTokens.Subtraction,
                SymbolToken.NegationToken,
                SymbolToken.OpenBracket,
                SymbolTokens.Number(3),
                SymbolTokens.Addition,
                SymbolTokens.Number(3),
                SymbolTokens.Multiplication,
                SymbolTokens.Number(3),
                SymbolToken.CloseBracket
            };

            var result = StringTokenizer.Parse("20 --(3 + 3 * 3)");

            Assert.AreEqual(expected, result);
        }
コード例 #20
0
        public static void CanTokenizeMultipleNegationSymbols()
        {
            var expected = new List <SymbolToken> {
                SymbolToken.NegationToken,
                SymbolToken.OpenBracket,
                SymbolToken.NegationToken,
                SymbolToken.OpenBracket,
                SymbolToken.NegationToken,
                SymbolToken.OpenBracket,
                SymbolTokens.Number(3),
                SymbolToken.CloseBracket,
                SymbolToken.CloseBracket,
                SymbolToken.CloseBracket
            };

            var result1 = StringTokenizer.Parse("---3");
            var result2 = StringTokenizer.Parse("-(--3)");

            Assert.AreEqual(expected, result1);
            Assert.AreEqual(expected, result2);
        }
コード例 #21
0
 public void terminals(string toParse, string expected)
 {
     StringTokenizer.Parse(toParse)
     .SequenceEqual(expected.Split(',').Select(s => Enum.Parse <TokenType>(s)))
     .Should().BeTrue();
 }
コード例 #22
0
        public static void WhiteSpaceExpressionDoesNotThrow()
        {
            var result = StringTokenizer.Parse("   ");

            Assert.AreEqual(result, new List <SymbolToken>());
        }