public void StreamLexerTest2()
        {
            ParserMock   par   = new ParserMock(0, false);
            const string inp   = @"var nTimes : int := 0;
print ""How many times ? "";
read nTimes;
var x : int;
for x in 0..nTimes-1 do
    print x;
    print "" : Hello, World!\n"";
end for;
assert (x = nTimes);";
            StreamReader sr    = new StreamReader(new MemoryStream(Encoding.ASCII.GetBytes(inp)));
            StreamLexer  lexer = new StreamLexer(sr, false, 0, false, par);

            lexer.Parse();
            Token[] expectedTokens =
            {
                new Token(TokenType.Name,    1,  3, "var"),
                new Token(TokenType.Name,    1, 10, "nTimes"),
                new Token(TokenType.Control, 1, 12, ":"),
                new Token(TokenType.Name,    1, 16, "int"),
                new Token(TokenType.Control, 1, 19, ":="),
                new Token(TokenType.Number,  1, 21, "0"),
                new Token(TokenType.Control, 1, 22, ";"),
                new Token(TokenType.Name,    2,  5, "print"),
                new Token(TokenType.String,  2, 25, "How many times ? "),
                new Token(TokenType.Control, 2, 26, ";"),
                new Token(TokenType.Name,    3,  4, "read"),
                new Token(TokenType.Name,    3, 11, "nTimes"),
                new Token(TokenType.Control, 3, 12, ";"),
                new Token(TokenType.Name,    4,  3, "var"),
                new Token(TokenType.Name,    4,  5, "x"),
                new Token(TokenType.Control, 4,  7, ":"),
                new Token(TokenType.Name,    4, 11, "int"),
                new Token(TokenType.Control, 4, 12, ";"),
                new Token(TokenType.Name,    5,  3, "for"),
                new Token(TokenType.Name,    5,  5, "x"),
                new Token(TokenType.Name,    5,  8, "in"),
                new Token(TokenType.Number,  5, 10, "0"),
                new Token(TokenType.Control, 5, 12, ".."),
                new Token(TokenType.Name,    5, 18, "nTimes"),
                new Token(TokenType.Control, 5, 19, "-"),
                new Token(TokenType.Number,  5, 20, "1"),
                new Token(TokenType.Name,    5, 23, "do"),
                new Token(TokenType.Name,    6,  9, "print"),
                new Token(TokenType.Name,    6, 11, "x"),
                new Token(TokenType.Control, 6, 12, ";"),
                new Token(TokenType.Name,    7,  9, "print"),
                new Token(TokenType.String,  7, 30, " : Hello, World!\n"),
                new Token(TokenType.Control, 7, 31, ";"),
                new Token(TokenType.Name,    8,  3, "end"),
                new Token(TokenType.Name,    8,  7, "for"),
                new Token(TokenType.Control, 8,  8, ";"),
                new Token(TokenType.Name,    9,  6, "assert"),
                new Token(TokenType.Control, 9,  8, "("),
                new Token(TokenType.Name,    9,  9, "x"),
                new Token(TokenType.Control, 9, 11, "="),
                new Token(TokenType.Name,    9, 18, "nTimes"),
                new Token(TokenType.Control, 9, 19, ")"),
                new Token(TokenType.Control, 9, 20, ";")
            };
            Assert.AreEqual(expectedTokens.Length, par.Tokens.Count);
            for (int i = 0; i < expectedTokens.Length; i++)
            {
                Assert.AreEqual(expectedTokens[i], par.Tokens[i]);
            }
        }
        public void StreamLexerTest3()
        {
            ParserMock   par   = new ParserMock(0, false);
            const string inp   = @"print ""Give a number"";
var n : int;
read n;
var v : int := 1;
var i : int;
for i in 1..n do
    v := v * i;
end for;
print ""The result is: "";
print v;";
            StreamReader sr    = new StreamReader(new MemoryStream(Encoding.ASCII.GetBytes(inp)));
            StreamLexer  lexer = new StreamLexer(sr, false, 0, false, par);

            lexer.Parse();
            Token[] expectedTokens =
            {
                new Token(TokenType.Name,     1,  5, "print"),
                new Token(TokenType.String,   1, 21, "Give a number"),
                new Token(TokenType.Control,  1, 22, ";"),
                new Token(TokenType.Name,     2,  3, "var"),
                new Token(TokenType.Name,     2,  5, "n"),
                new Token(TokenType.Control,  2,  7, ":"),
                new Token(TokenType.Name,     2, 11, "int"),
                new Token(TokenType.Control,  2, 12, ";"),
                new Token(TokenType.Name,     3,  4, "read"),
                new Token(TokenType.Name,     3,  6, "n"),
                new Token(TokenType.Control,  3,  7, ";"),
                new Token(TokenType.Name,     4,  3, "var"),
                new Token(TokenType.Name,     4,  5, "v"),
                new Token(TokenType.Control,  4,  7, ":"),
                new Token(TokenType.Name,     4, 11, "int"),
                new Token(TokenType.Control,  4, 14, ":="),
                new Token(TokenType.Number,   4, 16, "1"),
                new Token(TokenType.Control,  4, 17, ";"),
                new Token(TokenType.Name,     5,  3, "var"),
                new Token(TokenType.Name,     5,  5, "i"),
                new Token(TokenType.Control,  5,  7, ":"),
                new Token(TokenType.Name,     5, 11, "int"),
                new Token(TokenType.Control,  5, 12, ";"),
                new Token(TokenType.Name,     6,  3, "for"),
                new Token(TokenType.Name,     6,  5, "i"),
                new Token(TokenType.Name,     6,  8, "in"),
                new Token(TokenType.Number,   6, 10, "1"),
                new Token(TokenType.Control,  6, 12, ".."),
                new Token(TokenType.Name,     6, 13, "n"),
                new Token(TokenType.Name,     6, 16, "do"),
                new Token(TokenType.Name,     7,  5, "v"),
                new Token(TokenType.Control,  7,  8, ":="),
                new Token(TokenType.Name,     7, 10, "v"),
                new Token(TokenType.Control,  7, 12, "*"),
                new Token(TokenType.Name,     7, 14, "i"),
                new Token(TokenType.Control,  7, 15, ";"),
                new Token(TokenType.Name,     8,  3, "end"),
                new Token(TokenType.Name,     8,  7, "for"),
                new Token(TokenType.Control,  8,  8, ";"),
                new Token(TokenType.Name,     9,  5, "print"),
                new Token(TokenType.String,   9, 23, "The result is: "),
                new Token(TokenType.Control,  9, 24, ";"),
                new Token(TokenType.Name,    10,  5, "print"),
                new Token(TokenType.Name,    10,  7, "v"),
                new Token(TokenType.Control, 10,  8, ";")
            };
            Assert.AreEqual(expectedTokens.Length, par.Tokens.Count);
            for (int i = 0; i < expectedTokens.Length; i++)
            {
                Assert.AreEqual(expectedTokens[i], par.Tokens[i]);
            }
        }