@Test
  public void testSliceEnd() {
    Slice sl;

    sl = new Slice().setLength(12);
    assertEquals(11, sl.getEnd());
    sl = new Slice(null, null, 2).setLength(12);
    assertEquals(10, sl.getEnd());
    sl = new Slice(1, null).setLength(12);
    assertEquals(11, sl.getEnd());
    sl = new Slice(1, null, 2).setLength(12);
    assertEquals(11, sl.getEnd());
    sl = new Slice(1, null, -2).setLength(12);
    assertEquals(1, sl.getEnd());
    sl = new Slice(null, null, -1).setLength(12);
    assertEquals(0, sl.getEnd());
    sl = new Slice(null, null, -2).setLength(12);
    assertEquals(1, sl.getEnd());

    sl = new Slice(12);
    assertEquals(11, sl.getEnd());
    sl = new Slice(1, 12);
    assertEquals(11, sl.getEnd());
    try {
      sl = new Slice(12, 1);
      sl.getEnd();
      fail("No exception thrown");
    } catch (IllegalStateException ise) {
      // passed
    } catch (Exception e) {
      fail("Wrong exception type passed, this should give an IllegalStateException");
    }
    sl = new Slice(1, 12, 2);
    assertEquals(11, sl.getEnd());
    sl = new Slice(1, 12, 12);
    assertEquals(1, sl.getEnd());
    sl = new Slice(12, 1, -1);
    assertEquals(2, sl.getEnd());
    sl = new Slice(12, 1, -2);
    assertEquals(2, sl.getEnd());
    sl = new Slice(12, 1, -12);
    assertEquals(12, sl.getEnd());

    sl = new Slice(null, 12, 2);
    assertEquals(10, sl.getEnd());
    try {
      sl = new Slice(null, 12, -2);
      sl.getEnd();
      fail("No exception thrown");
    } catch (IllegalStateException ise) {
      // passed
    } catch (Exception e) {
      fail("Wrong exception type passed, this should give an IllegalStateException");
    }
    try {
      sl = new Slice(null, null, -2);
      sl.getEnd();
      fail("No exception thrown");
    } catch (IllegalStateException ise) {
      // passed
    } catch (Exception e) {
      fail("Wrong exception type passed, this should give an IllegalStateException");
    }
  }