function it_should_be_able_to_run_processes()
{
$prophet = new Prophet();
$processes = [];
for ($i = 0; $i < 20; $i++) {
$process = $prophet->prophesize(Process::class);
$process->started = false;
$process->terminated = false;
$process->start()->will(function () use($process) {
$process->started = true;
})->shouldBeCalledTimes(1);
$process->isTerminated()->will(function () use($process) {
if (!$process->terminated) {
$process->terminated = true;
return false;
}
return true;
})->shouldBeCalledTimes(2);
// The number of times isStarted() is called starts at 3
// and increases by 2 after each chunk of five processes.
$process->isStarted()->will(function () use($process) {
return $process->started;
})->shouldBeCalledTimes(floor($i / 5) * 2 + 3);
$processes[] = $process->reveal();
}
$this->run($processes);
$prophet->checkPredictions();
}