Skip to content
Snippets Groups Projects
Commit e3024b14 authored by René Schöne's avatar René Schöne
Browse files

More tests and a fix for the expression sub-language.

parent e2f997a9
Branches
No related tags found
No related merge requests found
...@@ -102,12 +102,12 @@ Comment = "//" [^\n\r]+ ...@@ -102,12 +102,12 @@ Comment = "//" [^\n\r]+
// special characters // special characters
"=" { return sym(Terminals.EQUALS); } "=" { return sym(Terminals.EQUALS); }
//"\"" { return sym(Terminals.QUOTE); } //"\"" { return sym(Terminals.QUOTE); }
"<" { return sym(Terminals.LE); } "<" { return sym(Terminals.LT); }
"<=" { return sym(Terminals.LT); } "<=" { return sym(Terminals.LE); }
"==" { return sym(Terminals.EQ); } "==" { return sym(Terminals.EQ); }
"!=" { return sym(Terminals.NE); } "!=" { return sym(Terminals.NE); }
"=>" { return sym(Terminals.GE); }
">" { return sym(Terminals.GT); } ">" { return sym(Terminals.GT); }
">=" { return sym(Terminals.GE); }
"+" { return sym(Terminals.PLUS); } "+" { return sym(Terminals.PLUS); }
"*" { return sym(Terminals.MULT); } "*" { return sym(Terminals.MULT); }
"-" { return sym(Terminals.MINUS); } "-" { return sym(Terminals.MINUS); }
......
...@@ -74,7 +74,7 @@ NumberExpression number_expression = ...@@ -74,7 +74,7 @@ NumberExpression number_expression =
LogicalExpression logical_expression = LogicalExpression logical_expression =
LB_ROUND logical_expression.a AND logical_expression.b RB_ROUND {: return new AndExpression(a, b); :} LB_ROUND logical_expression.a AND logical_expression.b RB_ROUND {: return new AndExpression(a, b); :}
| LB_ROUND logical_expression.a OR logical_expression.b RB_ROUND {: return new OrExpression(a, b); :} | LB_ROUND logical_expression.a OR logical_expression.b RB_ROUND {: return new OrExpression(a, b); :}
| LB_ROUND EXCLAMATION logical_expression.e RB_ROUND {: return new NotExpression(e); :} | EXCLAMATION logical_expression.e {: return new NotExpression(e); :}
| LB_ROUND logical_expression.e RB_ROUND {: return new ParenthesizedLogicalExpression(e); :} | LB_ROUND logical_expression.e RB_ROUND {: return new ParenthesizedLogicalExpression(e); :}
| LB_ROUND number_expression.a LT number_expression.b RB_ROUND {: return new ComparingExpression(a, b, ComparatorType.LessThan); :} | LB_ROUND number_expression.a LT number_expression.b RB_ROUND {: return new ComparingExpression(a, b, ComparatorType.LessThan); :}
| LB_ROUND number_expression.a LE number_expression.b RB_ROUND {: return new ComparingExpression(a, b, ComparatorType.LessOrEqualThan); :} | LB_ROUND number_expression.a LE number_expression.b RB_ROUND {: return new ComparingExpression(a, b, ComparatorType.LessOrEqualThan); :}
......
...@@ -95,7 +95,6 @@ public class ExpressionParserTest { ...@@ -95,7 +95,6 @@ public class ExpressionParserTest {
@Test @Test
public void complexExpression() throws IOException, Parser.Exception { public void complexExpression() throws IOException, Parser.Exception {
ParserUtils.setVerboseLoading(true);
NumberExpression sut = ParserUtils.parseNumberExpression("((3 + 4) * (1 / (12 - 8)))"); NumberExpression sut = ParserUtils.parseNumberExpression("((3 + 4) * (1 / (12 - 8)))");
assertThat(sut, instanceOf(MultExpression.class)); assertThat(sut, instanceOf(MultExpression.class));
MultExpression multExpression = (MultExpression) sut; MultExpression multExpression = (MultExpression) sut;
...@@ -128,4 +127,72 @@ public class ExpressionParserTest { ...@@ -128,4 +127,72 @@ public class ExpressionParserTest {
NumberLiteralExpression rightOfSub = (NumberLiteralExpression) rightofDiv.getRightOperand(); NumberLiteralExpression rightOfSub = (NumberLiteralExpression) rightofDiv.getRightOperand();
assertThat(rightOfSub.getValue(), equalTo(8.0)); assertThat(rightOfSub.getValue(), equalTo(8.0));
} }
@Test
public void comparingExpressions() throws IOException, Parser.Exception {
comparingExpression("<", ComparatorType.LessThan, 1, 2);
comparingExpression("<=", ComparatorType.LessOrEqualThan, 3, 4);
comparingExpression("==", ComparatorType.Equals, 5, 6);
comparingExpression("!=", ComparatorType.NotEquals, 7, 8);
comparingExpression("=>", ComparatorType.GreaterOrEqualThan, 9, 10);
comparingExpression(">", ComparatorType.GreaterThan, 11, 12);
}
private void comparingExpression(String actualComparatorString, ComparatorType expectedComparatorType, double left, double right) throws IOException, Parser.Exception {
LogicalExpression sut = ParserUtils.parseLogicalExpression(String.format("(%f %s %f)", left, actualComparatorString, right));
assertThat(sut, instanceOf(ComparingExpression.class));
ComparingExpression comparingExpression = (ComparingExpression) sut;
assertThat(comparingExpression.getLeftOperand(), instanceOf(NumberLiteralExpression.class));
NumberLiteralExpression leftExpression = (NumberLiteralExpression) comparingExpression.getLeftOperand();
assertThat(leftExpression.getValue(), equalTo(left));
assertThat(comparingExpression.getRightOperand(), instanceOf(NumberLiteralExpression.class));
NumberLiteralExpression rightExpression = (NumberLiteralExpression) comparingExpression.getRightOperand();
assertThat(rightExpression.getValue(), equalTo(right));
assertThat(comparingExpression.getComparator(), equalTo(expectedComparatorType));
}
@Test
public void notExpression() throws IOException, Parser.Exception {
LogicalExpression sut = ParserUtils.parseLogicalExpression("!(0==0)");
assertThat(sut, instanceOf(NotExpression.class));
NotExpression notExpression = (NotExpression) sut;
checkZeroEqualsZero(notExpression.getOperand());
}
@Test
public void andExpression() throws IOException, Parser.Exception {
LogicalExpression sut = ParserUtils.parseLogicalExpression("((0==0) & (0==0))");
assertThat(sut, instanceOf(AndExpression.class));
AndExpression notExpression = (AndExpression) sut;
checkZeroEqualsZero(notExpression.getLeftOperand());
checkZeroEqualsZero(notExpression.getRightOperand());
}
@Test
public void orExpression() throws IOException, Parser.Exception {
LogicalExpression sut = ParserUtils.parseLogicalExpression("((0==0) | (0==0))");
assertThat(sut, instanceOf(OrExpression.class));
OrExpression notExpression = (OrExpression) sut;
checkZeroEqualsZero(notExpression.getLeftOperand());
checkZeroEqualsZero(notExpression.getRightOperand());
}
@Test
public void parenthesizedLogicalExpression() throws IOException, Parser.Exception {
LogicalExpression sut = ParserUtils.parseLogicalExpression("((0==0))");
assertThat(sut, instanceOf(ParenthesizedLogicalExpression.class));
ParenthesizedLogicalExpression parenthesizedLogicalExpression = (ParenthesizedLogicalExpression) sut;
checkZeroEqualsZero(parenthesizedLogicalExpression.getOperand());
}
private void checkZeroEqualsZero(LogicalExpression logicalExpression) {
assertThat(logicalExpression, instanceOf(ComparingExpression.class));
ComparingExpression comparingExpression = (ComparingExpression) logicalExpression;
assertThat(comparingExpression.getLeftOperand(), instanceOf(NumberLiteralExpression.class));
NumberLiteralExpression leftOfSSub = (NumberLiteralExpression) comparingExpression.getLeftOperand();
assertThat(leftOfSSub.getValue(), equalTo(0.0));
assertThat(comparingExpression.getRightOperand(), instanceOf(NumberLiteralExpression.class));
NumberLiteralExpression rightOfSub = (NumberLiteralExpression) comparingExpression.getRightOperand();
assertThat(rightOfSub.getValue(), equalTo(0.0));
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment