/** @dataProvider valueDataProvider */ public function testDelayGeneratorCreator($value) { static $index = 0; $this->given($timeout = 500, $current = 0, $this->function->microtime = function () use($timeout, &$current) { $value = $current; $current += $timeout / 1000; return $value; }, $creator = function ($limit, $value) { while ($limit-- > 0) { yield; } return (function () use($value) { yield; return $value; })(); })->then->object($generator = testedClass::delay($timeout, $creator(3, $value)))->isInstanceOf(\generator::class)->variable(async\runtime::await($generator))->isIdenticalTo($value)->function('microtime')->wasCalledWithArguments(true)->exactly(++$index * 2); }
/** * @api * * @param int $interval * @param $resolve * * @return \generator */ function throttle(int $interval, $resolve) : \generator { return time::throttle($interval, $resolve); }