public function testRewindableGenerator()
{
// Make sure that send() and throw() work with rewindable generator
$genFn = makeRewindable(function () {
$startValue = yield;
try {
for (;;) {
(yield $startValue++);
}
} catch (\Exception $e) {
(yield 'end');
}
});
/** @var rewindable\_RewindableGenerator $gen */
$gen = $genFn();
for ($i = 0; $i < 2; ++$i) {
$gen->rewind();
$gen->send(10);
$this->assertEquals(10, $gen->current());
$gen->next();
$this->assertEquals(11, $gen->current());
$gen->next();
$this->assertEquals(12, $gen->current());
$gen->throw(new \Exception());
$this->assertEquals('end', $gen->current());
}
}