From 7a73dcd98f3a7824572d098889634662a47d6e7c Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Sun, 3 Oct 2021 13:48:29 +0100 Subject: Introduce functional tests These tests will check correctness of the overall system across versions. We should add more tests for know ontologies. --- .../scala/uk/ac/ox/cs/rsacomb/util/RDFoxUtil.scala | 8 ++-- .../ac/ox/cs/rsacomb/functional/Functional.scala | 49 ++++++++++++++++++++++ 2 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 src/test/scala/uk/ac/ox/cs/rsacomb/functional/Functional.scala (limited to 'src') diff --git a/src/main/scala/uk/ac/ox/cs/rsacomb/util/RDFoxUtil.scala b/src/main/scala/uk/ac/ox/cs/rsacomb/util/RDFoxUtil.scala index 46f1160..e3e7dd4 100644 --- a/src/main/scala/uk/ac/ox/cs/rsacomb/util/RDFoxUtil.scala +++ b/src/main/scala/uk/ac/ox/cs/rsacomb/util/RDFoxUtil.scala @@ -243,7 +243,8 @@ object RDFoxUtil { path: os.Path, prefixes: Prefixes = new Prefixes() ): List[ConjunctiveQuery] = { - val pattern = raw"\^\[Query(\d+)\]".r + val header = raw"\^\[[Qq]uery(\d+)\]".r + val comment = "^#.*".r val queries = os.read .lines(path) .map(_.trim.filter(_ >= ' ')) @@ -251,12 +252,13 @@ object RDFoxUtil { .foldRight((List.empty[Option[ConjunctiveQuery]], List.empty[String])) { case (line, (acc, query)) => { line match { - case pattern(id) => { + case header(id) => { val cq = ConjunctiveQuery.parse(id.toInt, query.mkString(" "), prefixes) (cq :: acc, List.empty) } - case _ => (acc, line :: query) + case comment() => (acc, query) + case _ => (acc, line :: query) } } } diff --git a/src/test/scala/uk/ac/ox/cs/rsacomb/functional/Functional.scala b/src/test/scala/uk/ac/ox/cs/rsacomb/functional/Functional.scala new file mode 100644 index 0000000..6882997 --- /dev/null +++ b/src/test/scala/uk/ac/ox/cs/rsacomb/functional/Functional.scala @@ -0,0 +1,49 @@ +package uk.ac.ox.cs.rsacomb.functional + +import org.scalatest.funspec.AnyFunSpec +import org.scalatest.matchers.should.Matchers + +import uk.ac.ox.cs.rsacomb.ontology.Ontology +import uk.ac.ox.cs.rsacomb.approximation.Upperbound +import uk.ac.ox.cs.rsacomb.converter.Normalizer +import uk.ac.ox.cs.rsacomb.util.RDFoxUtil + +class LUBM extends AnyFunSpec with Matchers { + + private val test = os.pwd / "tests" / "lubm" + + /* Approximation algorithms */ + //private val toLowerbound = new Lowerbound + private val toUpperbound = new Upperbound + + /* Normalization algorithms */ + private val normalizer = new Normalizer + + /* Ontology */ + private val ontology = Ontology( + test / "univ-bench.owl", + List(test / "data" / "lubm1.ttl") + ) normalize normalizer + private val rsa = ontology approximate toUpperbound + + /* Queries and results */ + private val queries = + RDFoxUtil.loadQueriesFromFile(test / "queries.sparql") + private val results = ujson.read(os.read(test / "results.json")).arr + + describe("Ontology size: 1)") { + + queries foreach { query => + it(s"Tested Query${query.id}") { + val answers = rsa.ask(query).answers.map(_._2.mkString(" ")) + val reference = results + .find(_("queryID").num == query.id) + .get("answers") + .arr + .map(_.str) + answers should contain theSameElementsAs reference + } + } + + } +} -- cgit v1.2.3