public function generate(SuiteDocument $results, Config $config) { $document = new Document(); $reportEl = $document->createRoot('reports'); $reportEl->setAttribute('name', $config->getName()); $reportEl = $reportEl->appendElement('report'); $descriptionEl = $reportEl->appendElement('description'); $descriptionEl->nodeValue = <<<EOT Warning: The histogram report is experimental, it may change or be removed without warning in future versions of PHPBench. EOT; $tableEl = $reportEl->appendElement('table'); foreach ($results->query('//subject') as $subjectEl) { foreach ($subjectEl->query('.//variant') as $variantEl) { $times = array(); foreach ($variantEl->query('.//iteration') as $iterationEl) { $times[] = $iterationEl->getAttribute('rev-time'); } if (count($times) > 1) { $histogram = Statistics::histogram($times, $config['bins']); $kde = new Kde($times); $kdeX = Statistics::linspace(min($times), max($times), $config['bins'] + 1); $kdeY = $kde->evaluate($kdeX); } else { $histogram = array((string) current($times) => 1); $kdeY = array(null); } $counter = 0; foreach ($histogram as $xValue => $frequency) { $kdeVal = $kdeY[$counter++]; $rowEl = $tableEl->appendElement('row'); $cellEl = $rowEl->appendElement('cell'); $cellEl->setAttribute('name', 'benchmark'); $cellEl->nodeValue = functions\class_name($subjectEl->evaluate('string(ancestor::benchmark/@class)')); $cellEl = $rowEl->appendElement('cell'); $cellEl->setAttribute('name', 'subject'); $cellEl->nodeValue = $subjectEl->evaluate('string(./@name)'); $cellEl = $rowEl->appendElement('cell'); $cellEl->setAttribute('name', 'index'); $cellEl->nodeValue = $counter; $cellEl = $rowEl->appendElement('cell'); $cellEl->setAttribute('name', 'time'); $cellEl->nodeValue = $xValue; $cellEl = $rowEl->appendElement('cell'); $cellEl->setAttribute('name', 'freq'); $cellEl->nodeValue = $frequency; $cellEl = $rowEl->appendElement('cell'); $cellEl->setAttribute('name', 'kde'); $cellEl->nodeValue = $kdeVal; } } } return $document; }
/** * {@inheritdoc} */ public function generate(SuiteCollection $collection, Config $config) { $reportDoms = $this->reportManager->generateReports($collection, $config['reports']); $compositeDom = new Document(); $compositeEl = $compositeDom->createRoot('reports'); $compositeEl->setAttribute('name', $config->getName()); foreach ($reportDoms as $reportsDom) { foreach ($reportsDom->xpath()->query('./report') as $reportDom) { $reportEl = $compositeDom->importNode($reportDom, true); $compositeEl->appendChild($reportEl); } } return $compositeDom; }
/** * It should allow good names. * * @dataProvider provideGoodName */ public function testGoodName($name) { $config = new Config($name, []); $this->assertEquals($name, $config->getName()); }