use of com.dexels.navajo.expression.api.FunctionDefinition in project navajo by Dexels.
the class TestCompiledExpression method testFunctionCallWithNamedParams.
@Test
public void testFunctionCallWithNamedParams() throws ParseException {
FunctionInterface testFunction = new AddTestFunction();
FunctionDefinition fd = new FunctionDefinition(testFunction.getClass().getName(), "blib", "bleb", "blab");
FunctionFactoryFactory.getInstance().addExplicitFunctionDefinition("addtest", fd);
String expression = "addtest(aap='blub',3+5,4)";
StringReader sr = new StringReader(expression);
CompiledParser cp = new CompiledParser(sr);
cp.Expression();
SimpleNode atn = (SimpleNode) cp.getJJTree().rootNode();
List<String> problems = new ArrayList<>();
ContextExpression ne = atn.interpretToLambda(problems, expression, fn -> FunctionClassification.DEFAULT, name -> Optional.empty());
Operand result = ne.apply();
Assert.assertEquals("monkey", result.value);
}
use of com.dexels.navajo.expression.api.FunctionDefinition in project navajo by Dexels.
the class TestCompiledMoneyExpression method setup.
@Before
public void setup() {
FunctionInterface giveLongFunction = new GiveLongTestFunction();
FunctionDefinition fd = new FunctionDefinition(giveLongFunction.getClass().getName(), "description", "input", "result");
FunctionFactoryFactory.getInstance().addExplicitFunctionDefinition("ToLong", fd);
FunctionInterface giveMoneyFunction = new GiveMoneyTestFunction();
fd = new FunctionDefinition(giveMoneyFunction.getClass().getName(), "description", "input", "result");
FunctionFactoryFactory.getInstance().addExplicitFunctionDefinition("ToMoney", fd);
}
use of com.dexels.navajo.expression.api.FunctionDefinition in project navajo by Dexels.
the class TestCompiledStringExpression method testSubtractStringAndLong.
@Test(expected = TMLExpressionException.class)
public void testSubtractStringAndLong() {
FunctionInterface giveLongFunction = new GiveLongTestFunction();
FunctionDefinition fd = new FunctionDefinition(giveLongFunction.getClass().getName(), "description", "input", "result");
FunctionFactoryFactory.getInstance().addExplicitFunctionDefinition("ToLong", fd);
Expression.evaluate("'bla' - ToLong(10)", null, null, null);
}
use of com.dexels.navajo.expression.api.FunctionDefinition in project navajo by Dexels.
the class TestCompiledLongExpression method testMultiplyWithLongs.
@Test
public void testMultiplyWithLongs() {
FunctionInterface helperFunction = new GiveLongTestFunction();
FunctionDefinition fd = new FunctionDefinition(helperFunction.getClass().getName(), "description", "input", "result");
FunctionFactoryFactory.getInstance().addExplicitFunctionDefinition("ToLong", fd);
Operand result;
result = Expression.evaluate("ToLong(3) * ToLong(1)", null, null, null);
Assert.assertEquals(3L, (long) result.value);
result = Expression.evaluate("3 * ToLong(1)", null, null, null);
Assert.assertEquals(3L, (long) result.value);
result = Expression.evaluate("ToLong(3) * 1", null, null, null);
Assert.assertEquals(3L, (long) result.value);
result = Expression.evaluate("3.0 * ToLong(1)", null, null, null);
Assert.assertEquals(3L, (double) result.value, 0.000001);
result = Expression.evaluate("ToLong(3) * 1.0", null, null, null);
Assert.assertEquals(3L, (double) result.value, 0.000001);
}
use of com.dexels.navajo.expression.api.FunctionDefinition in project navajo by Dexels.
the class AbstractCoreExtension method registerAllFunctions.
private void registerAllFunctions(ExtensionDefinition extensionDef) {
FunctionFactoryInterface fi = FunctionFactoryFactory.getInstance();
fi.init();
fi.clearFunctionNames();
fi.injectExtension(extensionDef);
final Set<String> functionNames = fi.getFunctionNames(extensionDef);
for (String functionName : functionNames) {
FunctionDefinition fd = fi.getDef(extensionDef, functionName);
registerFunction(context, fi, functionName, fd, extensionDef);
}
}
Aggregations