public function __construct(array $generatorsWithFrequency)
{
if (empty($generatorsWithFrequency)) {
throw new InvalidArgumentException('Cannot choose from an empty array of generators');
}
$this->generators = array_reduce($generatorsWithFrequency, function ($generators, $generatorWithFrequency) {
list($frequency, $generator) = $generatorWithFrequency;
$frequency = $this->ensureIsFrequency($generatorWithFrequency[0]);
$generator = ensureIsGenerator($generatorWithFrequency[1]);
if ($frequency > 0) {
$generators[] = ['generator' => $generator, 'frequency' => $frequency];
}
return $generators;
}, []);
}