public void testFixedZeroOffset() {
    OffsetGapList<OffsetGapList.Offset> ogl = new OffsetGapList<OffsetGapList.Offset>(true);
    OffsetGapList.Offset offsetA = new OffsetGapList.Offset(0);
    OffsetGapList.Offset offsetB = new OffsetGapList.Offset(100);

    ogl.add(offsetA);
    ogl.add(offsetB);
    assertEquals("Wrong initial offset A", 0, offsetA.getOffset());
    assertEquals("Wrong initial offset B", 100, offsetB.getOffset());

    ogl.defaultInsertUpdate(0, 10); // simulate insert at the zero offset
    assertEquals("Offset A should not have been moved", 0, offsetA.getOffset());
    assertEquals("Offset B should have been moved", 110, offsetB.getOffset());

    ogl.defaultRemoveUpdate(0, 10); // simulate remove at the zero offset
    assertEquals("Offset A should not have been moved", 0, offsetA.getOffset());
    assertEquals("Offset B should have been moved back", 100, offsetB.getOffset());

    ogl.defaultInsertUpdate(0, 3); // simulate insert at the zero offset
    assertEquals("Offset A should not have been moved", 0, offsetA.getOffset());
    assertEquals("Offset B should have been moved again", 103, offsetB.getOffset());
  }
  public void testMovingZeroOffset() {
    OffsetGapList<OffsetGapList.Offset> ogl = new OffsetGapList<OffsetGapList.Offset>();
    OffsetGapList.Offset offsetA = new OffsetGapList.Offset(0);
    OffsetGapList.Offset offsetB = new OffsetGapList.Offset(100);

    ogl.add(offsetA);
    ogl.add(offsetB);
    assertEquals("Wrong initial offset A", 0, offsetA.getOffset());
    assertEquals("Wrong initial offset B", 100, offsetB.getOffset());

    ogl.defaultInsertUpdate(0, 10); // simulate insert at the zero offset
    assertEquals("Offset A should have been moved", 10, offsetA.getOffset());
    assertEquals("Offset B should have been moved", 110, offsetB.getOffset());
  }