You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by rv...@apache.org on 2013/08/22 18:53:01 UTC
svn commit: r1516514 -
/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestOptimizer.java
Author: rvesse
Date: Thu Aug 22 16:53:01 2013
New Revision: 1516514
URL: http://svn.apache.org/r1516514
Log:
Add tests for TransformExtendCombine
Modified:
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestOptimizer.java
Modified: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestOptimizer.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestOptimizer.java?rev=1516514&r1=1516513&r2=1516514&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestOptimizer.java (original)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/optimize/TestOptimizer.java Thu Aug 22 16:53:01 2013
@@ -18,15 +18,33 @@
package com.hp.hpl.jena.sparql.algebra.optimize;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
import org.apache.jena.atlas.junit.BaseTest ;
import org.apache.jena.atlas.lib.StrUtils ;
import org.junit.Test ;
+import com.hp.hpl.jena.graph.NodeFactory;
import com.hp.hpl.jena.query.ARQ ;
import com.hp.hpl.jena.query.Query ;
import com.hp.hpl.jena.query.QueryFactory ;
import com.hp.hpl.jena.sparql.algebra.Algebra ;
import com.hp.hpl.jena.sparql.algebra.Op ;
+import com.hp.hpl.jena.sparql.algebra.Transform;
+import com.hp.hpl.jena.sparql.algebra.Transformer;
+import com.hp.hpl.jena.sparql.algebra.op.OpAssign;
+import com.hp.hpl.jena.sparql.algebra.op.OpExtend;
+import com.hp.hpl.jena.sparql.algebra.op.OpGroup;
+import com.hp.hpl.jena.sparql.algebra.op.OpTable;
+import com.hp.hpl.jena.sparql.core.Var;
+import com.hp.hpl.jena.sparql.core.VarExprList;
+import com.hp.hpl.jena.sparql.expr.ExprAggregator;
+import com.hp.hpl.jena.sparql.expr.ExprVar;
+import com.hp.hpl.jena.sparql.expr.aggregate.AggCountVar;
+import com.hp.hpl.jena.sparql.expr.nodevalue.NodeValueInteger;
+import com.hp.hpl.jena.sparql.expr.nodevalue.NodeValueNode;
import com.hp.hpl.jena.sparql.sse.SSE ;
public class TestOptimizer extends BaseTest
@@ -379,7 +397,82 @@ public class TestOptimizer extends BaseT
" (bgp (triple ?s1 ?p1 <urn:x2>)))))" ) ;
check(queryString, opExpectedString) ;
}
-
+
+ @Test public void combine_extend_01()
+ {
+ Op extend = OpExtend.extendDirect(OpTable.unit(), new VarExprList(Var.alloc("x"), new NodeValueInteger(1)));
+ extend = OpExtend.extendDirect(extend, new VarExprList(Var.alloc("y"), new NodeValueInteger(2)));
+
+ String opExpectedString = StrUtils.strjoinNL(
+ "(extend ((?x 1) (?y 2))",
+ " (table unit))");
+
+ check(extend, new TransformExtendCombine(), opExpectedString);
+ }
+
+ @Test public void combine_extend_02()
+ {
+ Op extend = OpExtend.extendDirect(OpTable.unit(), new VarExprList(Var.alloc("x"), new NodeValueInteger(1)));
+ extend = OpExtend.extendDirect(extend, new VarExprList(Var.alloc("y"), new ExprVar("x")));
+
+ String opExpectedString = StrUtils.strjoinNL(
+ "(extend ((?x 1) (?y ?x))",
+ " (table unit))");
+
+ check(extend, new TransformExtendCombine(), opExpectedString);
+ }
+
+ @Test public void combine_extend_03()
+ {
+ // Technically illegal SPARQL here but useful to validate that the optimizer doesn't do the wrong thing
+ Op extend = OpExtend.extendDirect(OpTable.unit(), new VarExprList(Var.alloc("x"), new NodeValueInteger(1)));
+ extend = OpExtend.extendDirect(extend, new VarExprList(Var.alloc("x"), new NodeValueInteger(2)));
+
+ String opExpectedString = StrUtils.strjoinNL(
+ "(extend ((?x 2))",
+ " (extend ((?x 1))",
+ " (table unit)))");
+
+ check(extend, new TransformExtendCombine(), opExpectedString);
+ }
+
+ @Test public void combine_assign_01()
+ {
+ Op assign = OpAssign.assignDirect(OpTable.unit(), new VarExprList(Var.alloc("x"), new NodeValueInteger(1)));
+ assign = OpAssign.assignDirect(assign, new VarExprList(Var.alloc("y"), new NodeValueInteger(2)));
+
+ String opExpectedString = StrUtils.strjoinNL(
+ "(assign ((?x 1) (?y 2))",
+ " (table unit))");
+
+ check(assign, new TransformExtendCombine(), opExpectedString);
+ }
+
+ @Test public void combine_assign_02()
+ {
+ Op assign = OpAssign.assignDirect(OpTable.unit(), new VarExprList(Var.alloc("x"), new NodeValueInteger(1)));
+ assign = OpAssign.assignDirect(assign, new VarExprList(Var.alloc("y"), new ExprVar("x")));
+
+ String opExpectedString = StrUtils.strjoinNL(
+ "(assign ((?x 1) (?y ?x))",
+ " (table unit))");
+
+ check(assign, new TransformExtendCombine(), opExpectedString);
+ }
+
+ @Test public void combine_assign_03()
+ {
+ Op assign = OpAssign.assignDirect(OpTable.unit(), new VarExprList(Var.alloc("x"), new NodeValueInteger(1)));
+ assign = OpAssign.assignDirect(assign, new VarExprList(Var.alloc("x"), new NodeValueInteger(2)));
+
+ String opExpectedString = StrUtils.strjoinNL(
+ "(assign ((?x 2))",
+ " (assign ((?x 1))",
+ " (table unit)))");
+
+ check(assign, new TransformExtendCombine(), opExpectedString);
+ }
+
public static void check(String queryString, String opExpectedString)
{
queryString = "PREFIX : <http://example/>\n"+queryString ;
@@ -393,7 +486,21 @@ public class TestOptimizer extends BaseT
Op opOptimize = Algebra.optimize(opToOptimize) ;
Op opExpected = SSE.parseOp(opExpectedString) ;
assertEquals(opExpected, opOptimize) ;
-
+ }
+
+ private static void check(Op opToOptimize, Transform additionalOptimizer, String opExpectedString) {
+ Op opOptimize = Algebra.optimize(opToOptimize) ;
+ opOptimize = Transformer.transform(additionalOptimizer, opOptimize) ;
+ Op opExpected = SSE.parseOp(opExpectedString) ;
+ assertEquals(opExpected, opOptimize) ;
+ }
+
+ private static void checkAlgebra(String algString, String opExpectedString)
+ {
+ Op algebra = SSE.parseOp(algString);
+ algebra = Algebra.optimize(algebra);
+ Op opExpexpected = SSE.parseOp(opExpectedString);
+ assertEquals(opExpexpected, algebra);
}
}