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