<?php
$stepMutator = stepMutator();
// This is the same as
//
// var_dump(iterator_to_array(stepMutator()));
//
var_dump(iterator_to_array($stepMutator));
function importSupport() {
return array_values([
'log' => function(?float $steps, ?string $tmpl = null) {
return sprintf($tmpl ?? 'Mutator(steps=%s) Incremented', $steps);
},
]);
}
function importSpinners() {
return array_values([
'increment' => function(int $i) {return ++$i;},
'decrement' => function(int $i) {return --$i;},
]);
}
function stepMutator() {
$id = random_int(1, 500000);
$logLine = 0;
list($log, $increment, $decrement) = array_merge(
importSupport(),
importSpinners()
);
$logStep = function(int $step) {return sprintf('LogStep(%d)', $step);};
$stepper = function(int $step) {return sprintf('Step(%d)', $step);};
$steps = 0;
yield $logStep(++$logLine) => $log($steps, 'Initialized(steps=%d)', $steps);
yield $logStep(++$logLine) => $log(time(), 'Initialized(time=%s)');
yield $logStep(++$logLine) => $log($id, 'Initialized(id=%s)');
yield $logStep(++$logLine) => $log($steps = $increment($steps));
yield $logStep(++$logLine) => $log($steps = $increment($steps));
yield $logStep(++$logLine) => $log($steps = $increment($steps));
// Say, for instance, something needs pruning...
yield $logStep(++$logLine) => $log($steps = $decrement($steps),
'Mutator(steps=%s) Decremented'
);
yield $logStep(++$logLine) => $log($steps = $increment($steps));
yield $logStep(++$logLine) => $log(null, 'SIGEND'); // Signal end of processing.
// Result of our effort.
yield 'payload' => array_map($stepper, range(1, $steps));
}
preferences:
36.75 ms | 402 KiB | 5 Q