Mercurial > projects > dil
changeset 39:69b940398d7b
- Added unittest to test correct parsing of operator tokens.
author | aziz |
---|---|
date | Tue, 26 Jun 2007 10:06:01 +0000 |
parents | 640c45aaaaee |
children | 9d5ceb0f8be9 |
files | trunk/src/Lexer.d trunk/src/Token.d trunk/src/main.d |
diffstat | 3 files changed, 42 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/trunk/src/Lexer.d Tue Jun 26 08:58:02 2007 +0000 +++ b/trunk/src/Lexer.d Tue Jun 26 10:06:01 2007 +0000 @@ -170,8 +170,11 @@ this.fileName = fileName; this.text = text; - this.text.length = this.text.length + 1; - this.text[$-1] = 0; + if (text[$-1] != 0) + { + this.text.length = this.text.length + 1; + this.text[$-1] = 0; + } this.p = this.text.ptr; this.end = this.p + this.text.length; @@ -939,3 +942,23 @@ return tokens; } } + +unittest +{ + string[] ops = [">", ">=", ">>", ">>=", ">>>", ">>>=", "<", "<=", "<>", "<>=", "<<", "<<=", "!", "!<", "!>", "!<=", "!>=", "!<>", "!<>=", ".", "..", "...", "&", "&&", "&=", "+", "++", "+=", "-", "--", "-=", "=", "==", "~", "~=", "*", "*=", "^", "^=", "%", "%="]; + + char[] src; + + foreach (op; ops) + src ~= op ~ " "; + + auto lx = new Lexer(src, ""); + auto tokens = lx.getTokens(); + + tokens = tokens[0..$-1]; // exclude TOK.EOF + + assert(tokens.length == 41 ); + + foreach (i, t; tokens) + assert(t.span == ops[i], std.string.format("Lexed '%s' but expected '%s'", t.span, ops[i])); +} \ No newline at end of file
--- a/trunk/src/Token.d Tue Jun 26 08:58:02 2007 +0000 +++ b/trunk/src/Token.d Tue Jun 26 10:06:01 2007 +0000 @@ -54,8 +54,8 @@ ModAssign, Mod, XorAssign, Xor, CatAssign, Catenate, + Tilde, - Tilde, Colon, Semicolon, Question,
--- a/trunk/src/main.d Tue Jun 26 08:58:02 2007 +0000 +++ b/trunk/src/main.d Tue Jun 26 10:06:01 2007 +0000 @@ -53,6 +53,10 @@ writef("<cl>%s</cl>", span); break; case TOK.Assign, TOK.Equal, TOK.Not, + TOK.Less, TOK.Greater, + TOK.LShiftAssign, TOK.LShift, + TOK.RShiftAssign, TOK.RShift, + TOK.URShiftAssign, TOK.URShift, TOK.OrAssign, TOK.OrBinary, TOK.AndAssign, TOK.AndBinary, TOK.PlusAssign, TOK.PlusPlus, TOK.Plus, @@ -62,14 +66,25 @@ TOK.ModAssign, TOK.Mod, TOK.XorAssign, TOK.Xor, TOK.CatAssign, TOK.Catenate, + TOK.Tilde, TOK.Unordered, TOK.UorE, TOK.UorG, TOK.UorGorE, TOK.UorL, - TOK.UorLorE: + TOK.UorLorE, + TOK.LorEorG: writef("<op>%s</op>", span); break; + case TOK.LorG: + writef("<op>≶</op>"); + break; + case TOK.LessEqual: + writef("<op>≤</op>"); + break; + case TOK.GreaterEqual: + writef("<op>≥</op>"); + break; case TOK.AndLogical: writef("<op>∧</op>"); break;