@Test public void parseQuotedSymbol() { expect("[Year of expenditure]", new SymbolNode("Year of expenditure")); }
@Test public void parseStringLiteral() { expect("A=='Foo'", call(EQ, symbol("A"), new ConstantNode("Foo"))); }
@Test public void orderOfOperations() { expect("A*B+C/D*E", call(PLUS, call(MUL, A, B), call(MUL, call(DIV, C, D), E))); // (+ (+ (+ A B) C) (* D E)) expect("A+B+C+D*E", call(PLUS, call(PLUS, call(PLUS, A, B), C), call(MUL, D, E))); expect("A < B == C >= D", call(EQ, call(LT, A, B), call(GE, C, D))); expect("A && B || C && D", call(OR, call(AND, A, B), call(AND, C, D))); }
@Test public void parseMax() { expect("max(A)", new FunctionCallNode(MaxFunction.INSTANCE, new SymbolNode("A"))); expect("max(A, B)", new FunctionCallNode(MaxFunction.INSTANCE, new SymbolNode("A"), new SymbolNode("B"))); expect("min(A, B, C)", new FunctionCallNode(MinFunction.INSTANCE, new SymbolNode("A"), new SymbolNode("B"), new SymbolNode("C"))); }
@Test public void parseEqualsSign() { expect("true==false", new FunctionCallNode( EqualFunction.INSTANCE, new ConstantNode(true), new ConstantNode(false))); }
@Test public void parseComparisons() { expect("A==B", new FunctionCallNode(EqualFunction.INSTANCE, new SymbolNode("A"), new SymbolNode("B"))); }
@Test public void parseCompound() { expect("a.b", new CompoundExpr(new SymbolNode("a"), new SymbolNode("b"))); }
@Test public void group() { expect("(false||true)&&true", new FunctionCallNode(AND, new GroupNode(new FunctionCallNode(OR, FALSE, TRUE)), TRUE) ); }
@Test public void parseFunctions() { expect("containsAll({f1},{v1})", new FunctionCallNode(ContainsAllFunction.INSTANCE, new SymbolNode("f1"), new SymbolNode("v1")) ); expect("!containsAll({f1},{v1})", new FunctionCallNode(NotFunction.INSTANCE, new FunctionCallNode(ContainsAllFunction.INSTANCE, new SymbolNode("f1"), new SymbolNode("v1")) )); }
@Test public void parseCompoundOp() { expect("a.b==c", new FunctionCallNode( EqualFunction.INSTANCE, new CompoundExpr( new SymbolNode("a"), new SymbolNode("b")), new SymbolNode("c"))); }
@Test public void parseNested() { expect("(1+2)/3", new FunctionCallNode(ArithmeticFunctions.DIVIDE, new GroupNode( new FunctionCallNode(ArithmeticFunctions.BINARY_PLUS, new ConstantNode(1), new ConstantNode(2))), new ConstantNode(3))); }
@Test public void parseCalc() { expect("{Exp}*{Alloc}*{InCostUnsp}/10000", new FunctionCallNode(FormulaFunctions.get("/"), new FunctionCallNode(FormulaFunctions.get("*"), new FunctionCallNode(FormulaFunctions.get("*"), new SymbolNode("Exp"), new SymbolNode("Alloc")), new SymbolNode("InCostUnsp")), new ConstantNode(10000))); }