@DataProvider(name = "minusNanos_fromZero")
  Iterator<Object[]> minusNanos_fromZero() {

    return new Iterator<Object[]>() {

      long delta = 7500000000L;

      long i = 3660 * 1000000000L;

      LocalDate date = TCKLocalDateTime.this.TEST_2007_07_15_12_30_40_987654321.getDate().minusDays(1);

      int hour = 22;

      int min = 59;

      int sec = 0;

      long nanos = 0;

      @Override
      public boolean hasNext() {

        return this.i >= -3660 * 1000000000L;
      }

      @Override
      public Object[] next() {

        final Object[] ret = new Object[] { this.i, this.date, this.hour, this.min, this.sec, (int) this.nanos };
        this.i -= this.delta;
        this.nanos += this.delta;

        if (this.nanos >= 1000000000L) {
          this.sec += this.nanos / 1000000000L;
          this.nanos %= 1000000000L;

          if (this.sec >= 60) {
            this.min++;
            this.sec %= 60;

            if (this.min == 60) {
              this.hour++;
              this.min = 0;

              if (this.hour == 24) {
                this.hour = 0;
                this.date = this.date.plusDays(1);
              }
            }
          }
        }

        return ret;
      }

      @Override
      public void remove() {

        throw new UnsupportedOperationException();
      }
    };
  }

  @Test(dataProvider = "minusNanos_fromZero", groups = { "tck" }