public function shrink(GeneratedValue $element)
{
$this->ensureIsInDomain($element);
$timeOffset = $element->unbox()->getTimestamp() - $this->lowerLimit->getTimestamp();
$halvedOffset = floor($timeOffset / 2);
return GeneratedValue::fromJustValue($this->fromOffset($halvedOffset), 'date');
}
public function testTheLowerLimitIsTheFixedPointOfShrinking() { $generator = new DateGenerator($lowerLimit = new DateTime("2014-01-01T00:00:00"), new DateTime("2014-01-02T23:59:59")); $value = GeneratedValue::fromJustValue(new DateTime("2014-01-01T00:01:00"), 'date'); for ($i = 0; $i < 10; $i++) { $value = $generator->shrink($value); } $this->assertEquals($lowerLimit, $value->unbox()); }