<?php 
 
error_reporting(E_ALL); 
ini_set('display_errors', true); 
ini_set('display_startup_errors', true); 
 
class Codevelox 
{ 
        private array $tasks = []; 
        private $data; 
 
        public function __construct(private $cycles = 100000) 
        { 
        } 
 
        public function data($data) 
        { 
                $this->data = $data; 
 
                return $this; 
        } 
 
        protected function time() 
        { 
                $microtime = \microtime(); 
 
                [$usec, $sec] = \explode(' ', $microtime); 
 
                return $sec . \substr($usec, 1); 
        } 
 
        public function add($tag, Closure $task) 
        { 
                $this->tasks[$tag] = $task; 
 
                return $this; 
        } 
 
        public function run() 
        { 
                $results = []; 
 
                foreach ($this->tasks as $g => $s) { 
                        $start = $this->time(); 
 
                        for ($i = 0; $i < $this->cycles; ++$i) { 
                                $s($this->data); 
                        } 
 
                        $end = $this->time(); 
 
                        $elapsed = $end - $start; 
 
                        $results[$g] = $elapsed; 
 
                        yield $g => $elapsed; 
                } 
 
                // PHP 5.6 doesn't support returning from a generator. 
                // PHP 7.0 does. 
                // return $results; 
        } 
 
        public function message($index, $desc, $time) 
        { 
                $time = \sprintf('%.2f', $time); 
                return "Task {$index} took $time ($desc)\n"; 
        } 
 
        public function run_and_show() 
        { 
                $queue = $this->run(); 
 
                $n = 1; 
                foreach ($queue as $g => $i) { 
                        echo $this->message($n, $g, $i); 
                        ++$n; 
                } 
 
                // $return = $queue->getReturn(); 
                // $this->show($return); 
 
                return $this; 
        } 
 
        public function show($results) 
        { 
                $n = 1; 
                foreach ($results as $g => $i) { 
                        echo $this->message($n, $g, $i); 
                        ++$n; 
                } 
 
                return $this; 
        } 
} 
 
 |