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);
+    }
+    
 }