Fixed sorting unordered element distance query results.

Change-Id: I0499a0c602c0d8d7a069477002bfd595ce24bac0
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceIndex.java
index 8ecc031..8594285 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceIndex.java
@@ -22,9 +22,14 @@
 import de.ids_mannheim.korap.query.SpanElementQuery;
 import de.ids_mannheim.korap.query.SpanNextQuery;
 import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
+import de.ids_mannheim.korap.response.Match;
 import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.util.QueryException;
 
+/**
+ * @author margaretha
+ *
+ */
 @RunWith(JUnit4.class)
 public class TestElementDistanceIndex {
 
@@ -87,7 +92,6 @@
         return fd;
     }
 
-
     public SpanQuery createQuery (String elementType, String x, String y,
             int min, int max, boolean isOrdered) {
 
@@ -246,8 +250,7 @@
         kr = ki.search(sqwi.toQuery(), (short) 10);
         assertEquals(1, kr.getTotalResults()); // Is 1 correct or should it not be ordered?
         assertEquals("[[ec]]ebdc", kr.getMatch(0).getSnippetBrackets());
-    };
-
+    }
 
     public static String getString (String path) {
         StringBuilder contentBuilder = new StringBuilder();
@@ -256,14 +259,14 @@
             String str;
             while ((str = in.readLine()) != null) {
                 contentBuilder.append(str);
-            };
+            }
             in.close();
         }
         catch (IOException e) {
             fail(e.getMessage());
         }
         return contentBuilder.toString();
-    };
+    }
 
 
     public static SpanQueryWrapper jsonQuery (String jsonFile) {
@@ -276,7 +279,7 @@
         catch (QueryException e) {
             fail(e.getMessage());
             sqwi = new QueryBuilder("tokens").seg("???");
-        };
+        }
         return sqwi;
-    };
-};
+    }
+}
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestUnorderedElementDistanceIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestUnorderedElementDistanceIndex.java
index be79a11..c625818 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestUnorderedElementDistanceIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestUnorderedElementDistanceIndex.java
@@ -91,6 +91,19 @@
         return fd;
     }
 
+    private FieldDocument createFieldDoc5 () {
+        FieldDocument fd = new FieldDocument();
+        fd.addString("ID", "doc-2");
+        fd.addTV("base", "text",
+                "[(0-1)s:b|_1$<i>0<i>1|<>:s$<b>64<i>0<i>2<i>2<b>0|<>:p$<b>64<i>0<i>4<i>4<b>0]"
+                        + "[(1-2)s:b|s:e|_2$<i>1<i>2]"
+                        + "[(2-3)s:e|_3$<i>2<i>3|<>:s$<b>64<i>2<i>3<i>4<b>0]"
+                        + "[(3-4)s:b|s:c|_4$<i>3<i>4]"
+                        + "[(4-5)s:e|_5$<i>4<i>5|<>:s$<b>64<i>4<i>6<i>6<b>0|<>:p$<b>64<i>4<i>6<i>6<b>0]"
+                        + "[(5-6)s:d|_6$<i>5<i>6]"
+                        + "[(6-7)s:b|_7$<i>6<i>7|<>:s$<b>64<i>6<i>7<i>7<b>0|<>:p$<b>64<i>6<i>7<i>7<b>0]");
+        return fd;
+    }
 
     public SpanQuery createQuery (String elementType, String x, String y,
             int minDistance, int maxDistance, boolean isOrdered) {
@@ -251,4 +264,37 @@
         //		    );
         //		}
     }
+    
+
+
+    /**
+     * Subspans occurrences are in the same positions.
+     */
+    @Test
+    public void testCase6 () throws IOException {
+        ki = new KrillIndex();
+        ki.addDoc(createFieldDoc5());
+        ki.commit();
+
+        SpanQuery sq = createQuery("s", "s:b", "s:e", 1, 2, false);
+        kr = ki.search(sq, (short) 10);
+
+        assertEquals(8, kr.getTotalResults());
+        assertEquals(0, kr.getMatch(0).startPos);
+        assertEquals(3, kr.getMatch(0).endPos);
+        assertEquals(0, kr.getMatch(1).startPos);
+        assertEquals(5, kr.getMatch(1).endPos);
+        assertEquals(1, kr.getMatch(2).startPos);
+        assertEquals(3, kr.getMatch(2).endPos);
+        assertEquals(1, kr.getMatch(3).startPos);
+        assertEquals(4, kr.getMatch(3).endPos);
+        assertEquals(1, kr.getMatch(4).startPos);
+        assertEquals(5, kr.getMatch(4).endPos);
+        assertEquals(2, kr.getMatch(5).startPos);
+        assertEquals(7, kr.getMatch(5).endPos);
+        assertEquals(3, kr.getMatch(6).startPos);
+        assertEquals(5, kr.getMatch(6).endPos);
+        assertEquals(4, kr.getMatch(7).startPos);
+        assertEquals(7, kr.getMatch(7).endPos);
+    }
 }