Ejemplo n.º 1
0
        public void TestABString()
        {
            string inputString = "abaabb";

            var tokenCategories = new List <KeyValuePair <SimpleTokenCategory, string> >
            {
                new KeyValuePair <SimpleTokenCategory, string>(SimpleTokenCategory.A, "a"),
                new KeyValuePair <SimpleTokenCategory, string>(SimpleTokenCategory.B, "b"),
            };

            IInputReader inputReader      = new StringInputReader(inputString);
            var          input            = inputReader.Read();
            var          conflictResolver = new ConflictResolver <SimpleTokenCategory>(SimpleTokenCategory.None);
            var          lexer            = new Lexer <SimpleTokenCategory>(
                tokenCategories,
                SimpleTokenCategory.Eof,
                SimpleTokenCategory.None,
                conflictResolver.ResolveWithMaxValue);
            var actual   = lexer.Scan(input, null).Select(x => x.Category).ToList();
            var expected = new List <SimpleTokenCategory>
            {
                SimpleTokenCategory.A, SimpleTokenCategory.B, SimpleTokenCategory.A, SimpleTokenCategory.A,
                SimpleTokenCategory.B, SimpleTokenCategory.B, SimpleTokenCategory.Eof
            };
            var expectedText = string.Join(", ", expected);
            var actualText   = string.Join(", ", actual);

            CollectionAssert.AreEqual(expected, actual, $"Expected: {expectedText}, actual: {actualText}");
        }
Ejemplo n.º 2
0
        public void TestValues()
        {
            var inputReader = new StringInputReader("test");
            var data        = inputReader.Read();
            var expected    = "test" + Constants.EndOfInput;
            var actual      = string.Concat(data.Select(kvp => kvp.Value));

            Assert.AreEqual(expected, actual);
        }
Ejemplo n.º 3
0
        public void TestKeys()
        {
            var inputReader = new StringInputReader("test");
            var data        = inputReader.Read();
            var expected    = new List <int> {
                0, 1, 2, 3, 4
            };
            var actual = data.Select(kvp => ((StringLocation)kvp.Key).Position).ToList();

            CollectionAssert.AreEqual(expected, actual);
        }
Ejemplo n.º 4
0
        public void TestWithStringInput()
        {
            string inputString = "(a +40)*num   +\n[(g] * -45x";

            var tokenCategories = new List <KeyValuePair <StringTestCategory, string> >
            {
                new KeyValuePair <StringTestCategory, string>(StringTestCategory.Paren, "[\\(\\)\\[\\]]"),
                new KeyValuePair <StringTestCategory, string>(StringTestCategory.Operator, "[\\*+\\-]"),
                new KeyValuePair <StringTestCategory, string>(StringTestCategory.Number, "0|[1-9][0-9]*"),
                new KeyValuePair <StringTestCategory, string>(StringTestCategory.Variable, "[a-z][a-z]*"),
                new KeyValuePair <StringTestCategory, string>(StringTestCategory.Whitespace, "[ \n][ \n]*")
            };

            var expectedTokens = new List <Token <StringTestCategory> >
            {
                CreateToken(StringTestCategory.Paren, "(", new StringLocation(0), new StringLocation(1)),
                CreateToken(StringTestCategory.Variable, "a", new StringLocation(1), new StringLocation(2)),
                CreateToken(StringTestCategory.Whitespace, " ", new StringLocation(2), new StringLocation(3)),
                CreateToken(StringTestCategory.Operator, "+", new StringLocation(3), new StringLocation(4)),
                CreateToken(StringTestCategory.Number, "40", new StringLocation(4), new StringLocation(6)),
                CreateToken(StringTestCategory.Paren, ")", new StringLocation(6), new StringLocation(7)),
                CreateToken(StringTestCategory.Operator, "*", new StringLocation(7), new StringLocation(8)),
                CreateToken(StringTestCategory.Variable, "num", new StringLocation(8), new StringLocation(11)),
                CreateToken(StringTestCategory.Whitespace, "   ", new StringLocation(11), new StringLocation(14)),
                CreateToken(StringTestCategory.Operator, "+", new StringLocation(14), new StringLocation(15)),
                CreateToken(StringTestCategory.Whitespace, "\n", new StringLocation(15), new StringLocation(16)),
                CreateToken(StringTestCategory.Paren, "[", new StringLocation(16), new StringLocation(17)),
                CreateToken(StringTestCategory.Paren, "(", new StringLocation(17), new StringLocation(18)),
                CreateToken(StringTestCategory.Variable, "g", new StringLocation(18), new StringLocation(19)),
                CreateToken(StringTestCategory.Paren, "]", new StringLocation(19), new StringLocation(20)),
                CreateToken(StringTestCategory.Whitespace, " ", new StringLocation(20), new StringLocation(21)),
                CreateToken(StringTestCategory.Operator, "*", new StringLocation(21), new StringLocation(22)),
                CreateToken(StringTestCategory.Whitespace, " ", new StringLocation(22), new StringLocation(23)),
                CreateToken(StringTestCategory.Operator, "-", new StringLocation(23), new StringLocation(24)),
                CreateToken(StringTestCategory.Number, "45", new StringLocation(24), new StringLocation(26)),
                CreateToken(StringTestCategory.Variable, "x", new StringLocation(26), new StringLocation(27)),
                CreateToken(StringTestCategory.Eof, null, null, null)
            };

            IInputReader inputReader  = new StringInputReader(inputString);
            var          resolver     = new ConflictResolver <StringTestCategory>(StringTestCategory.None);
            var          lexer        = new Lexer <StringTestCategory>(tokenCategories, StringTestCategory.Eof, StringTestCategory.None, resolver.ResolveWithMaxValue);
            var          outputTokens = lexer.Scan(inputReader.Read(), null);

            Assert.IsTrue(outputTokens.SequenceEqual(expectedTokens, new TokenComparer <StringTestCategory>()));
        }