aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/uk/ac/ox/cs/rsacomb/functional/Functional.scala
blob: 08ff283918ea2aa9eb84d86e8e23e9c712bd4cf0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package uk.ac.ox.cs.rsacomb.functional

import org.scalatest.funspec.AnyFunSpec
import org.scalatest.matchers.should.Matchers
import org.scalatest.tagobjects.Slow

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.{Logger, RDFoxUtil}

class LUBM extends AnyFunSpec with Matchers {

  Logger.level = Logger.QUIET

  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 results = ujson.read(os.read(test / "results.json")).arr

  describe("Ontology size: 1)") {

    val queries = RDFoxUtil.loadQueriesFromFile(test / "queries.sparql")
    queries foreach { query =>
      it(s"Tested Query${query.id}") {
        val answers = rsa.ask(query).answers.map(_._2.mkString("\t"))
        val reference = results
          .find(_("queryID").num == query.id)
          .get("answers")
          .arr
          .map(_.str)
        answers should contain theSameElementsAs reference
      }
    }

    val slow = RDFoxUtil.loadQueriesFromFile(test / "queries-slow.sparql")
    slow foreach { query =>
      it(s"Tested Query${query.id}", Slow) {
        val answers = rsa.ask(query).answers.map(_._2.mkString("\t"))
        val reference = results
          .find(_("queryID").num == query.id)
          .get("answers")
          .arr
          .map(_.str)
        answers should contain theSameElementsAs reference
      }
    }

  }
}

class DBpedia extends AnyFunSpec with Matchers {

  Logger.level = Logger.QUIET

  private val test = os.pwd / "tests" / "dbpedia"

  /* 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 / "dbpedia+travel.owl",
    List(test / "dbpedia+travel.ttl")
  ) normalize normalizer
  private val rsa = ontology approximate toUpperbound

  /* Queries and results */
  private val results = ujson.read(os.read(test / "results.json")).arr

  describe("Full DBpedia + Travel data:") {

    val queries = RDFoxUtil.loadQueriesFromFile(test / "queries.sparql")
    queries foreach { query =>
      it(s"Tested Query${query.id}") {
        val answers = rsa.ask(query).answers.map(_._2.mkString("\t"))
        val reference = results
          .find(_("queryID").num == query.id)
          .get("answers")
          .arr
          .map(_.str)
        answers should contain theSameElementsAs reference
      }
    }
  }
}