blob: ed5c41d1515b8f93c4c79899ca069f8a77b87bd0 [file] [log] [blame]
package de.ids_mannheim.korap.query;
import java.io.IOException;
import java.util.Collection;
import de.ids_mannheim.korap.query.FrameConstraint;
import de.ids_mannheim.korap.util.QueryException;
import org.apache.lucene.search.spans.Spans;
import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.Ignore;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/**
* @author diewald
*/
@RunWith(JUnit4.class)
public class TestFrameConstraint {
@Test
public void testInitialization () throws QueryException {
FrameConstraint fc = new FrameConstraint();
assertEquals(fc.check(1), false);
};
@Test
public void testBitVector () throws QueryException {
int a = 1;
int b = 1 << 1;
assertEquals(3, a ^ b);
};
@Test
public void testOr () throws QueryException {
FrameConstraint fc = new FrameConstraint();
// Nothing set
assertEquals(fc.check("precedes"), false);
assertEquals(fc.check("precedesDirectly"), false);
assertEquals(fc.check("overlapsLeft"), false);
assertEquals(fc.check("alignsLeft"), false);
assertEquals(fc.check("startsWith"), false);
assertEquals(fc.check("matches"), false);
assertEquals(fc.check("isWithin"), false);
assertEquals(fc.check("isAround"), false);
assertEquals(fc.check("endsWith"), false);
assertEquals(fc.check("alignsRight"), false);
assertEquals(fc.check("overlapsRight"), false);
assertEquals(fc.check("succeedsDirectly"), false);
assertEquals(fc.check("succeeds"), false);
// Some or
fc.add("succeeds").add("succeedsDirectly");
assertEquals(fc.check("precedes"), false);
assertEquals(fc.check("precedesDirectly"), false);
assertEquals(fc.check("overlapsLeft"), false);
assertEquals(fc.check("alignsLeft"), false);
assertEquals(fc.check("startsWith"), false);
assertEquals(fc.check("matches"), false);
assertEquals(fc.check("isWithin"), false);
assertEquals(fc.check("isAround"), false);
assertEquals(fc.check("endsWith"), false);
assertEquals(fc.check("alignsRight"), false);
assertEquals(fc.check("overlapsRight"), false);
assertEquals(fc.check("succeedsDirectly"), true);
assertEquals(fc.check("succeeds"), true);
// Moar or
fc.add("precedes").add("precedesDirectly");
assertEquals(fc.check("precedes"), true);
assertEquals(fc.check("precedesDirectly"), true);
assertEquals(fc.check("overlapsLeft"), false);
assertEquals(fc.check("alignsLeft"), false);
assertEquals(fc.check("startsWith"), false);
assertEquals(fc.check("matches"), false);
assertEquals(fc.check("isWithin"), false);
assertEquals(fc.check("isAround"), false);
assertEquals(fc.check("endsWith"), false);
assertEquals(fc.check("alignsRight"), false);
assertEquals(fc.check("overlapsRight"), false);
assertEquals(fc.check("succeedsDirectly"), true);
assertEquals(fc.check("succeeds"), true);
// Moar or
fc.add("matches").add("startsWith");
assertEquals(fc.check("precedes"), true);
assertEquals(fc.check("precedesDirectly"), true);
assertEquals(fc.check("overlapsLeft"), false);
assertEquals(fc.check("alignsLeft"), false);
assertEquals(fc.check("startsWith"), true);
assertEquals(fc.check("matches"), true);
assertEquals(fc.check("isWithin"), false);
assertEquals(fc.check("isAround"), false);
assertEquals(fc.check("endsWith"), false);
assertEquals(fc.check("alignsRight"), false);
assertEquals(fc.check("overlapsRight"), false);
assertEquals(fc.check("succeedsDirectly"), true);
assertEquals(fc.check("succeeds"), true);
// Invert
fc.invert();
assertEquals(fc.check("precedes"), false);
assertEquals(fc.check("precedesDirectly"), false);
assertEquals(fc.check("overlapsLeft"), true);
assertEquals(fc.check("alignsLeft"), true);
assertEquals(fc.check("startsWith"), false);
assertEquals(fc.check("matches"), false);
assertEquals(fc.check("isWithin"), true);
assertEquals(fc.check("isAround"), true);
assertEquals(fc.check("endsWith"), true);
assertEquals(fc.check("alignsRight"), true);
assertEquals(fc.check("overlapsRight"), true);
assertEquals(fc.check("succeedsDirectly"), false);
assertEquals(fc.check("succeeds"), false);
fc.add("precedes").add("precedesDirectly").add("startsWith")
.add("matches");
assertEquals(fc.check("precedes"), true);
assertEquals(fc.check("precedesDirectly"), true);
assertEquals(fc.check("overlapsLeft"), true);
assertEquals(fc.check("alignsLeft"), true);
assertEquals(fc.check("startsWith"), true);
assertEquals(fc.check("matches"), true);
assertEquals(fc.check("isWithin"), true);
assertEquals(fc.check("isAround"), true);
assertEquals(fc.check("endsWith"), true);
assertEquals(fc.check("alignsRight"), true);
assertEquals(fc.check("overlapsRight"), true);
assertEquals(fc.check("succeedsDirectly"), false);
assertEquals(fc.check("succeeds"), false);
fc.add("succeeds").add("succeedsDirectly");
assertEquals(fc.check("precedes"), true);
assertEquals(fc.check("precedesDirectly"), true);
assertEquals(fc.check("overlapsLeft"), true);
assertEquals(fc.check("alignsLeft"), true);
assertEquals(fc.check("startsWith"), true);
assertEquals(fc.check("matches"), true);
assertEquals(fc.check("isWithin"), true);
assertEquals(fc.check("isAround"), true);
assertEquals(fc.check("endsWith"), true);
assertEquals(fc.check("alignsRight"), true);
assertEquals(fc.check("overlapsRight"), true);
assertEquals(fc.check("succeedsDirectly"), true);
assertEquals(fc.check("succeeds"), true);
};
@Test
public void testOrVector () throws QueryException {
FrameConstraint fc1 = new FrameConstraint();
// Some or
fc1.add("succeeds").add("succeedsDirectly");
assertEquals(fc1.check("precedes"), false);
assertEquals(fc1.check("precedesDirectly"), false);
assertEquals(fc1.check("overlapsLeft"), false);
assertEquals(fc1.check("alignsLeft"), false);
assertEquals(fc1.check("startsWith"), false);
assertEquals(fc1.check("matches"), false);
assertEquals(fc1.check("isWithin"), false);
assertEquals(fc1.check("isAround"), false);
assertEquals(fc1.check("endsWith"), false);
assertEquals(fc1.check("alignsRight"), false);
assertEquals(fc1.check("overlapsRight"), false);
assertEquals(fc1.check("succeedsDirectly"), true);
assertEquals(fc1.check("succeeds"), true);
FrameConstraint fc2 = new FrameConstraint();
fc2.add("precedes").add("precedesDirectly");
assertEquals(fc2.check("precedes"), true);
assertEquals(fc2.check("precedesDirectly"), true);
assertEquals(fc2.check("overlapsLeft"), false);
assertEquals(fc2.check("alignsLeft"), false);
assertEquals(fc2.check("startsWith"), false);
assertEquals(fc2.check("matches"), false);
assertEquals(fc2.check("isWithin"), false);
assertEquals(fc2.check("isAround"), false);
assertEquals(fc2.check("endsWith"), false);
assertEquals(fc2.check("alignsRight"), false);
assertEquals(fc2.check("overlapsRight"), false);
assertEquals(fc2.check("succeedsDirectly"), false);
assertEquals(fc2.check("succeeds"), false);
fc1.add(fc2);
assertEquals(fc1.check("precedes"), true);
assertEquals(fc1.check("precedesDirectly"), true);
assertEquals(fc1.check("overlapsLeft"), false);
assertEquals(fc1.check("alignsLeft"), false);
assertEquals(fc1.check("startsWith"), false);
assertEquals(fc1.check("matches"), false);
assertEquals(fc1.check("isWithin"), false);
assertEquals(fc1.check("isAround"), false);
assertEquals(fc1.check("endsWith"), false);
assertEquals(fc1.check("alignsRight"), false);
assertEquals(fc1.check("overlapsRight"), false);
assertEquals(fc1.check("succeedsDirectly"), true);
assertEquals(fc1.check("succeeds"), true);
};
@Test
public void testConstellation () throws QueryException {
FrameConstraint fc1 = new FrameConstraint();
fc1.invert();
// Precedes
assertEquals(FrameConstraint.PRECEDES,
fc1._constellation(new TestSpans(2, 3), new TestSpans(4, 5)));
// PrecedesDirectly
assertEquals(FrameConstraint.PRECEDES_DIRECTLY,
fc1._constellation(new TestSpans(2, 3), new TestSpans(3, 5)));
// OverlapsLeft
assertEquals(FrameConstraint.OVERLAPS_LEFT,
fc1._constellation(new TestSpans(2, 4), new TestSpans(3, 5)));
// AlignsLeft
assertEquals(FrameConstraint.ALIGNS_LEFT,
fc1._constellation(new TestSpans(2, 4), new TestSpans(2, 5)));
// StartsWith
assertEquals(FrameConstraint.STARTS_WITH,
fc1._constellation(new TestSpans(2, 5), new TestSpans(2, 4)));
// Matches
assertEquals(FrameConstraint.MATCHES,
fc1._constellation(new TestSpans(2, 5), new TestSpans(2, 5)));
// IsWithin
assertEquals(FrameConstraint.IS_WITHIN,
fc1._constellation(new TestSpans(3, 4), new TestSpans(2, 5)));
// IsAround
assertEquals(FrameConstraint.IS_AROUND,
fc1._constellation(new TestSpans(2, 5), new TestSpans(3, 4)));
// EndsWith
assertEquals(FrameConstraint.ENDS_WITH,
fc1._constellation(new TestSpans(3, 5), new TestSpans(4, 5)));
// AlignsRight
assertEquals(FrameConstraint.ALIGNS_RIGHT,
fc1._constellation(new TestSpans(3, 4), new TestSpans(2, 4)));
// OverlapsRight
assertEquals(FrameConstraint.OVERLAPS_RIGHT,
fc1._constellation(new TestSpans(3, 5), new TestSpans(2, 4)));
// SucceedsDirectly
assertEquals(FrameConstraint.SUCCEEDS_DIRECTLY,
fc1._constellation(new TestSpans(4, 6), new TestSpans(2, 4)));
// Succeeds
assertEquals(FrameConstraint.SUCCEEDS,
fc1._constellation(new TestSpans(5, 6), new TestSpans(2, 4)));
};
private class TestSpans extends Spans {
private int s, e;
// Constructor
public TestSpans (int start, int end) {
this.s = start;
this.e = end;
};
@Override
public int doc () {
return 0;
};
@Override
public int start () {
return this.s;
};
@Override
public int end () {
return this.e;
};
@Override
public boolean skipTo (int target) {
return true;
};
@Override
public boolean next () {
return true;
};
public Collection<byte[]> getPayload () throws IOException {
return null;
}
@Override
public boolean isPayloadAvailable () throws IOException {
return false;
};
@Override
public String toString () {
return "";
};
@Override
public long cost () {
return 1;
};
};
};