/** {@inheritDoc} */
  @Override
  protected void checkX(final int step, final BasicNumber x) {

    super.checkX(step, x);

    Assert.assertTrue(x.isInteger());

    switch (step) {
      case 0:
        {
          Assert.assertEquals(0L, x.longValue());
          return;
        }
      case 1:
        {
          Assert.assertEquals(1L, x.longValue());
          return;
        }
      case 2:
        {
          Assert.assertEquals(2L, x.longValue());
          return;
        }
      case 3:
        {
          Assert.assertEquals(3L, x.longValue());
          return;
        }
      default:
        {
          throw new AssertionError("Only four steps allowed."); // $NON-NLS-1$
        }
    }
  }
  /** {@inheritDoc} */
  @Override
  protected void checkX(final int step, final BasicNumber x) {

    super.checkX(step, x);

    Assert.assertFalse(x.isInteger());
    if (step <= 15) {
      Assert.assertEquals(-step - 0.5d, x.doubleValue(), Double.MIN_VALUE);
    } else {
      throw new AssertionError("Only sixteen steps allowed."); // $NON-NLS-1$
    }
  }
  /** {@inheritDoc} */
  @Override
  protected void checkX(final int step, final BasicNumber x) {
    super.checkX(step, x);

    Assert.assertFalse(x.isInteger());

    switch (step) {
      case 0:
        {
          Assert.assertEquals(40000.5d, x.doubleValue(), Double.MIN_VALUE);
          return;
        }
      case 1:
        {
          Assert.assertEquals(3.5d, x.doubleValue(), Double.MIN_VALUE);
          return;
        }
      case 2:
        {
          Assert.assertEquals(2.5d, x.doubleValue(), Double.MIN_VALUE);
          return;
        }
      case 3:
        {
          Assert.assertEquals(1.5d, x.doubleValue(), Double.MIN_VALUE);
          return;
        }
      case 4:
        {
          Assert.assertEquals(0.5d, x.doubleValue(), Double.MIN_VALUE);
          return;
        }
      default:
        {
          throw new AssertionError("Only five steps allowed."); // $NON-NLS-1$
        }
    }
  }