Skip to content

Commit bfcf3d7

Browse files
authored
Merge pull request #1 from alienlab/and-or-chars
Add one-char aliases for And and Or
2 parents a7b6aab + 4fb8036 commit bfcf3d7

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

BooleanLogicParser.Tests/ParserTests.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,36 @@ public class ParserTests
3636
[TestCase("!false and !true", ExpectedResult = false)]
3737
[TestCase("false and true and true", ExpectedResult = false)]
3838
[TestCase("false or true or false", ExpectedResult = true)]
39+
[TestCase("true", ExpectedResult = true)]
40+
[TestCase(")", ExpectedException = (typeof(Exception)))]
41+
[TestCase("az", ExpectedException = (typeof(Exception)))]
42+
[TestCase("", ExpectedException = (typeof(Exception)))]
43+
[TestCase("()", ExpectedException = typeof(Exception))]
44+
[TestCase("true&", ExpectedException = typeof(Exception))]
45+
[TestCase("false", ExpectedResult = false)]
46+
[TestCase("true ", ExpectedResult = true)]
47+
[TestCase("false ", ExpectedResult = false)]
48+
[TestCase(" true", ExpectedResult = true)]
49+
[TestCase(" false", ExpectedResult = false)]
50+
[TestCase(" true ", ExpectedResult = true)]
51+
[TestCase(" false ", ExpectedResult = false)]
52+
[TestCase("(false)", ExpectedResult = false)]
53+
[TestCase("(true)", ExpectedResult = true)]
54+
[TestCase("true&false", ExpectedResult = false)]
55+
[TestCase("false&true", ExpectedResult = false)]
56+
[TestCase("false&false", ExpectedResult = false)]
57+
[TestCase("true&true", ExpectedResult = true)]
58+
[TestCase("!true", ExpectedResult = false)]
59+
[TestCase("!(true)", ExpectedResult = false)]
60+
[TestCase("!(true", ExpectedException = typeof(Exception))]
61+
[TestCase("!(!(true))", ExpectedResult = true)]
62+
[TestCase("!false", ExpectedResult = true)]
63+
[TestCase("!(false)", ExpectedResult = true)]
64+
[TestCase("(!(false))&(!(true))", ExpectedResult = false)]
65+
[TestCase("!((!(false))&(!(true)))", ExpectedResult = true)]
66+
[TestCase("!false&!true", ExpectedResult = false)]
67+
[TestCase("false&true&true", ExpectedResult = false)]
68+
[TestCase("false|true|false", ExpectedResult = true)]
3969
public bool CanParseSingleToken(string expression)
4070
{
4171
var tokens = new Tokenizer(expression).Tokenize();

BooleanLogicParser.Tests/TokenizerTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ namespace BooleanLogicParser.Tests
88
public class TokenizerTests
99
{
1010
[TestCase("And", ExpectedResult = typeof(AndToken))]
11+
[TestCase("&", ExpectedResult = typeof(AndToken))]
1112
[TestCase("and", ExpectedResult = typeof(AndToken))]
1213
[TestCase("Or", ExpectedResult = typeof(OrToken))]
1314
[TestCase("or", ExpectedResult = typeof(OrToken))]
15+
[TestCase("|", ExpectedResult = typeof(OrToken))]
1416
[TestCase("True", ExpectedResult = typeof(TrueToken))]
1517
[TestCase("False", ExpectedResult = typeof(FalseToken))]
1618
[TestCase("!", ExpectedResult = typeof(NegationToken))]

BooleanLogicParser/Tokenizer.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ public IEnumerable<Token> Tokenize()
3232
var c = (char) _reader.Peek();
3333
switch (c)
3434
{
35+
case '&':
36+
tokens.Add(new AndToken());
37+
_reader.Read();
38+
break;
39+
case '|':
40+
tokens.Add(new OrToken());
41+
_reader.Read();
42+
break;
3543
case '!':
3644
tokens.Add(new NegationToken());
3745
_reader.Read();

0 commit comments

Comments
 (0)