diff --git a/.eslintrc.js b/.eslintrc.js index 4eb3d445..dcc55056 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -149,7 +149,7 @@ module.exports = { }, { // Specific rules for test files - files: ['**/test/**/*.ts'], + files: ['**/test/**/*.ts', '**/perf/**/*.ts'], env: { 'jest/globals': true, }, diff --git a/engines/query-sparql-file-reasoning/perf/deep-taxonomy-benchmark.ts b/engines/query-sparql-file-reasoning/perf/deep-taxonomy-benchmark.ts new file mode 100644 index 00000000..ef52845c --- /dev/null +++ b/engines/query-sparql-file-reasoning/perf/deep-taxonomy-benchmark.ts @@ -0,0 +1,36 @@ +import * as path from 'path'; +import { generateDeepTaxonomy, TARGET_RESULT } from 'deep-taxonomy-benchmark'; +import { Factory } from 'sparqlalgebrajs'; +import { QueryEngine } from '../lib'; + +async function deepTaxonomy(extended = false) { + for (let i = 1; i <= 6; i++) { + const engine = new QueryEngine(); + const factory = new Factory(); + + const TITLE = `test-dl-${10 ** i}.n3`; + const store = generateDeepTaxonomy(10 ** i, extended); + + // eslint-disable-next-line no-console + console.time(`Reasoning: ${TITLE}`); + + const result = await engine.queryBoolean( + factory.createAsk(factory.createPattern(TARGET_RESULT.subject, TARGET_RESULT.predicate, TARGET_RESULT.object)), + { + sources: [ store ], + rules: path.join(__dirname, 'subclass.n3'), + }, + ); + if (!result) { + throw new Error('Target result not found'); + } + // eslint-disable-next-line no-console + console.timeEnd(`Reasoning: ${TITLE}`); + } +} + +deepTaxonomy() + .catch(error => { + // eslint-disable-next-line no-console + console.error(error); + }); diff --git a/engines/query-sparql-file-reasoning/perf/subclass.n3 b/engines/query-sparql-file-reasoning/perf/subclass.n3 new file mode 100644 index 00000000..9cafa282 --- /dev/null +++ b/engines/query-sparql-file-reasoning/perf/subclass.n3 @@ -0,0 +1,4 @@ +@prefix rdfs: . +@prefix rdf: . + +{ ?uuu rdfs:subClassOf ?xxx . ?vvv rdf:type ?uuu } => { ?vvv a ?xxx } . diff --git a/engines/query-sparql-file-reasoning/test/data/subclass-rule.n3 b/engines/query-sparql-file-reasoning/test/data/subclass-rule.n3 index 4648ec89..9cafa282 100644 --- a/engines/query-sparql-file-reasoning/test/data/subclass-rule.n3 +++ b/engines/query-sparql-file-reasoning/test/data/subclass-rule.n3 @@ -1,4 +1,4 @@ @prefix rdfs: . @prefix rdf: . -{ ?uuu rdfs:subClassOf ?xxx . ?vvv rdf:type ?uuu } => { ?vvv a ?xxx } . \ No newline at end of file +{ ?uuu rdfs:subClassOf ?xxx . ?vvv rdf:type ?uuu } => { ?vvv a ?xxx } . diff --git a/package.json b/package.json index 80ad64bd..98f3b180 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "colors": "^1.4.0", "componentsjs-generator": "^3.1.0", "cross-fetch": "^3.1.5", + "deep-taxonomy-benchmark": "^1.0.0", "depcheck": "^1.4.3", "eslint": "^8.23.1", "eslint-config-es": "4.2.0", diff --git a/yarn.lock b/yarn.lock index da55648f..e2dc894d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6104,6 +6104,13 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +deep-taxonomy-benchmark@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/deep-taxonomy-benchmark/-/deep-taxonomy-benchmark-1.0.0.tgz#de428c9a2425e31b20021b3ce074e241c0909f38" + integrity sha512-hOHIorWBsyTFTuAZHWWEz7jkxNbjvZeiW/mxl4BwHdYZxWHnqM95s/3Qs56qHt7Q6+M/cgzu6R9EbQBKWddFcw== + dependencies: + n3 "^1.16.2" + deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"