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}"); }
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); }
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); }
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>())); }