use of org.apache.jena.sparql.function.user.UserDefinedFunction in project jena by apache.
the class TestFunctionExpansion method test_function_expansion_02.
@Test
public void test_function_expansion_02() {
Expr e = new E_Multiply(new ExprVar("x"), new ExprVar("x"));
UserDefinedFunctionFactory.getFactory().add("http://example/square", e, new ArrayList<>(e.getVarsMentioned()));
UserDefinedFunction f = (UserDefinedFunction) UserDefinedFunctionFactory.getFactory().create("http://example/square");
f.build("http://example/square", new ExprList(new NodeValueInteger(3)));
Expr actual = f.getActualExpr();
Assert.assertFalse(e.equals(actual));
Assert.assertEquals(0, actual.getVarsMentioned().size());
Assert.assertEquals(new E_Multiply(new NodeValueInteger(3), new NodeValueInteger(3)), actual);
}
use of org.apache.jena.sparql.function.user.UserDefinedFunction in project jena by apache.
the class TestFunctionNonExpansion method test_function_non_expansion_02.
@Test
public void test_function_non_expansion_02() {
Expr square = new E_Multiply(new ExprVar("x"), new ExprVar("x"));
UserDefinedFunctionFactory.getFactory().add("http://example/square", square, new ArrayList<>(square.getVarsMentioned()));
//This test illustrates that if we change the definition of square and call our function again we can
//get a different result with dependencies preserved because the definition of the dependent function can change
Expr cube = new E_Multiply(new E_Function("http://example/square", new ExprList(new ExprVar("x"))), new ExprVar("x"));
UserDefinedFunctionFactory.getFactory().add("http://example/cube", cube, new ArrayList<>(cube.getVarsMentioned()));
UserDefinedFunction f = (UserDefinedFunction) UserDefinedFunctionFactory.getFactory().create("http://example/cube");
f.build("http://example/cube", new ExprList(new NodeValueInteger(2)));
Expr actual = f.getActualExpr();
NodeValue result = actual.eval(BindingFactory.create(), FunctionEnvBase.createTest());
Assert.assertEquals(8, NodeFactoryExtra.nodeToInt(result.asNode()));
//Change the definition of the function we depend on
square = new ExprVar("x");
UserDefinedFunctionFactory.getFactory().add("http://example/square", square, new ArrayList<>(square.getVarsMentioned()));
f.build("http://example/cube", new ExprList(new NodeValueInteger(2)));
actual = f.getActualExpr();
result = actual.eval(BindingFactory.create(), FunctionEnvBase.createTest());
Assert.assertEquals(4, NodeFactoryExtra.nodeToInt(result.asNode()));
}
use of org.apache.jena.sparql.function.user.UserDefinedFunction in project jena by apache.
the class TestFunctionExpansion method test_function_expansion_13.
@Test
public void test_function_expansion_13() {
Expr square = new E_Multiply(new ExprVar("x"), new ExprVar("x"));
UserDefinedFunctionFactory.getFactory().add("http://example/square", square, new ArrayList<>(square.getVarsMentioned()));
//This test illustrates that if we change the definition of square and call our function again we always
//get the same result with dependencies not preserved because even though the definition of the dependent function
//can change the definition of our function is fully expanded when first defined
Expr cube = new E_Multiply(new E_Function("http://example/square", new ExprList(new ExprVar("x"))), new ExprVar("x"));
UserDefinedFunctionFactory.getFactory().add("http://example/cube", cube, new ArrayList<>(cube.getVarsMentioned()));
UserDefinedFunction f = (UserDefinedFunction) UserDefinedFunctionFactory.getFactory().create("http://example/cube");
f.build("http://example/cube", new ExprList(new NodeValueInteger(2)));
Expr actual = f.getActualExpr();
NodeValue result = actual.eval(BindingFactory.create(), FunctionEnvBase.createTest());
Assert.assertEquals(8, NodeFactoryExtra.nodeToInt(result.asNode()));
//Change the definition of the function we depend on
//This has no effect with preserveDependencies set to false (the default) since we fully expanded the call to the dependent
//function when our outer function was defined
square = new ExprVar("x");
UserDefinedFunctionFactory.getFactory().add("http://example/square", square, new ArrayList<>(square.getVarsMentioned()));
f.build("http://example/cube", new ExprList(new NodeValueInteger(2)));
actual = f.getActualExpr();
result = actual.eval(BindingFactory.create(), FunctionEnvBase.createTest());
Assert.assertEquals(8, NodeFactoryExtra.nodeToInt(result.asNode()));
}
Aggregations