1 package eu.fbk.rdfpro;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.List;
6 import java.util.concurrent.atomic.AtomicInteger;
7
8 import org.openrdf.model.Resource;
9 import org.openrdf.model.Statement;
10 import org.openrdf.model.URI;
11 import org.openrdf.model.Value;
12 import org.openrdf.model.impl.ContextStatementImpl;
13 import org.openrdf.model.vocabulary.OWL;
14
15 import eu.fbk.rdfpro.RDFHandlers;
16 import eu.fbk.rdfpro.RDFProcessor;
17 import eu.fbk.rdfpro.RDFProcessors;
18 import eu.fbk.rdfpro.RDFSource;
19 import eu.fbk.rdfpro.RDFSources;
20
21 public class RuleProcessorTest {
22
23
24
25
26 public static void main(final String... args) throws Throwable {
27 mainRules(args);
28
29 }
30
31 private static void mainRules(final String... args) throws Throwable {
32
33 int index = 0;
34 for (; index < args.length; ++index) {
35 if (args[index].equals("--")) {
36 break;
37 }
38 }
39
40 final RDFSource source = RDFSources.read(true, true, null, null,
41 Arrays.copyOfRange(args, 0, index));
42
43 final RDFProcessor processor = RDFProcessors.parse(true,
44 "@rules " + String.join(" ", Arrays.copyOfRange(args, index + 1, args.length)));
45
46 final int n = 10;
47 long ts = 0;
48 for (int i = 0; i < n; ++i) {
49 if (i == 5) {
50 ts = System.currentTimeMillis();
51 }
52 processor.apply(source, RDFHandlers.NIL, 1);
53 }
54 System.out.println("Average: " + (System.currentTimeMillis() - ts) / (n - 5));
55 }
56
57 private static void mainTemplate(final String... args) throws Throwable {
58
59 int index = 0;
60 for (; index < args.length; ++index) {
61 if (args[index].equals("--")) {
62 break;
63 }
64 }
65
66 RDFSource source = RDFSources.read(true, true, null, null,
67 Arrays.copyOfRange(args, 0, index));
68
69 final List<Statement> statements = new ArrayList<>();
70 source.emit(RDFHandlers.wrap(statements), 1);
71 source = RDFSources.wrap(statements);
72
73 System.out.println(statements.size());
74
75 final long t = System.nanoTime();
76 final Value[] array = new Value[4];
77 final AtomicInteger counter = new AtomicInteger(0);
78 for (int i = 0; i < 1000000; ++i) {
79 for (final Statement stmt : statements) {
80
81 method1(stmt.getSubject(), stmt.getPredicate(), stmt.getObject(),
82 stmt.getContext(), array, 0);
83 counter.addAndGet(array[1].hashCode() + array[3].hashCode());
84
85
86
87
88
89
90
91
92
93
94 }
95 }
96 System.out.println((System.nanoTime() - t) / 1000000);
97 System.out.println(counter);
98 }
99
100
101
102
103 private static void method1(final Resource s, final URI p, final Value o, final Resource c,
104 final Value[] out, int offset) {
105 out[offset++] = s;
106 out[offset++] = OWL.SAMEAS;
107 out[offset++] = s;
108 out[offset++] = OWL.THING;
109 }
110
111 private static void method2(final Resource s, final URI p, final Value o, final Resource c,
112 final QuadHandler handler) {
113 handler.handle(s, OWL.SAMEAS, s, OWL.THING);
114 }
115
116 private static interface QuadHandler {
117
118 void handle(Resource s, URI p, Value o, Resource c);
119
120 }
121
122 private static Statement method3(final Statement s) {
123 return new ContextStatementImpl(s.getSubject(), OWL.SAMEAS, s.getSubject(), OWL.THING);
124 }
125
126 }