@Test
  public void testEmptyRepository() throws Exception {
    // repository should be empty
    assertEquals("Empty repository should not return any statements", 0, countAllElements());

    assertEquals("Named context should be empty", 0, countContext1Elements());

    assertEquals(
        "Empty repository should not return any context identifiers",
        0,
        countElements(con.getContextIDs()));

    assertEquals(
        "Empty repository should not return any query results",
        0,
        countQueryResults("select * from {S} P {O}"));
  }
  @Test
  public void testGetContextIDs() throws Exception {
    assertEquals(0, countElements(con.getContextIDs()));

    // load data
    con.begin();
    con.addStatement(picasso, paints, guernica, context1);
    assertEquals(1, countElements(con.getContextIDs()));
    assertEquals(context1, first(con.getContextIDs()));

    con.removeStatements(picasso, paints, guernica, context1);
    assertEquals(0, countElements(con.getContextIDs()));
    con.commit();

    assertEquals(0, countElements(con.getContextIDs()));

    con.begin();
    con.addStatement(picasso, paints, guernica, context2);
    assertEquals(1, countElements(con.getContextIDs()));
    assertEquals(context2, first(con.getContextIDs()));
    con.commit();
  }
  @Test
  public void testAddData() throws Exception {
    // Add some data to the repository
    con.begin();
    con.addStatement(painter, RDF.TYPE, RDFS.CLASS);
    con.addStatement(painting, RDF.TYPE, RDFS.CLASS);
    con.addStatement(picasso, RDF.TYPE, painter, context1);
    con.addStatement(guernica, RDF.TYPE, painting, context1);
    con.addStatement(picasso, paints, guernica, context1);
    con.commit();

    assertEquals("Repository should contain 5 statements in total", 5, countAllElements());

    assertEquals("Named context should contain 3 statements", 3, countContext1Elements());

    assertEquals(
        "Repository should have 1 context identifier", 1, countElements(con.getContextIDs()));

    assertEquals(
        "Repository should contain 5 statements in total",
        5,
        countQueryResults("select * from {S} P {O}"));

    // Check for presence of the added statements
    assertEquals(
        "Statement (Painter, type, Class) should be in the repository",
        1,
        countQueryResults("select 1 from {ex:Painter} rdf:type {rdfs:Class}"));

    assertEquals(
        "Statement (picasso, type, Painter) should be in the repository",
        1,
        countQueryResults("select 1 from {ex:picasso} rdf:type {ex:Painter}"));

    // Check for absense of non-added statements
    assertEquals(
        "Statement (Painter, paints, Painting) should not be in the repository",
        0,
        countQueryResults("select 1 from {ex:Painter} ex:paints {ex:Painting}"));

    assertEquals(
        "Statement (picasso, creates, guernica) should not be in the repository",
        0,
        countQueryResults("select 1 from {ex:picasso} ex:creates {ex:guernica}"));

    // Various other checks
    assertEquals(
        "Repository should contain 2 statements matching (picasso, _, _)",
        2,
        countQueryResults("select * from {ex:picasso} P {O}"));

    assertEquals(
        "Repository should contain 1 statement matching (picasso, paints, _)",
        1,
        countQueryResults("select * from {ex:picasso} ex:paints {O}"));

    assertEquals(
        "Repository should contain 4 statements matching (_, type, _)",
        4,
        countQueryResults("select * from {S} rdf:type {O}"));

    assertEquals(
        "Repository should contain 2 statements matching (_, _, Class)",
        2,
        countQueryResults("select * from {S} P {rdfs:Class}"));

    assertEquals(
        "Repository should contain 0 statements matching (_, _, type)",
        0,
        countQueryResults("select * from {S} P {rdf:type}"));
  }