/** @dataProvider valueDataProvider */ public function testAllWrappedGeneratorCreators($value, $otherValue = null) { $this->given($otherValue = $otherValue ?? $value, $creator = function ($limit, $value) { while ($limit-- > 0) { yield; } return (function () use($value) { yield; return $value; })(); })->then->object($generator = all(runtime\wrap($creator(3, $value)), runtime\wrap($creator(5, $otherValue))))->isInstanceOf(\generator::class)->array(runtime\await($generator))->object[0]->isInstanceOf(\generator::class)->object[1]->isInstanceOf(\generator::class); }
/** @dataProvider valueDataProvider */ public function testAwaitWrappedGeneratorCreator($value) { $this->given($creator = function ($limit, $value) { while ($limit-- > 0) { yield; } return (function () use($value) { yield; return $value; })(); })->then->object(await(runtime\wrap($creator(3, $value))))->isInstanceOf(\generator::class); }
/** @dataProvider valueDataProvider */ public function testRaceWrappedGeneratorCreators($value, $otherValue = null) { $this->given($otherValue = $otherValue ?? $value, $creator = function ($limit, $value) { while ($limit-- > 0) { yield; } return (function () use($value) { yield; return $value; })(); })->then->object($generator = race(runtime\wrap($creator(5, $value)), runtime\wrap($creator(3, $otherValue))))->isInstanceOf(\generator::class)->object(runtime\await($generator))->isInstanceOf(\generator::class)->variable(runtime\await(runtime\await($generator)))->isIdenticalTo($value); }
/** @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 = delay($timeout, $creator(3, $value)))->isInstanceOf(\generator::class)->variable(runtime\await($generator))->isIdenticalTo($value)->function('microtime')->wasCalledWithArguments(true)->exactly(++$index * 2); }