You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by aj...@apache.org on 2018/01/06 15:17:44 UTC
[20/44] jena git commit: Tests for UnionDatasetCollector
Tests for UnionDatasetCollector
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/67f3e75c
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/67f3e75c
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/67f3e75c
Branch: refs/heads/master
Commit: 67f3e75c41931b93d2cbfb56636a622adb4cad40
Parents: f665fa1
Author: ajs6f <aj...@apache.org>
Authored: Sun Dec 31 13:45:09 2017 -0500
Committer: ajs6f <aj...@apache.org>
Committed: Fri Jan 5 09:32:55 2018 -0500
----------------------------------------------------------------------
.../jena/query/util/DatasetCollector.java | 39 +++++++++++++-------
.../jena/query/util/TestDatasetCollector.java | 27 ++++++++++++++
.../util/TestIntersectionDatasetCollector.java | 20 ++++++++--
.../query/util/TestUnionDatasetCollector.java | 31 +++++++++++-----
4 files changed, 91 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/67f3e75c/jena-arq/src/main/java/org/apache/jena/query/util/DatasetCollector.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/query/util/DatasetCollector.java b/jena-arq/src/main/java/org/apache/jena/query/util/DatasetCollector.java
index b70026a..092b8f8 100644
--- a/jena-arq/src/main/java/org/apache/jena/query/util/DatasetCollector.java
+++ b/jena-arq/src/main/java/org/apache/jena/query/util/DatasetCollector.java
@@ -76,17 +76,22 @@ public abstract class DatasetCollector implements UnorderedIdentityFinishCollect
public BiConsumer<Dataset, Dataset> accumulator() {
return (d1, d2) -> {
d1.getDefaultModel().add(d2.getDefaultModel());
- d2.listNames().forEachRemaining(
- name -> {
- Model union = d1.getNamedModel(name).union(d2.getNamedModel(name));
- d1.replaceNamedModel(name, union);
- });
+ d2.listNames().forEachRemaining(name -> {
+ Model union = d1.getNamedModel(name).union(d2.getNamedModel(name));
+ d1.replaceNamedModel(name, union);
+ });
};
}
}
public static class IntersectionDatasetCollector extends DatasetCollector {
+ /**
+ * The first element is treated differently because {@link DatasetCollector#supplier()} does
+ * not provide an identity element for intersection.
+ */
+ boolean afterFirstElement = false;
+
@Override
public BinaryOperator<Dataset> combiner() {
return DatasetLib::intersection;
@@ -95,20 +100,26 @@ public abstract class DatasetCollector implements UnorderedIdentityFinishCollect
@Override
public BiConsumer<Dataset, Dataset> accumulator() {
return (d1, d2) -> {
- d1.setDefaultModel(d1.getDefaultModel().intersection(d2.getDefaultModel()));
- filter(d2.listNames(), d1::containsNamedModel).forEachRemaining(name -> {
- Model intersection = d1.getNamedModel(name).intersection(d2.getNamedModel(name));
- d1.replaceNamedModel(name, intersection);
- });
+ if (afterFirstElement) {
+ d1.setDefaultModel(d1.getDefaultModel().intersection(d2.getDefaultModel()));
+ filter(d1.listNames(), d2::containsNamedModel).forEachRemaining(name -> {
+ Model intersection = d1.getNamedModel(name).intersection(d2.getNamedModel(name));
+ d1.replaceNamedModel(name, intersection);
+ });
+ } else {
+ d1.setDefaultModel(d2.getDefaultModel());
+ d2.listNames().forEachRemaining(name -> d1.addNamedModel(name, d2.getNamedModel(name)));
+ afterFirstElement = true;
+ }
};
}
}
-
- static DatasetCollector union() {
+
+ static DatasetCollector union() {
return new UnionDatasetCollector();
}
-
- static DatasetCollector intersect() {
+
+ static DatasetCollector intersect() {
return new IntersectionDatasetCollector();
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/67f3e75c/jena-arq/src/test/java/org/apache/jena/query/util/TestDatasetCollector.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/query/util/TestDatasetCollector.java b/jena-arq/src/test/java/org/apache/jena/query/util/TestDatasetCollector.java
index 83093e9..539974c 100644
--- a/jena-arq/src/test/java/org/apache/jena/query/util/TestDatasetCollector.java
+++ b/jena-arq/src/test/java/org/apache/jena/query/util/TestDatasetCollector.java
@@ -1,9 +1,15 @@
package org.apache.jena.query.util;
+import static org.apache.jena.rdf.model.ModelFactory.createModelForGraph;
+import static org.apache.jena.sparql.sse.SSE.parseGraph;
+
import java.util.stream.Stream;
+import org.apache.jena.ext.com.google.common.collect.Maps;
+import org.apache.jena.graph.*;
import org.apache.jena.query.Dataset;
import org.apache.jena.query.DatasetFactory;
+import org.apache.jena.rdf.model.Model;
import org.junit.Assert;
import org.junit.Test;
@@ -31,4 +37,25 @@ public abstract class TestDatasetCollector extends Assert {
public void noNullDatasetsAllowed() {
Stream.<Dataset>builder().add(null).build().collect(testInstance());
}
+
+ @Test
+ public void collectingOneDatasetGivesThatDataset() {
+ Graph graph = parseGraph("(graph (triple <s1> <p1> <o1> ))");
+ Model model = createModelForGraph(graph);
+ Dataset dataset = DatasetFactory.create(model);
+ Node graphName = NodeFactory.createBlankNode();
+ dataset.addNamedModel(graphName.toString(), model);
+ Dataset collection = Stream.<Dataset>builder().add(dataset).build().collect(testInstance());
+ assertDatasetsAreIsomorphicPerGraph(dataset, collection);
+ }
+
+ protected static void assertDatasetsAreIsomorphicPerGraph(Dataset dataset1, Dataset dataset2) {
+ assertGraphsAreIsomorphic(dataset1.getDefaultModel(), dataset2.getDefaultModel());
+ dataset1.listNames().forEachRemaining(graphName ->
+ assertGraphsAreIsomorphic(dataset1.getNamedModel(graphName), dataset2.getNamedModel(graphName)));
+ }
+
+ protected static void assertGraphsAreIsomorphic(Model graph1, Model graph2) {
+ assertTrue(graph1.isIsomorphicWith(graph2));
+ }
}
http://git-wip-us.apache.org/repos/asf/jena/blob/67f3e75c/jena-arq/src/test/java/org/apache/jena/query/util/TestIntersectionDatasetCollector.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/query/util/TestIntersectionDatasetCollector.java b/jena-arq/src/test/java/org/apache/jena/query/util/TestIntersectionDatasetCollector.java
index a8b1285..aa7f040 100644
--- a/jena-arq/src/test/java/org/apache/jena/query/util/TestIntersectionDatasetCollector.java
+++ b/jena-arq/src/test/java/org/apache/jena/query/util/TestIntersectionDatasetCollector.java
@@ -1,12 +1,26 @@
package org.apache.jena.query.util;
-public class TestIntersectionDatasetCollector extends TestDatasetCollector{
+import static org.apache.jena.rdf.model.ModelFactory.createModelForGraph;
+import static org.apache.jena.sparql.sse.SSE.parseGraph;
+
+import org.apache.jena.graph.Graph;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.query.DatasetFactory;
+import org.apache.jena.rdf.model.Model;
+import org.junit.Test;
+
+public class TestIntersectionDatasetCollector extends TestDatasetCollector {
@Override
public DatasetCollector testInstance() {
return DatasetLib.collectors().intersect();
}
-
-
+ @Test
+ public void testIntersection() {
+ Graph graph = parseGraph("(graph (triple <s1> <p1> <o1> ))");
+ Model model = createModelForGraph(graph);
+ Dataset dataset = DatasetFactory.create(model);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/jena/blob/67f3e75c/jena-arq/src/test/java/org/apache/jena/query/util/TestUnionDatasetCollector.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/query/util/TestUnionDatasetCollector.java b/jena-arq/src/test/java/org/apache/jena/query/util/TestUnionDatasetCollector.java
index 65b94d0..fe10711 100644
--- a/jena-arq/src/test/java/org/apache/jena/query/util/TestUnionDatasetCollector.java
+++ b/jena-arq/src/test/java/org/apache/jena/query/util/TestUnionDatasetCollector.java
@@ -5,10 +5,13 @@ import static org.apache.jena.sparql.sse.SSE.parseGraph;
import java.util.stream.Stream;
+import org.apache.jena.atlas.iterator.Iter;
import org.apache.jena.graph.Graph;
+import org.apache.jena.graph.NodeFactory;
import org.apache.jena.query.Dataset;
import org.apache.jena.query.DatasetFactory;
import org.apache.jena.rdf.model.Model;
+import org.junit.Assert;
import org.junit.Test;
public class TestUnionDatasetCollector extends TestDatasetCollector {
@@ -19,14 +22,24 @@ public class TestUnionDatasetCollector extends TestDatasetCollector {
}
@Test
- public void collectingOneDatasetGivesOneDataset() {
- Graph graph = parseGraph("(graph (triple <s1> <p1> <o1> ))");
- Model model = createModelForGraph(graph);
- Dataset dataset = DatasetFactory.create(model);
- Dataset collection = Stream.<Dataset>builder().add(dataset).build().collect(testInstance());
- assertTrue(dataset.getDefaultModel().isIsomorphicWith(collection.getDefaultModel()));
- dataset.listNames().forEachRemaining(graphName -> assertTrue(
- dataset.getNamedModel(graphName).isIsomorphicWith(collection.getNamedModel(graphName))));
- }
+ public void testUnion() {
+ final Graph g1 = parseGraph("(graph (triple <s1> <p1> <o1> ))");
+ final Model m1 = createModelForGraph(g1);
+ final Dataset dsg1 = DatasetFactory.create(m1);
+ final String graphName1 = NodeFactory.createBlankNode().toString();
+ dsg1.addNamedModel(graphName1, m1);
+ final Graph g2 = parseGraph("(graph (triple <s2> <p2> <o2> ))");
+ final Dataset dsg2 = DatasetFactory.create(createModelForGraph(g2));
+ final Model m2 = createModelForGraph(g2);
+ final String graphName2 = NodeFactory.createBlankNode().toString();
+ dsg2.addNamedModel(graphName2, m2);
+ Dataset dataset = Stream.<Dataset>builder().add(dsg1).add(dsg2).build().collect(testInstance());
+ assertEquals(2, Iter.count(dataset.listNames()));
+ assertTrue(m1.isIsomorphicWith(dataset.getNamedModel(graphName1)));
+ assertTrue(m2.isIsomorphicWith(dataset.getNamedModel(graphName2)));
+ m1.listStatements().mapWith(dataset.getDefaultModel()::contains).forEachRemaining(Assert::assertTrue);
+ m2.listStatements().mapWith(dataset.getDefaultModel()::contains).forEachRemaining(Assert::assertTrue);
+ }
+
}