tests[$name] = $closure; return $this; } //-------------------------------------------------------------------- /** * Runs through all of the tests that have been added, recording * time to execute the desired number of iterations, and the approximate * memory usage used during those iterations. * * @param integer $iterations * @param boolean $output * * @return string|null */ public function run(int $iterations = 1000, bool $output = true) { foreach ($this->tests as $name => $test) { // clear memory before start gc_collect_cycles(); $start = microtime(true); $start_mem = $max_memory = memory_get_usage(true); for ($i = 0; $i < $iterations; $i ++) { $result = $test(); $max_memory = max($max_memory, memory_get_usage(true)); unset($result); } $this->results[$name] = [ 'time' => microtime(true) - $start, 'memory' => $max_memory - $start_mem, 'n' => $iterations, ]; } if ($output) { return $this->getReport(); } return null; } //-------------------------------------------------------------------- /** * Get results. * * @return string */ public function getReport(): string { if (empty($this->results)) { return 'No results to display.'; } helper('number'); // Template $tpl = '
Test | Time | Memory |