package net.fortytwo.sesametools;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openrdf.model.BNode;
import org.openrdf.model.IRI;
import org.openrdf.model.Literal;
import org.openrdf.model.Statement;
import org.openrdf.model.ValueFactory;
import org.openrdf.model.impl.SimpleValueFactory;
import org.openrdf.model.vocabulary.XMLSchema;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
* Tests StatementComparator to make sure it complies with its contract,
* and the equals contract for Statement
* <p/>
* It also tests ValueComparator which is a direct dependency of StatementComparator
*
* @author Peter Ansell p_ansell@yahoo.com
*/
public class StatementComparatorTest {
private StatementComparator testComparator;
/**
* Each test requires a new ValueFactory to ensure that the creation
* of BNode identifiers are segregated between tests as far as possible.
* <p/>
* However, sorting between unequal BNodes is not supported given the BNode
* identifier definition, so BNodes are only used to verify consistent
* sorting of the same BNode and sorting between BNodes and URIs/Literals
*/
private ValueFactory valueFactory;
private BNode testSubjectBNode1;
/**
* testSubjectUri1 needs to be constructed to sort before testSubjectUri2
*/
private IRI testSubjectUri1;
private IRI testSubjectUri2;
/**
* testPredicateUri1 needs to be constructed to sort before testPredicateUri2
*/
private IRI testPredicateUri1;
private IRI testPredicateUri2;
private BNode testObjectBNode1;
/**
* testObjectUri1 needs to be constructed to sort before testObjectUri2
*/
private IRI testObjectUri1;
private IRI testObjectUri2;
/**
* testObjectLiteral1 needs to be constructed to sort before testObjectLiteral2
*/
private Literal testObjectLiteral1;
private Literal testObjectLiteral2;
private Literal testObjectLangLiteral1EN;
private Literal testObjectLangLiteral1JA;
private Literal testObjectLangLiteral2EN;
private Literal testObjectTypedLiteral1String;
private Literal testObjectTypedLiteral2String;
private Literal testObjectTypedLiteral1Integer;
private Literal testObjectTypedLiteral2Integer;
private Literal testObjectTypedLiteral1IntegerString;
private Literal testObjectTypedLiteral2IntegerString;
private BNode testContextBNode1;
/**
* testContextUri1 needs to be constructed to sort before testContextUri2
*/
private IRI testContextUri1;
private IRI testContextUri2;
private Statement statement1;
private Statement statement2;
private Statement statement3;
private Statement statement4;
private Statement statement5;
private Statement statement6;
private Statement statement7;
private Statement statement8;
private Statement statement9;
private Statement statement10;
private Statement statement11;
/**
* Sets up a new StatementComparator before each test
*
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
testComparator = new StatementComparator();
valueFactory = SimpleValueFactory.getInstance();
testSubjectBNode1 = valueFactory.createBNode("SubjectBNode1");
testSubjectUri1 = valueFactory.createIRI("urn:test:statementcomparator:", "subject1");
testSubjectUri2 = valueFactory.createIRI("urn:test:statementcomparator:", "subject2");
testPredicateUri1 = valueFactory.createIRI("urn:test:statementcomparator:", "predicate1");
testPredicateUri2 = valueFactory.createIRI("urn:test:statementcomparator:", "predicate2");
testObjectBNode1 = valueFactory.createBNode("ObjectBNode1");
testObjectUri1 = valueFactory.createIRI("urn:test:statementcomparator:", "object1");
testObjectUri2 = valueFactory.createIRI("urn:test:statementcomparator:", "object2");
testObjectLiteral1 = valueFactory.createLiteral("test object literal 1");
testObjectLiteral2 = valueFactory.createLiteral("test object literal 2");
testObjectLangLiteral1EN = valueFactory.createLiteral("test object literal 1", "en");
testObjectLangLiteral1JA = valueFactory.createLiteral("test object literal 1", "ja");
testObjectLangLiteral2EN = valueFactory.createLiteral("test object literal 2", "en");
testObjectTypedLiteral1String = valueFactory.createLiteral("test object literal 1", XMLSchema.STRING);
testObjectTypedLiteral2String = valueFactory.createLiteral("test object literal 2", XMLSchema.STRING);
testObjectTypedLiteral1IntegerString = valueFactory.createLiteral("1", XMLSchema.STRING);
testObjectTypedLiteral2IntegerString = valueFactory.createLiteral("2", XMLSchema.STRING);
testObjectTypedLiteral1Integer = valueFactory.createLiteral("1", XMLSchema.INTEGER);
testObjectTypedLiteral2Integer = valueFactory.createLiteral("2", XMLSchema.INTEGER);
testContextBNode1 = valueFactory.createBNode("ContextBNode1");
testContextUri1 = valueFactory.createIRI("urn:test:statementcomparator:", "context1");
testContextUri2 = valueFactory.createIRI("urn:test:statementcomparator:", "context2");
}
/**
* Cleans up after each test
*
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception {
testComparator = null;
valueFactory = null;
testSubjectUri1 = null;
testSubjectUri2 = null;
testSubjectBNode1 = null;
testPredicateUri1 = null;
testPredicateUri2 = null;
testObjectUri1 = null;
testObjectUri2 = null;
testObjectLiteral1 = null;
testObjectLiteral2 = null;
testObjectBNode1 = null;
testContextUri1 = null;
testContextUri2 = null;
testContextBNode1 = null;
statement1 = null;
statement2 = null;
statement3 = null;
statement4 = null;
statement5 = null;
statement6 = null;
statement7 = null;
statement8 = null;
statement9 = null;
statement10 = null;
statement11 = null;
}
/**
* Tests whether the StatementComparator constants match
* the general Comparable interface contract
*/
@Test
public void testStatementComparatorConstants() {
assertEquals(0, StatementComparator.EQUAL);
assertTrue(StatementComparator.BEFORE < 0);
assertTrue(StatementComparator.AFTER > 0);
}
/**
* Tests whether two equivalent statements (same subject/predicate/object)
* with null contexts are sorted as EQUALS
*/
@Test
public void testCompareEquivalentBothNullContexts() {
statement1 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, null);
statement2 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, null);
assertEquals(0, testComparator.compare(statement1, statement2));
assertEquals(0, testComparator.compare(statement2, statement1));
}
/**
* Tests whether two equivalent statements (same subject/predicate/object)
* with typed null contexts are sorted as EQUALS
*/
@Test
public void testCompareEquivalentBothNullContextsTyped1() {
statement1 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, null);
statement2 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, null);
assertEquals(0, testComparator.compare(statement1, statement2));
assertEquals(0, testComparator.compare(statement2, statement1));
}
/**
* Tests whether two equivalent statements (same subject/predicate/object)
* with typed null contexts are sorted as EQUALS
*/
@Test
public void testCompareEquivalentBothNullContextsTyped2() {
statement1 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, null);
statement2 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, null);
assertEquals(0, testComparator.compare(statement1, statement2));
assertEquals(0, testComparator.compare(statement2, statement1));
}
/**
* Tests whether two equivalent statements (same subject/predicate/object)
* with typed null contexts are sorted as EQUALS
*/
@Test
public void testCompareEquivalentBothNullContextsTyped3() {
statement1 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, null);
statement2 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, null);
assertEquals(0, testComparator.compare(statement1, statement2));
assertEquals(0, testComparator.compare(statement2, statement1));
}
/**
* Tests whether two equivalent statements (same subject/predicate/object)
* with typed null contexts are sorted as EQUALS
*/
@Test
public void testCompareEquivalentBothNullContextsTyped4() {
statement1 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, null);
statement2 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, null);
assertEquals(0, testComparator.compare(statement1, statement2));
assertEquals(0, testComparator.compare(statement2, statement1));
}
/**
* Tests whether two equivalent statements (same subject/predicate/object)
* with no context defined is sorted as EQUALS
*/
@Test
public void testCompareEquivalentNoContexts() {
statement1 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1);
statement2 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1);
assertEquals(0, testComparator.compare(statement1, statement2));
assertEquals(0, testComparator.compare(statement2, statement1));
}
/**
* Tests whether two equivalent statements (same subject/predicate/object)
* with one null context and one with no context defined is sorted as EQUALS
*/
@Test
public void testCompareEquivalentOneNullContext() {
statement1 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, null);
statement2 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1);
assertEquals(0, testComparator.compare(statement1, statement2));
assertEquals(0, testComparator.compare(statement2, statement1));
}
/**
* Tests whether two equivalent statements (same subject/predicate/object)
* with one null context and one with a IRI defined is sorted as BEFORE
*/
@Test
public void testCompareEquivalentOneNullOneURIContext() {
statement1 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, null);
statement2 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, testContextUri1);
assertTrue(testComparator.compare(statement1, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement1) > 0);
}
/**
* Tests whether two equivalent statements (same subject/predicate/object)
* with one null context and one with a IRI defined is sorted as BEFORE
*/
@Test
public void testCompareEquivalentOneNullOneBNodeContext() {
statement1 = valueFactory.createStatement(
testSubjectUri1, testPredicateUri1, testObjectUri1, null);
statement2 = valueFactory.createStatement(
testSubjectUri1, testPredicateUri1, testObjectUri1, testContextBNode1);
assertTrue(testComparator.compare(statement1, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement1) > 0);
}
/**
* Tests whether two equivalent statements (same subject/predicate/object)
* with a BNode context and one with a IRI defined is sorted as BEFORE
*/
@Test
public void testCompareEquivalentBNodeAndUriContext() {
statement1 = valueFactory.createStatement(
testSubjectUri1, testPredicateUri1, testObjectUri1, testContextBNode1);
statement2 = valueFactory.createStatement(
testSubjectUri1, testPredicateUri1, testObjectUri1, testContextUri1);
assertTrue(testComparator.compare(statement1, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement1) > 0);
}
/**
* Tests whether two equivalent statements (same subject/predicate/object)
* with two different URIs is sorted correctly
*/
@Test
public void testCompareEquivalentTwoUrisContext() {
statement1 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, testContextUri1);
statement2 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, testContextUri2);
assertTrue(testComparator.compare(statement1, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement1) > 0);
}
/**
* Tests whether two equivalent statements (same subject/predicate/object)
* with the same context IRI are sorted as EQUALS
*/
@Test
public void testCompareEquivalentSameUriContext() {
statement1 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, testContextUri1);
statement2 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1, testContextUri1);
assertEquals(0, testComparator.compare(statement1, statement2));
assertEquals(0, testComparator.compare(statement2, statement1));
}
/**
* Tests whether a Statement with a Blank Node subject is sorted BEFORE a
* similar statement with a IRI subject
*/
@Test
public void testCompareBNodeSubject() {
statement1 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectBNode1);
statement2 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectBNode1);
assertTrue(testComparator.compare(statement1, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement1) > 0);
}
/**
* Tests whether a statement with a BNode object is sorted before a
* statement with a IRI object
*/
@Test
public void testCompareBNodeAndUriObjects() {
statement1 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectBNode1);
statement2 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectUri1);
assertTrue(testComparator.compare(statement1, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement1) > 0);
}
/**
* Tests whether a statement with a BNode object is sorted before a
* statement with a Literal object
*/
@Test
public void testCompareBNodeAndLiteralObjects() {
statement1 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectBNode1);
statement2 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectLiteral1);
assertTrue(testComparator.compare(statement1, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement1) > 0);
}
/**
* Tests consistency of sorting between equivalent statements with
* different simple literal objects
*/
@Test
public void testCompareLiteralObjectsSimple() {
statement1 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectLiteral1);
statement2 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectLiteral2);
assertTrue(testComparator.compare(statement1, statement1) == 0);
assertTrue(testComparator.compare(statement2, statement2) == 0);
assertTrue(testComparator.compare(statement1, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement1) > 0);
}
/**
* Tests consistency of sorting between equivalent statements with
* different language literal objects
*/
@Test
public void testCompareLiteralObjectsLang() {
statement1 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectLiteral1);
statement2 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectLiteral2);
statement3 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectLangLiteral1EN);
statement4 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectLangLiteral1JA);
statement5 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectLangLiteral2EN);
assertTrue(testComparator.compare(statement1, statement1) == 0);
assertTrue(testComparator.compare(statement2, statement2) == 0);
assertTrue(testComparator.compare(statement3, statement3) == 0);
assertTrue(testComparator.compare(statement4, statement4) == 0);
assertTrue(testComparator.compare(statement5, statement5) == 0);
// Different literal values sort
assertTrue(testComparator.compare(statement1, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement1) > 0);
// Same literal values sort one missing lang tag
assertTrue(testComparator.compare(statement1, statement3) < 0);
assertTrue(testComparator.compare(statement3, statement1) > 0);
// Same literal values sort one missing lang tag
assertTrue(testComparator.compare(statement1, statement4) < 0);
assertTrue(testComparator.compare(statement4, statement1) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement1, statement5) < 0);
assertTrue(testComparator.compare(statement5, statement1) > 0);
// Different literal values sort one missing lang tag
assertTrue(testComparator.compare(statement3, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement3) > 0);
// Different literal values sort one missing lang tag
assertTrue(testComparator.compare(statement4, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement4) > 0);
// Same literal values sort
assertTrue(testComparator.compare(statement2, statement5) < 0);
assertTrue(testComparator.compare(statement5, statement2) > 0);
// Same literal values sort by lang tag, en before ja
assertTrue(testComparator.compare(statement3, statement4) < 0);
assertTrue(testComparator.compare(statement4, statement3) > 0);
// Different literal values sort by lang tag, en before ja
assertTrue(testComparator.compare(statement4, statement5) < 0);
assertTrue(testComparator.compare(statement5, statement4) > 0);
}
/**
* Tests consistency of sorting between equivalent statements with
* different typed literal objects
*/
@Test
public void testCompareLiteralObjectsTyped() {
statement1 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectLiteral1);
statement2 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectLiteral2);
statement3 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectTypedLiteral1String);
statement4 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectTypedLiteral2String);
statement5 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectTypedLiteral1Integer);
statement6 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectTypedLiteral2Integer);
statement7 = valueFactory.createStatement(
testSubjectBNode1, testPredicateUri1, testObjectTypedLiteral1IntegerString);
statement8 = valueFactory.createStatement(
testSubjectBNode1, testPredicateUri1, testObjectTypedLiteral2IntegerString);
assertTrue(testComparator.compare(statement1, statement1) == 0);
assertTrue(testComparator.compare(statement2, statement2) == 0);
assertTrue(testComparator.compare(statement3, statement3) == 0);
assertTrue(testComparator.compare(statement4, statement4) == 0);
assertTrue(testComparator.compare(statement5, statement5) == 0);
assertTrue(testComparator.compare(statement6, statement6) == 0);
assertTrue(testComparator.compare(statement7, statement7) == 0);
assertTrue(testComparator.compare(statement8, statement8) == 0);
// Different literal values sort
assertTrue(testComparator.compare(statement1, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement1) > 0);
// Same literal values sort one missing type, other xsd:string
// NOTE: prior to Sesame-2.8/RDF-1.1, these statements were unequal
assertTrue(testComparator.compare(statement1, statement3) == 0);
assertTrue(testComparator.compare(statement3, statement1) == 0);
// Different literal values sort
assertTrue(testComparator.compare(statement1, statement4) < 0);
assertTrue(testComparator.compare(statement4, statement1) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement5, statement1) < 0);
assertTrue(testComparator.compare(statement1, statement5) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement6, statement1) < 0);
assertTrue(testComparator.compare(statement1, statement6) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement7, statement1) < 0);
assertTrue(testComparator.compare(statement1, statement7) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement8, statement1) < 0);
assertTrue(testComparator.compare(statement1, statement8) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement3, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement3) > 0);
// Same literal values sort one missing type, other xsd:string
// NOTE: prior to Sesame-2.8/RDF-1.1, these statements were unequal
assertTrue(testComparator.compare(statement2, statement4) == 0);
assertTrue(testComparator.compare(statement4, statement2) == 0);
// Different literal values sort
assertTrue(testComparator.compare(statement5, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement5) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement6, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement6) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement7, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement7) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement8, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement8) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement3, statement4) < 0);
assertTrue(testComparator.compare(statement4, statement3) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement5, statement3) < 0);
assertTrue(testComparator.compare(statement3, statement5) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement6, statement3) < 0);
assertTrue(testComparator.compare(statement3, statement6) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement7, statement3) < 0);
assertTrue(testComparator.compare(statement3, statement7) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement8, statement3) < 0);
assertTrue(testComparator.compare(statement3, statement8) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement5, statement4) < 0);
assertTrue(testComparator.compare(statement4, statement5) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement6, statement4) < 0);
assertTrue(testComparator.compare(statement4, statement6) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement7, statement4) < 0);
assertTrue(testComparator.compare(statement4, statement7) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement8, statement4) < 0);
assertTrue(testComparator.compare(statement4, statement8) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement5, statement6) < 0);
assertTrue(testComparator.compare(statement6, statement5) > 0);
// Same literal values different types
assertTrue(testComparator.compare(statement5, statement7) < 0);
assertTrue(testComparator.compare(statement7, statement5) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement5, statement8) < 0);
assertTrue(testComparator.compare(statement8, statement5) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement7, statement6) < 0);
assertTrue(testComparator.compare(statement6, statement7) > 0);
// Same literal values different types
assertTrue(testComparator.compare(statement6, statement8) < 0);
assertTrue(testComparator.compare(statement8, statement6) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement7, statement8) < 0);
assertTrue(testComparator.compare(statement8, statement7) > 0);
}
/**
* Tests consistency of sorting between equivalent statements with
* different typed and language literal objects
*/
@Test
public void testCompareLiteralObjectsTypedAndLanguage() {
statement1 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectLiteral1);
statement2 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectLiteral2);
statement3 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectLangLiteral1EN);
statement4 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectLangLiteral1JA);
statement5 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectLangLiteral2EN);
statement6 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectTypedLiteral1String);
statement7 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectTypedLiteral2String);
statement8 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectTypedLiteral1Integer);
statement9 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectTypedLiteral2Integer);
statement10 = valueFactory.createStatement(
testSubjectBNode1, testPredicateUri1, testObjectTypedLiteral1IntegerString);
statement11 = valueFactory.createStatement(
testSubjectBNode1, testPredicateUri1, testObjectTypedLiteral2IntegerString);
assertTrue(testComparator.compare(statement1, statement1) == 0);
assertTrue(testComparator.compare(statement2, statement2) == 0);
assertTrue(testComparator.compare(statement3, statement3) == 0);
assertTrue(testComparator.compare(statement4, statement4) == 0);
assertTrue(testComparator.compare(statement5, statement5) == 0);
assertTrue(testComparator.compare(statement6, statement6) == 0);
assertTrue(testComparator.compare(statement7, statement7) == 0);
assertTrue(testComparator.compare(statement8, statement8) == 0);
assertTrue(testComparator.compare(statement9, statement9) == 0);
// Different literal values sort
assertTrue(testComparator.compare(statement1, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement1) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement1, statement3) < 0);
assertTrue(testComparator.compare(statement3, statement1) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement1, statement4) < 0);
assertTrue(testComparator.compare(statement4, statement1) > 0);
// Same literal values sort one lang and one plain literal
// NOTE: This should not start failing in RDF-1.1, as the language should be checked before the datatype
assertTrue(testComparator.compare(statement1, statement5) < 0);
assertTrue(testComparator.compare(statement5, statement1) > 0);
// Same literal values sort one missing type, other xsd:string
// NOTE: prior to Sesame-2.8/RDF-1.1, these statements were unequal
assertTrue(testComparator.compare(statement1, statement6) == 0);
assertTrue(testComparator.compare(statement6, statement1) == 0);
// Different literal values sort
assertTrue(testComparator.compare(statement1, statement7) < 0);
assertTrue(testComparator.compare(statement7, statement1) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement8, statement1) < 0);
assertTrue(testComparator.compare(statement1, statement8) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement9, statement1) < 0);
assertTrue(testComparator.compare(statement1, statement9) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement10, statement1) < 0);
assertTrue(testComparator.compare(statement1, statement10) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement11, statement1) < 0);
assertTrue(testComparator.compare(statement1, statement11) > 0);
// Different literal values sort one lang and one plain literal
assertTrue(testComparator.compare(statement3, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement3) > 0);
// Different literal values sort one lang and one plain literal
assertTrue(testComparator.compare(statement4, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement4) > 0);
// Same literal values sort one lang and one plain literal
// NOTE: This should not start failing in RDF-1.1, as the language should be checked before the datatype
assertTrue(testComparator.compare(statement2, statement5) < 0);
assertTrue(testComparator.compare(statement5, statement2) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement6, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement6) > 0);
// Same literal values sort one missing type, other xsd:string
// NOTE: prior to Sesame-2.8/RDF-1.1, these statements were unequal
assertTrue(testComparator.compare(statement2, statement7) == 0);
assertTrue(testComparator.compare(statement7, statement2) == 0);
// Different literal values sort
assertTrue(testComparator.compare(statement8, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement8) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement9, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement9) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement10, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement10) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement11, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement11) > 0);
// Same literal values sort different langs
assertTrue(testComparator.compare(statement3, statement4) < 0);
assertTrue(testComparator.compare(statement4, statement3) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement3, statement5) < 0);
assertTrue(testComparator.compare(statement5, statement3) > 0);
// Same literal values sort one lang, other xsd:string
assertTrue(testComparator.compare(statement6, statement3) < 0);
assertTrue(testComparator.compare(statement3, statement6) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement3, statement7) < 0);
assertTrue(testComparator.compare(statement7, statement3) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement8, statement3) < 0);
assertTrue(testComparator.compare(statement3, statement8) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement9, statement3) < 0);
assertTrue(testComparator.compare(statement3, statement9) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement10, statement3) < 0);
assertTrue(testComparator.compare(statement3, statement10) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement11, statement3) < 0);
assertTrue(testComparator.compare(statement3, statement11) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement4, statement5) < 0);
assertTrue(testComparator.compare(statement5, statement4) > 0);
// Same literal values sort one lang, other xsd:string
assertTrue(testComparator.compare(statement6, statement4) < 0);
assertTrue(testComparator.compare(statement4, statement6) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement4, statement7) < 0);
assertTrue(testComparator.compare(statement7, statement4) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement8, statement4) < 0);
assertTrue(testComparator.compare(statement4, statement8) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement9, statement4) < 0);
assertTrue(testComparator.compare(statement4, statement9) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement10, statement4) < 0);
assertTrue(testComparator.compare(statement4, statement10) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement11, statement4) < 0);
assertTrue(testComparator.compare(statement4, statement11) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement6, statement5) < 0);
assertTrue(testComparator.compare(statement5, statement6) > 0);
// Same literal values sort one lang, other xsd:string
assertTrue(testComparator.compare(statement7, statement5) < 0);
assertTrue(testComparator.compare(statement5, statement7) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement8, statement5) < 0);
assertTrue(testComparator.compare(statement5, statement8) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement9, statement5) < 0);
assertTrue(testComparator.compare(statement5, statement9) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement10, statement5) < 0);
assertTrue(testComparator.compare(statement5, statement10) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement11, statement5) < 0);
assertTrue(testComparator.compare(statement5, statement11) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement6, statement7) < 0);
assertTrue(testComparator.compare(statement7, statement6) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement8, statement6) < 0);
assertTrue(testComparator.compare(statement6, statement8) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement9, statement6) < 0);
assertTrue(testComparator.compare(statement6, statement9) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement10, statement6) < 0);
assertTrue(testComparator.compare(statement6, statement10) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement11, statement6) < 0);
assertTrue(testComparator.compare(statement6, statement11) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement8, statement7) < 0);
assertTrue(testComparator.compare(statement7, statement8) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement9, statement7) < 0);
assertTrue(testComparator.compare(statement7, statement9) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement10, statement7) < 0);
assertTrue(testComparator.compare(statement7, statement10) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement11, statement7) < 0);
assertTrue(testComparator.compare(statement7, statement11) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement8, statement9) < 0);
assertTrue(testComparator.compare(statement9, statement8) > 0);
// Same literal values sort one xsd:integer, other xsd:string
assertTrue(testComparator.compare(statement8, statement10) < 0);
assertTrue(testComparator.compare(statement10, statement8) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement8, statement11) < 0);
assertTrue(testComparator.compare(statement11, statement8) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement10, statement9) < 0);
assertTrue(testComparator.compare(statement9, statement10) > 0);
// Same literal values sort one xsd:integer, other xsd:string
assertTrue(testComparator.compare(statement9, statement11) < 0);
assertTrue(testComparator.compare(statement11, statement9) > 0);
// Different literal values sort
assertTrue(testComparator.compare(statement10, statement11) < 0);
assertTrue(testComparator.compare(statement11, statement10) > 0);
}
/**
* Tests consistency of sorting between equivalent statements with
* different IRI objects
*/
@Test
public void testCompareUriObjects() {
statement1 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectUri1);
statement2 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectUri2);
assertTrue(testComparator.compare(statement1, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement1) > 0);
}
/**
* Tests whether a statement with a IRI object is sorted before a
* statement with a Literal object
*/
@Test
public void testCompareURIAndLiteralObjects() {
statement1 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectUri1);
statement2 = valueFactory.createStatement(testSubjectBNode1, testPredicateUri1, testObjectLiteral1);
assertTrue(testComparator.compare(statement1, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement1) > 0);
}
/**
* Tests whether a statement with a IRI object is sorted before a
* statement with a Literal object
*/
@Test
public void testComparePredicates() {
statement1 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1);
statement2 = valueFactory.createStatement(testSubjectUri1, testPredicateUri2, testObjectUri1);
assertTrue(testComparator.compare(statement1, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement1) > 0);
}
/**
* Tests consistency of sorting for two equivalent statements with
* different subject URIs
*/
@Test
public void testCompareSubjects() {
statement1 = valueFactory.createStatement(testSubjectUri1, testPredicateUri1, testObjectUri1);
statement2 = valueFactory.createStatement(testSubjectUri2, testPredicateUri1, testObjectUri1);
assertTrue(testComparator.compare(statement1, statement2) < 0);
assertTrue(testComparator.compare(statement2, statement1) > 0);
}
}