You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2015/12/31 12:09:32 UTC

[2/2] jena git commit: Add TupleMap.reverse and TupleMap.sameMapping

Add TupleMap.reverse and TupleMap.sameMapping

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/05b9e3a0
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/05b9e3a0
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/05b9e3a0

Branch: refs/heads/master
Commit: 05b9e3a0ce42747122986da9566ad6e5c30d97ee
Parents: 684cfce
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Dec 31 11:09:18 2015 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Dec 31 11:09:18 2015 +0000

----------------------------------------------------------------------
 .../apache/jena/atlas/lib/tuple/TupleMap.java   | 44 +++++++-------
 .../jena/atlas/lib/tuple/TestTupleMap.java      | 60 +++++++++++++++-----
 2 files changed, 71 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/05b9e3a0/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleMap.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleMap.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleMap.java
index f07b745..c8cad95 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleMap.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/tuple/TupleMap.java
@@ -140,6 +140,23 @@ public class TupleMap {
             getTransform[x] = i;
         }
     }
+    
+    private TupleMap(String label, int[] getTransform, int[] putTransform) {
+        this.label = label ;
+        this.len = getTransform.length ;
+        this.getTransform = getTransform ;
+        this.putTransform = putTransform ;
+    }
+    
+    /** Return a {@code TupleMap} that maps in the opposite direction
+     *  <pre>
+     *  this.reverseMap().map is the same as this.unmap
+     *  this.reverseMap().unmap is the same as this.map
+     *  <pre>
+     */
+    public TupleMap reverse() {
+       return new TupleMap("Reverse:"+label, putTransform, getTransform) ; 
+    }
 
     /** Length of mapping */
     public int length() {
@@ -194,15 +211,6 @@ public class TupleMap {
         return apply(src, putTransform) ;
     }
 
-    // Does not work (java8) - assigning the return causes a runtime case exception 
-    //    /** Apply to an <em>unmapped</em> tuple to get a tuple with the tuple mapping applied */
-    //    public <T> T[] map(T[] src) {
-    //        @SuppressWarnings("unchecked")
-    //        T[]dst = (T[])new Object[src.length] ;
-    //        applyArray(src, dst, getTransform) ;
-    //        return dst ;
-    //    }
-
     /** Apply to an <em>unmapped</em> tuple to get a tuple with the tuple mapping applied.
      * Returns the destination array.
      */
@@ -213,15 +221,6 @@ public class TupleMap {
         return dst ;
     }
 
-    // Does not work (java8) - assigning the return causes a runtime case exception 
-    //    /** Apply to a <em>mapped</em> tuple to get a tuple with the tuple mapping reverse-applied */
-    //    public <T> T[] unmap(T[] src) {
-    //        @SuppressWarnings("unchecked")
-    //        T[]dst = (T[])new Object[src.length] ;
-    //        applyArray(src, dst, putTransform) ;
-    //        return dst ;
-    //    }
-
     /** Apply to a <em>mapped</em> tuple to get a tuple with the tuple mapping reverse-applied.
      * Returns the destination array.
      */
@@ -232,8 +231,7 @@ public class TupleMap {
         return dst ;
     }
 
-    /** Apply an index transformation
-     */
+    /** Apply an index transformation */
     private static <T> Tuple<T> apply(Tuple<T> src, int[] getTransform) {
         if ( src.len() != getTransform.length )
             throw new IllegalArgumentException("Lengths do not match: Tuple:"+src.len()+"; transform:"+getTransform.length) ;
@@ -370,6 +368,12 @@ public class TupleMap {
         return  Collections.unmodifiableList(list) ;
     }
 
+    /** Is this mapping the same (has the same effect) as {@code other}? */
+    public boolean sameMapping(TupleMap other) {
+        // Only need to check one array 
+        return Arrays.equals(getTransform, other.getTransform) ;
+    }
+
     @Override
     public String toString() {
         // return label ;

http://git-wip-us.apache.org/repos/asf/jena/blob/05b9e3a0/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTupleMap.java
----------------------------------------------------------------------
diff --git a/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTupleMap.java b/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTupleMap.java
index 75e1a05..d10cce5 100644
--- a/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTupleMap.java
+++ b/jena-base/src/test/java/org/apache/jena/atlas/lib/tuple/TestTupleMap.java
@@ -18,8 +18,7 @@
 
 package org.apache.jena.atlas.lib.tuple;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.*;
 
 import java.util.Arrays ;
 import java.util.List ;
@@ -33,7 +32,7 @@ public class TestTupleMap {
     // Check coverage
     
     @Test
-    public void map_tuple_01() {
+    public void map_tuple_1() {
         TupleMap tmap = TupleMap.create("SPO", "POS");
         Tuple<String> tuple = TupleFactory.tuple("S", "P", "O");
         Tuple<String> tuple2 = tmap.map(tuple);
@@ -47,7 +46,7 @@ public class TestTupleMap {
 
 
     @Test
-    public void map_tuple_02() {
+    public void map_tuple_2() {
         TupleMap x = TupleMap.create("SPO", "POS");
         Tuple<String> tuple = TupleFactory.tuple("S", "P", "O");
         Tuple<String> mapped = x.map(tuple);
@@ -56,7 +55,7 @@ public class TestTupleMap {
     }
 
     @Test
-    public void map_tuple_03() {
+    public void map_tuple_3() {
         TupleMap tmap = TupleMap.create("GSPO", "OSPG");
         Tuple<String> tuple = TupleFactory.tuple("G", "S", "P", "O");
         Tuple<String> mapped = tmap.map(tuple);
@@ -67,7 +66,7 @@ public class TestTupleMap {
     }
 
     @Test
-    public void map_tuple_04() {
+    public void map_tuple_4() {
         String[] x = {"G", "S", "P", "O"};
         String[] y = {"O", "S", "P", "G"};
 
@@ -82,7 +81,7 @@ public class TestTupleMap {
     }
 
     @Test
-    public void compile1() {
+    public void compile_1() {
         TupleMap map = TupleMap.create("SPO", "POS");
         // SPO -> POS 
         // col 0 goes to col 2
@@ -95,14 +94,14 @@ public class TestTupleMap {
     }
 
     @Test
-    public void compile2() {
+    public void compile_2() {
         TupleMap map = TupleMap.create("SPOG", "GOPS");
         Integer[] expected = {3, 2, 1, 0};
         assertEquals(Arrays.asList(expected), map.transformPut());
     }
 
     @Test
-    public void map_slot_01() {
+    public void map_slot_1() {
         TupleMap tmap = TupleMap.create("SPO", "POS");
         Tuple<String> tuple = TupleFactory.tuple("S", "P", "O");
         assertEquals("P", tmap.mapSlot(0, tuple));
@@ -116,7 +115,7 @@ public class TestTupleMap {
     }
 
     @Test
-    public void map_slot_02() {
+    public void map_slot_2() {
         TupleMap tmap = TupleMap.create("SPO", "POS");
         Tuple<String> tuple = TupleFactory.tuple("S", "P", "O");
         Tuple<String> tuple1 = TupleFactory.tuple
@@ -128,7 +127,7 @@ public class TestTupleMap {
     }        
 
     @Test
-    public void map_slot_03() {
+    public void map_slot_3() {
         TupleMap tmap = TupleMap.create("POS", "SPO");
         Tuple<String> tuple = TupleFactory.tuple("P", "O", "S");
         Tuple<String> tuple1 = TupleFactory.tuple
@@ -153,7 +152,7 @@ public class TestTupleMap {
     }
     
     @Test
-    public void map_array_01() {
+    public void map_array_1() {
         TupleMap x = TupleMap.create("SPO","POS"); 
         Tuple<Integer> t = TupleFactory.tuple(2, 0, 1);
         Tuple<Integer> t1 = x.map(t);
@@ -174,7 +173,7 @@ public class TestTupleMap {
     }
     
     @Test
-    public void map_array_02() {
+    public void map_array_2() {
         // (0,1,2) -> (2,0,1) S->2 etc
         // so (0,1,2) <- (1,2,0)
         TupleMap x = TupleMap.create("SPO","POS");
@@ -183,4 +182,39 @@ public class TestTupleMap {
         assertEquals("Y", x.unmapSlot(1, array));
         assertEquals("Z", x.unmapSlot(2, array));
     }
+    
+    @Test
+    public void map_same_1() {
+        TupleMap x1 = TupleMap.create("SPO","POS");
+        TupleMap x2 = TupleMap.create("SPO","POS");
+        assertTrue(x1.sameMapping(x1)) ;
+        assertTrue(x1.sameMapping(x2)) ;
+        assertTrue(x2.sameMapping(x1)) ;
+    }
+
+    @Test
+    public void map_same_2() {
+        TupleMap x1 = TupleMap.create("SPO","POS");
+        TupleMap x2 = TupleMap.create("SPO","OSP");
+        assertFalse(x1.sameMapping(x2)) ;
+        assertFalse(x2.sameMapping(x1)) ;
+    }
+
+    @Test
+    public void map_reverse_1() {
+        TupleMap x1 = TupleMap.create("SPO","POS");
+        TupleMap x2 = TupleMap.create("POS","SPO");
+        assertTrue(x1.reverse().sameMapping(x2)) ;
+        assertFalse(x1.reverse().sameMapping(x1)) ;
+    }
+
+    @Test
+    public void map_reverse_2() {
+        TupleMap x1 = TupleMap.create("SPO","POS");
+        TupleMap x2 = TupleMap.create("POS","SPO");
+        Tuple<String> tuple = TupleFactory.tuple("X", "Y", "Z") ;
+        Tuple<String> tuple1 = x1.map(tuple) ;
+        Tuple<String> tuple2 = x2.unmap(tuple) ;
+        assertEquals(tuple1, tuple2) ;
+    }
 }