added tests for PoliqarpPlusTree.java (not quite done yet, fails for 2 tests...)
diff --git a/src/test/java/PoliqarpPlusTreeTest.java b/src/test/java/PoliqarpPlusTreeTest.java
new file mode 100644
index 0000000..63437f2
--- /dev/null
+++ b/src/test/java/PoliqarpPlusTreeTest.java
@@ -0,0 +1,315 @@
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+import de.ids_mannheim.korap.query.serialize.PoliqarpPlusTree;
+
+public class PoliqarpPlusTreeTest {
+
+ PoliqarpPlusTree ppt;
+ String map;
+
+ private boolean equalsContent(String str, Object map) {
+ str = str.replaceAll(" ", "");
+ String mapStr = map.toString().replaceAll(" ", "");
+ return str.equals(mapStr);
+ }
+
+ private boolean equalsQueryContent(String res, String query) {
+ res = res.replaceAll(" ", "");
+ ppt = new PoliqarpPlusTree(query);
+ String queryMap = ppt.getRequestMap().get("query").toString().replaceAll(" ", "");
+ return res.equals(queryMap);
+ }
+
+ @Test
+ public void testContext() {
+ String contextString = "{korap=http://korap.ids-mannheim.de/ns/query, @language=de, operands={@id=korap:operands, @container=@list}, relation={@id=korap:relation, @type=korap:relation#types}, class={@id=korap:class, @type=xsd:integer}, query=korap:query, filter=korap:filter, meta=korap:meta}";
+ ppt = new PoliqarpPlusTree("[base=test]");
+ assertTrue(equalsContent(contextString, ppt.getRequestMap().get("@context")));
+ }
+
+ @Test
+ public void testSingleTokens() {
+ // [base=Mann]
+ String token1 = "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}";
+ assertTrue(equalsQueryContent(token1, "[base=Mann]"));
+
+ // [orth!=Frau]
+ String token2 = "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation=!=}}";
+ assertTrue(equalsQueryContent(token2, "[orth!=Frau]"));
+
+ // [!p=NN]
+ String token3 = "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation=!=}}";
+ assertTrue(equalsQueryContent(token3, "[!p=NN]"));
+
+ // [!p!=NN]
+ String token4 = "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}";
+ assertTrue(equalsQueryContent(token4, "[!p!=NN]"));
+ }
+
+ @Test
+ public void testElements() {
+ // <s>
+ String elem1 = "{@type=korap:element, @value=s}";
+ assertTrue(equalsQueryContent(elem1, "<s>"));
+
+ // <vp>
+ String elem2 = "{@type=korap:element, @value=vp}";
+ assertTrue(equalsQueryContent(elem2, "<vp>"));
+ }
+
+ @Test
+ public void testCoordinatedFields() {
+ // [base=Mann&(cas=N|cas=A)]
+ String cof1 =
+ "{@type=korap:token, @value=" +
+ "{@type=korap:group, operands=[" +
+ "{@type=korap:term, @value=base:Mann, relation==}," +
+ "{@type=korap:group, operands=[" +
+ "{@type=korap:term, @value=cas:N, relation==}," +
+ "{@type=korap:term, @value=cas:A, relation==}" +
+ "], relation=or}" +
+ "], relation=and}" +
+ "}";
+ ppt = new PoliqarpPlusTree("[base=Mann&(cas=N|cas=A)]");
+ map = ppt.getRequestMap().get("query").toString();
+ assertEquals(cof1.replaceAll(" ", ""), map.replaceAll(" ", ""));
+ }
+
+ @Test
+ public void testOccurrence() {
+ }
+
+ @Test
+ public void testTokenSequence() {
+ // [base=Mann][orth=Frau]
+ String seq1 = "{@type=korap:sequence, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}" +
+ "]}";
+ assertTrue(equalsQueryContent(seq1, "[base=Mann][orth=Frau]"));
+
+ // [base=Mann][orth=Frau][p=NN]
+ String seq2 = "{@type=korap:sequence, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}, " +
+ "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}" +
+ "]}";
+ assertTrue(equalsQueryContent(seq2, "[base=Mann][orth=Frau][p=NN]"));
+ }
+
+ @Test
+ public void testTokenElemSequence() {
+ // [base=Mann]<vp>
+ String seq1 = "{@type=korap:sequence, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " +
+ "{@type=korap:element, @value=vp}" +
+ "]}";
+ assertTrue(equalsQueryContent(seq1, "[base=Mann]<vp>"));
+
+ // <vp>[base=Mann]
+ String seq2 = "{@type=korap:sequence, operands=[" +
+ "{@type=korap:element, @value=vp}, "+
+ "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}} " +
+ "]}";
+ assertTrue(equalsQueryContent(seq2, "<vp>[base=Mann]"));
+
+ // <vp>[base=Mann]<pp>
+ String seq3 = "{@type=korap:sequence, operands=[" +
+ "{@type=korap:element, @value=vp}, "+
+ "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " +
+ "{@type=korap:element, @value=pp} "+
+ "]}";
+ assertTrue(equalsQueryContent(seq3, "<vp>[base=Mann]<pp>"));
+ }
+
+ @Test
+ public void testElemSequence() {
+ // <np><vp>
+ String seq1 = "{@type=korap:sequence, operands=[" +
+ "{@type=korap:element, @value=np}," +
+ "{@type=korap:element, @value=vp}" +
+ "]}";
+ assertTrue(equalsQueryContent(seq1, "<np><vp>"));
+
+ // <np><vp><pp>
+ String seq2 = "{@type=korap:sequence, operands=[" +
+ "{@type=korap:element, @value=np}," +
+ "{@type=korap:element, @value=vp}," +
+ "{@type=korap:element, @value=pp}" +
+ "]}";
+ assertTrue(equalsQueryContent(seq2, "<np><vp><pp>"));
+ }
+
+ @Test
+ public void testClasses() {
+ // {[base=Mann]}
+ String cls1 = "{@type=korap:group, class=0, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}" +
+ "]}";
+ assertTrue(equalsQueryContent(cls1, "{[base=Mann]}"));
+
+ // {[base=Mann][orth=Frau]}
+ String cls2 = "{@type=korap:group, class=0, operands=[" +
+ "{@type=korap:sequence, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}," +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}" +
+ "]}" +
+ "]}";
+ assertTrue(equalsQueryContent(cls2, "{[base=Mann][orth=Frau]}"));
+
+ // [p=NN]{[base=Mann][orth=Frau]}
+ String cls3 = "{@type=korap:sequence, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}," +
+ "{@type=korap:group, class=0, operands=[" +
+ "{@type=korap:sequence, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}," +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}" +
+ "]}" +
+ "]}" +
+ "]}";
+ assertTrue(equalsQueryContent(cls3, "[p=NN]{[base=Mann][orth=Frau]}"));
+
+ // {[base=Mann][orth=Frau]}[p=NN]
+ String cls4 = "{@type=korap:sequence, operands=[" +
+ "{@type=korap:group, class=0, operands=[" +
+ "{@type=korap:sequence, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}," +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:Frau, relation==}}" +
+ "]}" +
+ "]}," +
+ "{@type=korap:token, @value={@type=korap:term, @value=p:NN, relation==}}" +
+ "]}";
+ assertTrue(equalsQueryContent(cls4, "{[base=Mann][orth=Frau]}[p=NN]"));
+ }
+
+ @Test
+ public void testPositions() {
+ // contains(<s>,<np>)
+ String pos1 = "{@type=korap:group, relation=position, position=contains, operands=[" +
+ "{@type=korap:element, @value=s}," +
+ "{@type=korap:element, @value=np}" +
+ "]}";
+ assertTrue(equalsQueryContent(pos1, "contains(<s>,<np>)"));
+
+ // contains(<s>,[base=Mann])
+ String pos2 = "{@type=korap:group, relation=position, position=contains, operands=[" +
+ "{@type=korap:element, @value=s}," +
+ "{@type=korap:token, @value= {@type=korap:term, @value=base:Mann, relation==}}" +
+ "]}";
+ assertTrue(equalsQueryContent(pos2, "contains(<s>,[base=Mann])"));
+
+ // contains(<s>,[orth=der][orth=Mann])
+ String pos3 = "{@type=korap:group, relation=position, position=contains, operands=[" +
+ "{@type=korap:element, @value=s}," +
+ "{@type=korap:sequence, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+ "]}" +
+ "]}";
+ ppt = new PoliqarpPlusTree("contains(<s>,[orth=der][orth=Mann])");
+ map = ppt.getRequestMap().get("query").toString();
+ assertEquals(pos3.replaceAll(" ", ""), map.replaceAll(" ", ""));
+
+ // [base=Auto]contains(<s>,[base=Mann])
+ String pos4 =
+ "{@type=korap:sequence, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=base:Auto, relation==}}," +
+ "{@type=korap:group, relation=position, position=contains, operands=[" +
+ "{@type=korap:element, @value=s}," +
+ "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}" +
+ "]}" +
+ "]}";
+ ppt = new PoliqarpPlusTree("[base=Auto]contains(<s>,[base=Mann])");
+ map = ppt.getRequestMap().get("query").toString();
+ assertEquals(pos4.replaceAll(" ", ""), map.replaceAll(" ", ""));
+ }
+
+ @Test
+ public void testNestedPositions() {
+ // contains(<s>,startswith(<np>,[orth=Der]))
+ String npos1 =
+ "{@type=korap:group, relation=position, position=contains, operands=[" +
+ "{@type=korap:element, @value=s}," +
+ "{@type=korap:group, relation=position, position=startswith, operands=[" +
+ "{@type=korap:element, @value=np}," +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}" +
+ "]}" +
+ "]}";
+ ppt = new PoliqarpPlusTree("contains(<s>,startswith(<np>,[orth=Der]))");
+ map = ppt.getRequestMap().get("query").toString();
+ assertEquals(npos1.replaceAll(" ", ""), map.replaceAll(" ", ""));
+ }
+
+ @Test
+ public void testShrinkSplit() {
+ // shrink([orth=Der]{[orth=Mann]})
+ String shr1 =
+ "{@type=korap:group, relation=shrink, shrink=0, operands=[" +
+ "{@type=korap:sequence, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}," +
+ "{@type=korap:group, class=0, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+ "]}" +
+ "]}" +
+ "]}";
+ ppt = new PoliqarpPlusTree("shrink([orth=Der]{[orth=Mann]})");
+ map = ppt.getRequestMap().get("query").toString();
+ assertEquals(shr1.replaceAll(" ", ""), map.replaceAll(" ", ""));
+
+ // shrink([orth=Der]{[orth=Mann][orth=geht]})
+ String shr2 =
+ "{@type=korap:group, relation=shrink, shrink=0, operands=[" +
+ "{@type=korap:sequence, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}," +
+ "{@type=korap:group, class=0, operands=[" +
+ "{@type=korap:sequence, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}," +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:geht, relation==}}" +
+ "]}" +
+ "]}" +
+ "]}" +
+ "]}";
+ ppt = new PoliqarpPlusTree("shrink([orth=Der]{[orth=Mann][orth=geht]})");
+ map = ppt.getRequestMap().get("query").toString();
+ assertEquals(shr2.replaceAll(" ", ""), map.replaceAll(" ", ""));
+
+ // shrink(1:[orth=Der]{1:[orth=Mann][orth=geht]})
+ String shr3 =
+ "{@type=korap:group, relation=shrink, shrink=1, operands=[" +
+ "{@type=korap:sequence, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:Der, relation==}}," +
+ "{@type=korap:group, class=1, operands=[" +
+ "{@type=korap:sequence, operands=[" +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}," +
+ "{@type=korap:token, @value={@type=korap:term, @value=orth:geht, relation==}}" +
+ "]}" +
+ "]}" +
+ "]}" +
+ "]}";
+ ppt = new PoliqarpPlusTree("shrink(1:[orth=Der]{1:[orth=Mann][orth=geht]})");
+ map = ppt.getRequestMap().get("query").toString();
+ assertEquals(shr3.replaceAll(" ", ""), map.replaceAll(" ", ""));
+
+ // shrink(1:startswith(<s>,{1:<np>}))
+ String shr4 =
+ "{@type=korap:group, relation=shrink, shrink=1, operands=[" +
+ "{@type=korap:group, relation=position, position=startswith, operands=[" +
+ "{@type=korap:element, @value=s}," +
+ "{@type=korap:group, class=1, operands=[" +
+ "{@type=korap:element, @value=np}" +
+ "]}" +
+ "]}" +
+ "]}";
+ ppt = new PoliqarpPlusTree("shrink(1:startswith(<s>,{1:<np>}))");
+ map = ppt.getRequestMap().get("query").toString();
+ assertEquals(shr4.replaceAll(" ", ""), map.replaceAll(" ", ""));
+ }
+
+ @Test
+ public void testLayers() {
+
+ }
+}
+