diff --git a/VAR.ExpressionEvaluator.Tests/TokenizerTests.cs b/VAR.ExpressionEvaluator.Tests/TokenizerTests.cs index aef37aa..fc6205b 100644 --- a/VAR.ExpressionEvaluator.Tests/TokenizerTests.cs +++ b/VAR.ExpressionEvaluator.Tests/TokenizerTests.cs @@ -174,5 +174,43 @@ namespace VAR.ExpressionEvaluator.Tests Assert.AreEqual(t.Token, Token.EOF); } + + [TestMethod()] + public void Tokenizer__MoreTokens() + { + var testString = "= < > <= >= == === "; + var t = new Tokenizer(new StringReader(testString)); + + // "=" + Assert.AreEqual(t.Token, Token.Equals); + t.NextToken(); + + // "<" + Assert.AreEqual(t.Token, Token.LessThan); + t.NextToken(); + + // ">" + Assert.AreEqual(t.Token, Token.GreaterThan); + t.NextToken(); + + // "<=" + Assert.AreEqual(t.Token, Token.LessOrEqualThan); + t.NextToken(); + + // ">=" + Assert.AreEqual(t.Token, Token.GreaterOrEqualThan); + t.NextToken(); + + // "==" + Assert.AreEqual(t.Token, Token.Equals); + t.NextToken(); + + // "===" + Assert.AreEqual(t.Token, Token.ExclusiveEquals); + t.NextToken(); + + Assert.AreEqual(t.Token, Token.EOF); + } + } } \ No newline at end of file diff --git a/VAR.ExpressionEvaluator/Tokenizer.cs b/VAR.ExpressionEvaluator/Tokenizer.cs index f63562c..7122724 100644 --- a/VAR.ExpressionEvaluator/Tokenizer.cs +++ b/VAR.ExpressionEvaluator/Tokenizer.cs @@ -12,6 +12,11 @@ namespace VAR.ExpressionEvaluator Division, Multiply, Equals, + ExclusiveEquals, + GreaterThan, + GreaterOrEqualThan, + LessThan, + LessOrEqualThan, ParentesisStart, ParentesisEnd, Keyword, @@ -119,6 +124,35 @@ namespace VAR.ExpressionEvaluator case '=': NextChar(); _currentToken = Token.Equals; + if (_currentChar == '=') + { + NextChar(); + if (_currentChar == '=') + { + NextChar(); + _currentToken = Token.ExclusiveEquals; + } + } + return; + + case '>': + NextChar(); + _currentToken = Token.GreaterThan; + if (_currentChar == '=') + { + NextChar(); + _currentToken = Token.GreaterOrEqualThan; + } + return; + + case '<': + NextChar(); + _currentToken = Token.LessThan; + if (_currentChar == '=') + { + NextChar(); + _currentToken = Token.LessOrEqualThan; + } return; }