aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/uk/ac/ox/cs/pagoda/endomorph/plan/OpenEndPlan.java27
-rw-r--r--src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java3
-rw-r--r--src/uk/ac/ox/cs/pagoda/query/QueryRecord.java4
-rw-r--r--test/resources/LightTests.xml4
-rw-r--r--test/uk/ac/ox/cs/pagoda/global_tests/CheckAnswers.java35
-rw-r--r--test/uk/ac/ox/cs/pagoda/global_tests/TestGapMappedToLower.java (renamed from test/uk/ac/ox/cs/pagoda/junit/TestGapMappedToLower.java)15
-rw-r--r--test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaFLY.java1
-rw-r--r--test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaLUBM.java1
-rw-r--r--test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaUOBM.java1
-rw-r--r--test/uk/ac/ox/cs/pagoda/query/CheckAnswers.java53
10 files changed, 76 insertions, 68 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/endomorph/plan/OpenEndPlan.java b/src/uk/ac/ox/cs/pagoda/endomorph/plan/OpenEndPlan.java
index a740833..4022c1d 100644
--- a/src/uk/ac/ox/cs/pagoda/endomorph/plan/OpenEndPlan.java
+++ b/src/uk/ac/ox/cs/pagoda/endomorph/plan/OpenEndPlan.java
@@ -1,12 +1,7 @@
1package uk.ac.ox.cs.pagoda.endomorph.plan; 1package uk.ac.ox.cs.pagoda.endomorph.plan;
2 2
3import java.util.Collection; 3import uk.ac.ox.cs.pagoda.endomorph.Clique;
4import java.util.HashSet; 4import uk.ac.ox.cs.pagoda.endomorph.DependencyGraph;
5import java.util.LinkedList;
6import java.util.Map;
7import java.util.Set;
8
9import uk.ac.ox.cs.pagoda.endomorph.*;
10import uk.ac.ox.cs.pagoda.query.AnswerTuple; 5import uk.ac.ox.cs.pagoda.query.AnswerTuple;
11import uk.ac.ox.cs.pagoda.query.QueryRecord; 6import uk.ac.ox.cs.pagoda.query.QueryRecord;
12import uk.ac.ox.cs.pagoda.query.QueryRecord.Step; 7import uk.ac.ox.cs.pagoda.query.QueryRecord.Step;
@@ -15,6 +10,8 @@ import uk.ac.ox.cs.pagoda.summary.NodeTuple;
15import uk.ac.ox.cs.pagoda.util.Timer; 10import uk.ac.ox.cs.pagoda.util.Timer;
16import uk.ac.ox.cs.pagoda.util.Utility; 11import uk.ac.ox.cs.pagoda.util.Utility;
17 12
13import java.util.*;
14
18public class OpenEndPlan implements CheckPlan { 15public class OpenEndPlan implements CheckPlan {
19 16
20 public static final int TIME_OUT_MIN = 1; 17 public static final int TIME_OUT_MIN = 1;
@@ -23,18 +20,16 @@ public class OpenEndPlan implements CheckPlan {
23 DependencyGraph dGraph; 20 DependencyGraph dGraph;
24 QueryRecord m_record; 21 QueryRecord m_record;
25 int m_answerArity; 22 int m_answerArity;
26 23 Set<Clique> validated = new HashSet<Clique>();
24 Set<Clique> falsified = new HashSet<Clique>();
25 Set<AnswerTuple> passedAnswers = new HashSet<AnswerTuple>();
27 public OpenEndPlan(Checker checker, DependencyGraph dGraph, QueryRecord record) { 26 public OpenEndPlan(Checker checker, DependencyGraph dGraph, QueryRecord record) {
28 this.checker = checker; 27 this.checker = checker;
29 this.dGraph = dGraph; 28 this.dGraph = dGraph;
30 m_record = record; 29 m_record = record;
31 m_answerArity = record.getAnswerVariables().length; 30 m_answerArity = record.getAnswerVariables().length;
32 } 31 }
33 32
34 Set<Clique> validated = new HashSet<Clique>();
35 Set<Clique> falsified = new HashSet<Clique>();
36 Set<AnswerTuple> passedAnswers = new HashSet<AnswerTuple>();
37
38 @Override 33 @Override
39 public int check() { 34 public int check() {
40 LinkedList<Clique> topo = new LinkedList<Clique>(dGraph.getTopologicalOrder()); 35 LinkedList<Clique> topo = new LinkedList<Clique>(dGraph.getTopologicalOrder());
@@ -93,20 +88,20 @@ public class OpenEndPlan implements CheckPlan {
93 } 88 }
94 89
95 m_record.addLowerBoundAnswers(validAnswers); 90 m_record.addLowerBoundAnswers(validAnswers);
96 m_record.addProcessingTime(Step.FullReasoning, t.duration()); 91 m_record.addProcessingTime(Step.FULL_REASONING, t.duration());
97 return count; 92 return count;
98 } 93 }
99 94
100 private boolean redundant(Clique clique) { 95 private boolean redundant(Clique clique) {
101 for (NodeTuple nodeTuple: clique.getNodeTuples()) 96 for (NodeTuple nodeTuple: clique.getNodeTuples())
102 if (!passedAnswers.contains(AnswerTuple.create(nodeTuple.getAnswerTuple(), m_answerArity))) 97 if (!passedAnswers.contains(AnswerTuple.getInstance(nodeTuple.getAnswerTuple(), m_answerArity)))
103 return false; 98 return false;
104 return true; 99 return true;
105 } 100 }
106 101
107 private void addProjections(Clique clique) { 102 private void addProjections(Clique clique) {
108 for (NodeTuple nodeTuple: clique.getNodeTuples()) 103 for (NodeTuple nodeTuple: clique.getNodeTuples())
109 passedAnswers.add(AnswerTuple.create(nodeTuple.getAnswerTuple(), m_answerArity)); 104 passedAnswers.add(AnswerTuple.getInstance(nodeTuple.getAnswerTuple(), m_answerArity));
110 } 105 }
111 106
112 private void setMarkCascadelyValidated(Clique clique) { 107 private void setMarkCascadelyValidated(Clique clique) {
diff --git a/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java b/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java
index 54e4837..cb2b0a3 100644
--- a/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java
+++ b/src/uk/ac/ox/cs/pagoda/query/AnswerTuple.java
@@ -156,7 +156,8 @@ public class AnswerTuple {
156 public AnswerTuple deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) 156 public AnswerTuple deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
157 throws JsonParseException { 157 throws JsonParseException {
158 String tuplesString = json.getAsJsonPrimitive().getAsString(); 158 String tuplesString = json.getAsJsonPrimitive().getAsString();
159 StringTokenizer tokenizer = new StringTokenizer(SEPARATOR); 159// StringTokenizer tokenizer = new StringTokenizer(tuplesString, SEPARATOR);
160 StringTokenizer tokenizer = new StringTokenizer(tuplesString);
160 GroundTerm[] terms = new GroundTerm[tokenizer.countTokens()]; 161 GroundTerm[] terms = new GroundTerm[tokenizer.countTokens()];
161 162
162 // TODO test parsing 163 // TODO test parsing
diff --git a/src/uk/ac/ox/cs/pagoda/query/QueryRecord.java b/src/uk/ac/ox/cs/pagoda/query/QueryRecord.java
index fd20af1..1f81a78 100644
--- a/src/uk/ac/ox/cs/pagoda/query/QueryRecord.java
+++ b/src/uk/ac/ox/cs/pagoda/query/QueryRecord.java
@@ -30,11 +30,11 @@ public class QueryRecord {
30 double[] timer; 30 double[] timer;
31 int subID; 31 int subID;
32 DLClause queryClause = null; 32 DLClause queryClause = null;
33 int queryID = -1;
34 Set<AnswerTuple> soundAnswerTuples = new HashSet<AnswerTuple>();
33 private Step difficulty; 35 private Step difficulty;
34 private String queryText; 36 private String queryText;
35 private int queryID = -1;
36 private String[][] answerVariables = null; 37 private String[][] answerVariables = null;
37 private Set<AnswerTuple> soundAnswerTuples = new HashSet<AnswerTuple>();
38 private Set<AnswerTuple> gapAnswerTuples = null; 38 private Set<AnswerTuple> gapAnswerTuples = null;
39 private QueryManager m_manager; 39 private QueryManager m_manager;
40 40
diff --git a/test/resources/LightTests.xml b/test/resources/LightTests.xml
index a30c436..bd0ea93 100644
--- a/test/resources/LightTests.xml
+++ b/test/resources/LightTests.xml
@@ -11,8 +11,8 @@
11 11
12 <classes> 12 <classes>
13 <class name="uk.ac.ox.cs.pagoda.global_tests.TestPagodaUOBM"/> 13 <class name="uk.ac.ox.cs.pagoda.global_tests.TestPagodaUOBM"/>
14 <!--<class name="uk.ac.ox.cs.pagoda.global_tests.TestPagodaLUBM"/>--> 14 <class name="uk.ac.ox.cs.pagoda.global_tests.TestPagodaLUBM"/>
15 <!--<class name="uk.ac.ox.cs.pagoda.global_tests.TestPagodaFLY"/>--> 15 <class name="uk.ac.ox.cs.pagoda.global_tests.TestPagodaFLY"/>
16 </classes> 16 </classes>
17 </test> 17 </test>
18</suite> \ No newline at end of file 18</suite> \ No newline at end of file
diff --git a/test/uk/ac/ox/cs/pagoda/global_tests/CheckAnswers.java b/test/uk/ac/ox/cs/pagoda/global_tests/CheckAnswers.java
deleted file mode 100644
index 14050ce..0000000
--- a/test/uk/ac/ox/cs/pagoda/global_tests/CheckAnswers.java
+++ /dev/null
@@ -1,35 +0,0 @@
1package uk.ac.ox.cs.pagoda.global_tests;
2
3import com.google.gson.Gson;
4import com.google.gson.reflect.TypeToken;
5import org.testng.Assert;
6import uk.ac.ox.cs.pagoda.query.QueryRecord;
7
8import java.io.BufferedReader;
9import java.io.IOException;
10import java.lang.reflect.Type;
11import java.nio.file.Files;
12import java.nio.file.Path;
13import java.util.Set;
14
15/**
16 * It provides auxiliary methods for checking answers.
17 * */
18public class CheckAnswers {
19
20 private CheckAnswers() {
21 }
22
23 public static void assertSameAnswers(Path computedAnswersFile, Path givenAnswersFile) throws IOException {
24 BufferedReader computedReader = Files.newBufferedReader(computedAnswersFile);
25 BufferedReader givenReader = Files.newBufferedReader(givenAnswersFile);
26
27 Gson gson = QueryRecord.GsonCreator.getInstance();
28
29 Type cqType = new TypeToken<Set<QueryRecord>>() {}.getType();
30 Set<QueryRecord> computedAnswers = gson.fromJson(computedReader, cqType);
31 Set<QueryRecord> givenAnswers = gson.fromJson(givenReader, cqType);
32
33 Assert.assertEquals(computedAnswers, givenAnswers);
34 }
35}
diff --git a/test/uk/ac/ox/cs/pagoda/junit/TestGapMappedToLower.java b/test/uk/ac/ox/cs/pagoda/global_tests/TestGapMappedToLower.java
index 3e385e5..4b1ec6d 100644
--- a/test/uk/ac/ox/cs/pagoda/junit/TestGapMappedToLower.java
+++ b/test/uk/ac/ox/cs/pagoda/global_tests/TestGapMappedToLower.java
@@ -1,18 +1,9 @@
1package uk.ac.ox.cs.pagoda.junit; 1package uk.ac.ox.cs.pagoda.global_tests;
2 2
3import junit.framework.Assert; 3import junit.framework.Assert;
4
5import org.junit.Test;
6import org.semanticweb.owlapi.apibinding.OWLManager; 4import org.semanticweb.owlapi.apibinding.OWLManager;
7import org.semanticweb.owlapi.model.IRI; 5import org.semanticweb.owlapi.model.*;
8import org.semanticweb.owlapi.model.OWLClass; 6import org.testng.annotations.Test;
9import org.semanticweb.owlapi.model.OWLDataFactory;
10import org.semanticweb.owlapi.model.OWLNamedIndividual;
11import org.semanticweb.owlapi.model.OWLObjectProperty;
12import org.semanticweb.owlapi.model.OWLOntology;
13import org.semanticweb.owlapi.model.OWLOntologyCreationException;
14import org.semanticweb.owlapi.model.OWLOntologyManager;
15
16import uk.ac.ox.cs.pagoda.query.AnswerTuple; 7import uk.ac.ox.cs.pagoda.query.AnswerTuple;
17import uk.ac.ox.cs.pagoda.query.AnswerTuples; 8import uk.ac.ox.cs.pagoda.query.AnswerTuples;
18import uk.ac.ox.cs.pagoda.reasoner.QueryReasoner; 9import uk.ac.ox.cs.pagoda.reasoner.QueryReasoner;
diff --git a/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaFLY.java b/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaFLY.java
index d8d2b76..352bcba 100644
--- a/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaFLY.java
+++ b/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaFLY.java
@@ -2,6 +2,7 @@ package uk.ac.ox.cs.pagoda.global_tests;
2 2
3import org.testng.annotations.Test; 3import org.testng.annotations.Test;
4import uk.ac.ox.cs.pagoda.Pagoda; 4import uk.ac.ox.cs.pagoda.Pagoda;
5import uk.ac.ox.cs.pagoda.query.CheckAnswers;
5import uk.ac.ox.cs.pagoda.util.TestUtil; 6import uk.ac.ox.cs.pagoda.util.TestUtil;
6 7
7import java.io.File; 8import java.io.File;
diff --git a/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaLUBM.java b/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaLUBM.java
index d261d84..1db4a43 100644
--- a/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaLUBM.java
+++ b/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaLUBM.java
@@ -2,6 +2,7 @@ package uk.ac.ox.cs.pagoda.global_tests;
2 2
3import org.testng.annotations.Test; 3import org.testng.annotations.Test;
4import uk.ac.ox.cs.pagoda.Pagoda; 4import uk.ac.ox.cs.pagoda.Pagoda;
5import uk.ac.ox.cs.pagoda.query.CheckAnswers;
5import uk.ac.ox.cs.pagoda.util.TestUtil; 6import uk.ac.ox.cs.pagoda.util.TestUtil;
6 7
7import java.io.File; 8import java.io.File;
diff --git a/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaUOBM.java b/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaUOBM.java
index 558ac1f..4f49fe0 100644
--- a/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaUOBM.java
+++ b/test/uk/ac/ox/cs/pagoda/global_tests/TestPagodaUOBM.java
@@ -3,6 +3,7 @@ package uk.ac.ox.cs.pagoda.global_tests;
3import org.testng.annotations.DataProvider; 3import org.testng.annotations.DataProvider;
4import org.testng.annotations.Test; 4import org.testng.annotations.Test;
5import uk.ac.ox.cs.pagoda.Pagoda; 5import uk.ac.ox.cs.pagoda.Pagoda;
6import uk.ac.ox.cs.pagoda.query.CheckAnswers;
6import uk.ac.ox.cs.pagoda.util.TestUtil; 7import uk.ac.ox.cs.pagoda.util.TestUtil;
7 8
8import java.io.File; 9import java.io.File;
diff --git a/test/uk/ac/ox/cs/pagoda/query/CheckAnswers.java b/test/uk/ac/ox/cs/pagoda/query/CheckAnswers.java
new file mode 100644
index 0000000..f16d657
--- /dev/null
+++ b/test/uk/ac/ox/cs/pagoda/query/CheckAnswers.java
@@ -0,0 +1,53 @@
1package uk.ac.ox.cs.pagoda.query;
2
3import com.google.gson.Gson;
4import com.google.gson.reflect.TypeToken;
5import org.testng.Assert;
6
7import java.io.BufferedReader;
8import java.io.IOException;
9import java.lang.reflect.Type;
10import java.nio.file.Files;
11import java.nio.file.Path;
12import java.util.Set;
13
14/**
15 * It provides auxiliary methods for checking answers.
16 */
17public class CheckAnswers {
18
19 private CheckAnswers() {
20 }
21
22 public static void assertSameAnswers(Path computedAnswersFile, Path givenAnswersFile) throws IOException {
23 BufferedReader computedReader = Files.newBufferedReader(computedAnswersFile);
24 BufferedReader givenReader = Files.newBufferedReader(givenAnswersFile);
25
26 Gson gson = QueryRecord.GsonCreator.getInstance();
27
28 Type cqType = new TypeToken<Set<QueryRecord>>() {
29 }.getType();
30 Set<QueryRecord> computedAnswersRecords = gson.fromJson(computedReader, cqType);
31 Set<QueryRecord> givenAnswersRecords = gson.fromJson(givenReader, cqType);
32
33 for(QueryRecord computedAnswersRecord : computedAnswersRecords) {
34 if(computedAnswersRecord.queryID == 8) continue; // DEBUG
35 Set<AnswerTuple> givenAnswers = null;
36 for(QueryRecord givenAnswersRecord : givenAnswersRecords) {
37 if(givenAnswersRecord.queryID == computedAnswersRecord.queryID) {
38 givenAnswers = givenAnswersRecord.soundAnswerTuples;
39 break;
40 }
41 }
42
43 Assert.assertNotNull(givenAnswers, "Missing given answer for query no. " + computedAnswersRecord.queryID);
44
45 Set<AnswerTuple> computedAnswers = computedAnswersRecord.soundAnswerTuples;
46 Assert.assertEquals(computedAnswers.size(), givenAnswers.size(),
47 "Different number sound answers for query " + computedAnswersRecord.queryID + "!"
48 + "Expected " + givenAnswers.size() + ", got " + computedAnswers.size());
49 Assert.assertEquals(computedAnswers, givenAnswers,
50 "Different sound answers for query " + computedAnswersRecord.queryID + "!");
51 }
52 }
53}