/**
  * @dataProvider provider_reducedWithChrono
  */
 public function test_reducedWithChronoYearOfEra(ChronoLocalDate $date)
 {
     $chrono = $date->getChronology();
     $df = (new DateTimeFormatterBuilder())->appendValueReduced2(ChronoField::YEAR_OF_ERA(), 2, 2, LocalDate::of(2000, 1, 1))->toFormatter()->withChronology($chrono);
     $expected = $date->get(ChronoField::YEAR_OF_ERA());
     $input = $df->format($date);
     $pos = new ParsePosition(0);
     $parsed = $df->parseUnresolved($input, $pos);
     $actual = $parsed->get(ChronoField::YEAR_OF_ERA());
     $this->assertEquals($actual, $expected, "Wrong date parsed, chrono: " . $chrono . ", input: " . $input);
 }
 /**
  * @inheritdoc
  */
 public function compareTo(ChronoLocalDate $other)
 {
     $cmp = Long::compare($this->toEpochDay(), $other->toEpochDay());
     if ($cmp === 0) {
         $cmp = $this->getChronology()->compareTo($other->getChronology());
     }
     return $cmp;
 }
 public function plus($amountToAdd, TemporalUnit $unit)
 {
     if ($unit instanceof ChronoUnit) {
         $f = $unit;
         switch ($f) {
             case ChronoUnit::NANOS():
                 return $this->plusNanos($amountToAdd);
             case ChronoUnit::MICROS():
                 return $this->plusDays(Math::div($amountToAdd, self::MICROS_PER_DAY))->plusNanos($amountToAdd % self::MICROS_PER_DAY * 1000);
             case ChronoUnit::MILLIS():
                 return $this->plusDays(Math::div($amountToAdd, self::MILLIS_PER_DAY))->plusNanos($amountToAdd % self::MILLIS_PER_DAY * 1000000);
             case ChronoUnit::SECONDS():
                 return $this->plusSeconds($amountToAdd);
             case ChronoUnit::MINUTES():
                 return $this->plusMinutes($amountToAdd);
             case ChronoUnit::HOURS():
                 return $this->plusHours($amountToAdd);
             case ChronoUnit::HALF_DAYS():
                 return $this->plusDays(Math::div($amountToAdd, 256))->plusHours($amountToAdd % 256 * 12);
                 // no overflow (256 is multiple of 2)
         }
         return $this->_with($this->date->plus($amountToAdd, $unit), $this->time);
     }
     return ChronoLocalDateTimeImpl::ensureValid($this->date->getChronology(), $unit->addTo($this, $amountToAdd));
 }