blob: ed5c41d1515b8f93c4c79899ca069f8a77b87bd0 [file] [log] [blame]
Nils Diewald93d6d1b2015-02-02 21:47:43 +00001package de.ids_mannheim.korap.query;
2
Nils Diewald5c375702015-02-09 20:58:24 +00003import java.io.IOException;
4import java.util.Collection;
5
Nils Diewald93d6d1b2015-02-02 21:47:43 +00006import de.ids_mannheim.korap.query.FrameConstraint;
7import de.ids_mannheim.korap.util.QueryException;
Nils Diewald5c375702015-02-09 20:58:24 +00008import org.apache.lucene.search.spans.Spans;
9
Nils Diewald93d6d1b2015-02-02 21:47:43 +000010import static org.junit.Assert.*;
11import org.junit.Test;
12import org.junit.Ignore;
13import org.junit.runner.RunWith;
14import org.junit.runners.JUnit4;
15
16/**
17 * @author diewald
18 */
19@RunWith(JUnit4.class)
20public class TestFrameConstraint {
21
22 @Test
23 public void testInitialization () throws QueryException {
24 FrameConstraint fc = new FrameConstraint();
25 assertEquals(fc.check(1), false);
26 };
27
Nils Diewaldbb33da22015-03-04 16:24:25 +000028
Nils Diewald93d6d1b2015-02-02 21:47:43 +000029 @Test
30 public void testBitVector () throws QueryException {
31 int a = 1;
32 int b = 1 << 1;
33
34 assertEquals(3, a ^ b);
35 };
36
Nils Diewaldbb33da22015-03-04 16:24:25 +000037
Nils Diewald93d6d1b2015-02-02 21:47:43 +000038 @Test
39 public void testOr () throws QueryException {
40 FrameConstraint fc = new FrameConstraint();
41
42 // Nothing set
Nils Diewaldbb33da22015-03-04 16:24:25 +000043 assertEquals(fc.check("precedes"), false);
Nils Diewald93d6d1b2015-02-02 21:47:43 +000044 assertEquals(fc.check("precedesDirectly"), false);
Nils Diewaldbb33da22015-03-04 16:24:25 +000045 assertEquals(fc.check("overlapsLeft"), false);
46 assertEquals(fc.check("alignsLeft"), false);
47 assertEquals(fc.check("startsWith"), false);
48 assertEquals(fc.check("matches"), false);
49 assertEquals(fc.check("isWithin"), false);
50 assertEquals(fc.check("isAround"), false);
51 assertEquals(fc.check("endsWith"), false);
52 assertEquals(fc.check("alignsRight"), false);
53 assertEquals(fc.check("overlapsRight"), false);
Nils Diewald93d6d1b2015-02-02 21:47:43 +000054 assertEquals(fc.check("succeedsDirectly"), false);
Nils Diewaldbb33da22015-03-04 16:24:25 +000055 assertEquals(fc.check("succeeds"), false);
Nils Diewald93d6d1b2015-02-02 21:47:43 +000056
57 // Some or
Nils Diewald83c9b162015-02-03 21:05:07 +000058 fc.add("succeeds").add("succeedsDirectly");
Nils Diewaldbb33da22015-03-04 16:24:25 +000059 assertEquals(fc.check("precedes"), false);
Nils Diewald93d6d1b2015-02-02 21:47:43 +000060 assertEquals(fc.check("precedesDirectly"), false);
Nils Diewaldbb33da22015-03-04 16:24:25 +000061 assertEquals(fc.check("overlapsLeft"), false);
62 assertEquals(fc.check("alignsLeft"), false);
63 assertEquals(fc.check("startsWith"), false);
64 assertEquals(fc.check("matches"), false);
65 assertEquals(fc.check("isWithin"), false);
66 assertEquals(fc.check("isAround"), false);
67 assertEquals(fc.check("endsWith"), false);
68 assertEquals(fc.check("alignsRight"), false);
69 assertEquals(fc.check("overlapsRight"), false);
Nils Diewald93d6d1b2015-02-02 21:47:43 +000070 assertEquals(fc.check("succeedsDirectly"), true);
Nils Diewaldbb33da22015-03-04 16:24:25 +000071 assertEquals(fc.check("succeeds"), true);
Nils Diewald93d6d1b2015-02-02 21:47:43 +000072
73 // Moar or
Nils Diewald83c9b162015-02-03 21:05:07 +000074 fc.add("precedes").add("precedesDirectly");
Nils Diewaldbb33da22015-03-04 16:24:25 +000075 assertEquals(fc.check("precedes"), true);
Nils Diewald93d6d1b2015-02-02 21:47:43 +000076 assertEquals(fc.check("precedesDirectly"), true);
Nils Diewaldbb33da22015-03-04 16:24:25 +000077 assertEquals(fc.check("overlapsLeft"), false);
78 assertEquals(fc.check("alignsLeft"), false);
79 assertEquals(fc.check("startsWith"), false);
80 assertEquals(fc.check("matches"), false);
81 assertEquals(fc.check("isWithin"), false);
82 assertEquals(fc.check("isAround"), false);
83 assertEquals(fc.check("endsWith"), false);
84 assertEquals(fc.check("alignsRight"), false);
85 assertEquals(fc.check("overlapsRight"), false);
Nils Diewald93d6d1b2015-02-02 21:47:43 +000086 assertEquals(fc.check("succeedsDirectly"), true);
Nils Diewaldbb33da22015-03-04 16:24:25 +000087 assertEquals(fc.check("succeeds"), true);
Nils Diewald93d6d1b2015-02-02 21:47:43 +000088
89 // Moar or
Nils Diewald83c9b162015-02-03 21:05:07 +000090 fc.add("matches").add("startsWith");
Nils Diewaldbb33da22015-03-04 16:24:25 +000091 assertEquals(fc.check("precedes"), true);
Nils Diewald93d6d1b2015-02-02 21:47:43 +000092 assertEquals(fc.check("precedesDirectly"), true);
Nils Diewaldbb33da22015-03-04 16:24:25 +000093 assertEquals(fc.check("overlapsLeft"), false);
94 assertEquals(fc.check("alignsLeft"), false);
95 assertEquals(fc.check("startsWith"), true);
96 assertEquals(fc.check("matches"), true);
97 assertEquals(fc.check("isWithin"), false);
98 assertEquals(fc.check("isAround"), false);
99 assertEquals(fc.check("endsWith"), false);
100 assertEquals(fc.check("alignsRight"), false);
101 assertEquals(fc.check("overlapsRight"), false);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000102 assertEquals(fc.check("succeedsDirectly"), true);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000103 assertEquals(fc.check("succeeds"), true);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000104
105 // Invert
106 fc.invert();
Nils Diewaldbb33da22015-03-04 16:24:25 +0000107 assertEquals(fc.check("precedes"), false);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000108 assertEquals(fc.check("precedesDirectly"), false);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000109 assertEquals(fc.check("overlapsLeft"), true);
110 assertEquals(fc.check("alignsLeft"), true);
111 assertEquals(fc.check("startsWith"), false);
112 assertEquals(fc.check("matches"), false);
113 assertEquals(fc.check("isWithin"), true);
114 assertEquals(fc.check("isAround"), true);
115 assertEquals(fc.check("endsWith"), true);
116 assertEquals(fc.check("alignsRight"), true);
117 assertEquals(fc.check("overlapsRight"), true);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000118 assertEquals(fc.check("succeedsDirectly"), false);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000119 assertEquals(fc.check("succeeds"), false);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000120
Nils Diewaldbb33da22015-03-04 16:24:25 +0000121 fc.add("precedes").add("precedesDirectly").add("startsWith")
122 .add("matches");
123 assertEquals(fc.check("precedes"), true);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000124 assertEquals(fc.check("precedesDirectly"), true);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000125 assertEquals(fc.check("overlapsLeft"), true);
126 assertEquals(fc.check("alignsLeft"), true);
127 assertEquals(fc.check("startsWith"), true);
128 assertEquals(fc.check("matches"), true);
129 assertEquals(fc.check("isWithin"), true);
130 assertEquals(fc.check("isAround"), true);
131 assertEquals(fc.check("endsWith"), true);
132 assertEquals(fc.check("alignsRight"), true);
133 assertEquals(fc.check("overlapsRight"), true);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000134 assertEquals(fc.check("succeedsDirectly"), false);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000135 assertEquals(fc.check("succeeds"), false);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000136
Nils Diewaldbb33da22015-03-04 16:24:25 +0000137 fc.add("succeeds").add("succeedsDirectly");
138 assertEquals(fc.check("precedes"), true);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000139 assertEquals(fc.check("precedesDirectly"), true);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000140 assertEquals(fc.check("overlapsLeft"), true);
141 assertEquals(fc.check("alignsLeft"), true);
142 assertEquals(fc.check("startsWith"), true);
143 assertEquals(fc.check("matches"), true);
144 assertEquals(fc.check("isWithin"), true);
145 assertEquals(fc.check("isAround"), true);
146 assertEquals(fc.check("endsWith"), true);
147 assertEquals(fc.check("alignsRight"), true);
148 assertEquals(fc.check("overlapsRight"), true);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000149 assertEquals(fc.check("succeedsDirectly"), true);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000150 assertEquals(fc.check("succeeds"), true);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000151 };
152
Nils Diewaldbb33da22015-03-04 16:24:25 +0000153
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000154 @Test
155 public void testOrVector () throws QueryException {
156 FrameConstraint fc1 = new FrameConstraint();
157 // Some or
Nils Diewald83c9b162015-02-03 21:05:07 +0000158 fc1.add("succeeds").add("succeedsDirectly");
Nils Diewaldbb33da22015-03-04 16:24:25 +0000159 assertEquals(fc1.check("precedes"), false);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000160 assertEquals(fc1.check("precedesDirectly"), false);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000161 assertEquals(fc1.check("overlapsLeft"), false);
162 assertEquals(fc1.check("alignsLeft"), false);
163 assertEquals(fc1.check("startsWith"), false);
164 assertEquals(fc1.check("matches"), false);
165 assertEquals(fc1.check("isWithin"), false);
166 assertEquals(fc1.check("isAround"), false);
167 assertEquals(fc1.check("endsWith"), false);
168 assertEquals(fc1.check("alignsRight"), false);
169 assertEquals(fc1.check("overlapsRight"), false);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000170 assertEquals(fc1.check("succeedsDirectly"), true);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000171 assertEquals(fc1.check("succeeds"), true);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000172
173 FrameConstraint fc2 = new FrameConstraint();
Nils Diewald83c9b162015-02-03 21:05:07 +0000174 fc2.add("precedes").add("precedesDirectly");
Nils Diewaldbb33da22015-03-04 16:24:25 +0000175 assertEquals(fc2.check("precedes"), true);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000176 assertEquals(fc2.check("precedesDirectly"), true);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000177 assertEquals(fc2.check("overlapsLeft"), false);
178 assertEquals(fc2.check("alignsLeft"), false);
179 assertEquals(fc2.check("startsWith"), false);
180 assertEquals(fc2.check("matches"), false);
181 assertEquals(fc2.check("isWithin"), false);
182 assertEquals(fc2.check("isAround"), false);
183 assertEquals(fc2.check("endsWith"), false);
184 assertEquals(fc2.check("alignsRight"), false);
185 assertEquals(fc2.check("overlapsRight"), false);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000186 assertEquals(fc2.check("succeedsDirectly"), false);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000187 assertEquals(fc2.check("succeeds"), false);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000188
Nils Diewald83c9b162015-02-03 21:05:07 +0000189 fc1.add(fc2);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000190 assertEquals(fc1.check("precedes"), true);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000191 assertEquals(fc1.check("precedesDirectly"), true);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000192 assertEquals(fc1.check("overlapsLeft"), false);
193 assertEquals(fc1.check("alignsLeft"), false);
194 assertEquals(fc1.check("startsWith"), false);
195 assertEquals(fc1.check("matches"), false);
196 assertEquals(fc1.check("isWithin"), false);
197 assertEquals(fc1.check("isAround"), false);
198 assertEquals(fc1.check("endsWith"), false);
199 assertEquals(fc1.check("alignsRight"), false);
200 assertEquals(fc1.check("overlapsRight"), false);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000201 assertEquals(fc1.check("succeedsDirectly"), true);
Nils Diewaldbb33da22015-03-04 16:24:25 +0000202 assertEquals(fc1.check("succeeds"), true);
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000203 };
Nils Diewald5c375702015-02-09 20:58:24 +0000204
Nils Diewaldbb33da22015-03-04 16:24:25 +0000205
Nils Diewalde7a820b2015-02-12 21:34:50 +0000206 @Test
207 public void testConstellation () throws QueryException {
208 FrameConstraint fc1 = new FrameConstraint();
209 fc1.invert();
210
211 // Precedes
Nils Diewaldbb33da22015-03-04 16:24:25 +0000212 assertEquals(FrameConstraint.PRECEDES,
213 fc1._constellation(new TestSpans(2, 3), new TestSpans(4, 5)));
Nils Diewalde7a820b2015-02-12 21:34:50 +0000214
215 // PrecedesDirectly
Nils Diewaldbb33da22015-03-04 16:24:25 +0000216 assertEquals(FrameConstraint.PRECEDES_DIRECTLY,
217 fc1._constellation(new TestSpans(2, 3), new TestSpans(3, 5)));
Nils Diewalde7a820b2015-02-12 21:34:50 +0000218
219 // OverlapsLeft
Nils Diewaldbb33da22015-03-04 16:24:25 +0000220 assertEquals(FrameConstraint.OVERLAPS_LEFT,
221 fc1._constellation(new TestSpans(2, 4), new TestSpans(3, 5)));
Nils Diewalde7a820b2015-02-12 21:34:50 +0000222
223 // AlignsLeft
Nils Diewaldbb33da22015-03-04 16:24:25 +0000224 assertEquals(FrameConstraint.ALIGNS_LEFT,
225 fc1._constellation(new TestSpans(2, 4), new TestSpans(2, 5)));
Nils Diewalde7a820b2015-02-12 21:34:50 +0000226
227 // StartsWith
Nils Diewaldbb33da22015-03-04 16:24:25 +0000228 assertEquals(FrameConstraint.STARTS_WITH,
229 fc1._constellation(new TestSpans(2, 5), new TestSpans(2, 4)));
Nils Diewalde7a820b2015-02-12 21:34:50 +0000230
231 // Matches
Nils Diewaldbb33da22015-03-04 16:24:25 +0000232 assertEquals(FrameConstraint.MATCHES,
233 fc1._constellation(new TestSpans(2, 5), new TestSpans(2, 5)));
Nils Diewalde7a820b2015-02-12 21:34:50 +0000234
235 // IsWithin
Nils Diewaldbb33da22015-03-04 16:24:25 +0000236 assertEquals(FrameConstraint.IS_WITHIN,
237 fc1._constellation(new TestSpans(3, 4), new TestSpans(2, 5)));
Nils Diewalde7a820b2015-02-12 21:34:50 +0000238
239 // IsAround
Nils Diewaldbb33da22015-03-04 16:24:25 +0000240 assertEquals(FrameConstraint.IS_AROUND,
241 fc1._constellation(new TestSpans(2, 5), new TestSpans(3, 4)));
Nils Diewalde7a820b2015-02-12 21:34:50 +0000242
243 // EndsWith
Nils Diewaldbb33da22015-03-04 16:24:25 +0000244 assertEquals(FrameConstraint.ENDS_WITH,
245 fc1._constellation(new TestSpans(3, 5), new TestSpans(4, 5)));
Nils Diewalde7a820b2015-02-12 21:34:50 +0000246
247 // AlignsRight
Nils Diewaldbb33da22015-03-04 16:24:25 +0000248 assertEquals(FrameConstraint.ALIGNS_RIGHT,
249 fc1._constellation(new TestSpans(3, 4), new TestSpans(2, 4)));
Nils Diewalde7a820b2015-02-12 21:34:50 +0000250
251 // OverlapsRight
Nils Diewaldbb33da22015-03-04 16:24:25 +0000252 assertEquals(FrameConstraint.OVERLAPS_RIGHT,
253 fc1._constellation(new TestSpans(3, 5), new TestSpans(2, 4)));
Nils Diewalde7a820b2015-02-12 21:34:50 +0000254
255 // SucceedsDirectly
Nils Diewaldbb33da22015-03-04 16:24:25 +0000256 assertEquals(FrameConstraint.SUCCEEDS_DIRECTLY,
257 fc1._constellation(new TestSpans(4, 6), new TestSpans(2, 4)));
Nils Diewalde7a820b2015-02-12 21:34:50 +0000258
259 // Succeeds
Nils Diewaldbb33da22015-03-04 16:24:25 +0000260 assertEquals(FrameConstraint.SUCCEEDS,
261 fc1._constellation(new TestSpans(5, 6), new TestSpans(2, 4)));
Nils Diewalde7a820b2015-02-12 21:34:50 +0000262 };
263
Nils Diewald5c375702015-02-09 20:58:24 +0000264 private class TestSpans extends Spans {
265 private int s, e;
266
Nils Diewaldbb33da22015-03-04 16:24:25 +0000267
Nils Diewalde7a820b2015-02-12 21:34:50 +0000268 // Constructor
269 public TestSpans (int start, int end) {
270 this.s = start;
271 this.e = end;
272 };
273
Nils Diewaldbb33da22015-03-04 16:24:25 +0000274
Nils Diewald5c375702015-02-09 20:58:24 +0000275 @Override
276 public int doc () {
277 return 0;
278 };
279
Nils Diewaldbb33da22015-03-04 16:24:25 +0000280
Nils Diewald5c375702015-02-09 20:58:24 +0000281 @Override
282 public int start () {
283 return this.s;
284 };
285
Nils Diewaldbb33da22015-03-04 16:24:25 +0000286
Nils Diewald5c375702015-02-09 20:58:24 +0000287 @Override
288 public int end () {
289 return this.e;
290 };
291
Nils Diewaldbb33da22015-03-04 16:24:25 +0000292
Nils Diewald5c375702015-02-09 20:58:24 +0000293 @Override
294 public boolean skipTo (int target) {
295 return true;
296 };
297
Nils Diewaldbb33da22015-03-04 16:24:25 +0000298
Nils Diewald5c375702015-02-09 20:58:24 +0000299 @Override
300 public boolean next () {
301 return true;
302 };
303
Nils Diewaldbb33da22015-03-04 16:24:25 +0000304
305 public Collection<byte[]> getPayload () throws IOException {
Nils Diewald5c375702015-02-09 20:58:24 +0000306 return null;
307 }
308
Nils Diewaldbb33da22015-03-04 16:24:25 +0000309
Nils Diewald5c375702015-02-09 20:58:24 +0000310 @Override
Nils Diewaldbb33da22015-03-04 16:24:25 +0000311 public boolean isPayloadAvailable () throws IOException {
Nils Diewald5c375702015-02-09 20:58:24 +0000312 return false;
313 };
314
Nils Diewaldbb33da22015-03-04 16:24:25 +0000315
Nils Diewald5c375702015-02-09 20:58:24 +0000316 @Override
Nils Diewaldbb33da22015-03-04 16:24:25 +0000317 public String toString () {
Nils Diewald5c375702015-02-09 20:58:24 +0000318 return "";
319 };
320
Nils Diewaldbb33da22015-03-04 16:24:25 +0000321
Nils Diewald5c375702015-02-09 20:58:24 +0000322 @Override
Nils Diewaldbb33da22015-03-04 16:24:25 +0000323 public long cost () {
Nils Diewald5c375702015-02-09 20:58:24 +0000324 return 1;
325 };
326
327 };
Nils Diewald93d6d1b2015-02-02 21:47:43 +0000328};