/** * @test * @group BasicDecimal * @group findsChangesAggAtRecurrence * @group changesAggAtRecurrence * @group decimal * @group createScalar * @group createSample */ public function findsChangesAggAtRecurrence() { $allSampleProviders = self::provideFullSamplesData(); $this->assertFalse(empty($allSampleProviders)); $expProvider = self::provideExpectedValues('provideChangesAggAtRecurrence'); $this->assertFalse(empty($expProvider)); foreach ($expProvider as $sampleProviderName => $expValues) { $sampleProvider = $allSampleProviders[$sampleProviderName]; $this->assertFalse(empty($sampleProvider)); $scalarFields = array('name' => self::randomString(), 'type' => 'decimal'); $scalarId = $this->_core->createScalar($scalarFields); foreach ($sampleProvider['samples'] as $sample) { list($end, $value) = $sample; $this->_partition->createSample($scalarId, $value, $end); } foreach (Hashmark_Analyst_BasicDecimal::getRecurFunctions() as $recurFunc) { foreach (self::$_aggFunctions as $aggFunc) { $errorMsg = "data={$sampleProviderName} val=ALL recur={$recurFunc} agg={$aggFunc}"; $actValues = $this->_analyst->changesAggAtRecurrence($scalarId, $sampleProvider['rangeStart'], $sampleProvider['rangeEnd'], $recurFunc, $aggFunc, false); foreach ($actValues as $actual) { $this->assertDecimalEquals($expValues['ALL'][$recurFunc][$actual['x']][$aggFunc], $actual['y'], $errorMsg . " x={$actual['x']}"); } $errorMsg = "data={$sampleProviderName} val=DIS recur={$recurFunc} agg={$aggFunc}"; $actValues = $this->_analyst->changesAggAtRecurrence($scalarId, $sampleProvider['rangeStart'], $sampleProvider['rangeEnd'], $recurFunc, $aggFunc, true); foreach ($actValues as $actual) { $this->assertDecimalEquals($expValues['DIS'][$recurFunc][$actual['x']][$aggFunc], $actual['y'], $errorMsg . " x={$actual['x']}"); } } } } }
* @filesource * @copyright Copyright (c) 2008-2011 David Smith * @license http://www.opensource.org/licenses/mit-license.php MIT License * @package Hashmark-Test * @subpackage Hashmark_Analyst_BasicDecimal * @version $Id$ */ $expValues = array(); $sampleProviders = Hashmark_TestCase_Analyst_BasicDecimal::provideFullSamplesData(); $aggFunctions = Hashmark_TestCase_Analyst_BasicDecimal::getAggFunctions(); foreach ($sampleProviders as $sampleProviderName => $sampleProviderData) { // Skip providers like 'provideValuesSamples'. if (empty($sampleProviderData['interval'])) { continue; } $intervalFormat = Hashmark_Analyst_BasicDecimal::getIntervalPhpFormat($sampleProviderData['interval']); // Collect and sort in-range values. // - Value sets indexed by interval-based groups, e.g. '20080612' day group. $groupValues = array(); foreach ($sampleProviderData['samples'] as $sample) { list($end, $value, , $isInRange) = $sample; if ($isInRange) { $groupName = gmdate($intervalFormat, strtotime($end . ' UTC')); if (!isset($groupValues[$groupName])) { $groupValues[$groupName] = array(); } $groupValues[$groupName][$end] = $value; } } foreach ($groupValues as $groupName => $values) { ksort($groupValues[$groupName]);
<?php // vim: fenc=utf-8:ft=php:ai:si:ts=4:sw=4:et: /** * Use bcmath to calculate expected values for Test/Analyst/BasicDecimal/Data/provider.php. * * @filesource * @copyright Copyright (c) 2008-2011 David Smith * @license http://www.opensource.org/licenses/mit-license.php MIT License * @package Hashmark-Test * @subpackage Hashmark_Analyst_BasicDecimal * @version $Id$ */ $recurFormats = Hashmark_Analyst_BasicDecimal::getRecurFormats(); $recurFunctions = array_keys($recurFormats); $sampleProviders = Hashmark_TestCase_Analyst_BasicDecimal::provideFullSamplesData(); $expValues = array(); foreach ($sampleProviders as $sampleProviderName => $sampleProviderData) { $groupValues = array_fill_keys($recurFunctions, array()); foreach ($sampleProviderData['samples'] as $sample) { list($end, $value, , $isInRange) = $sample; if (!$isInRange) { continue; } // Group values by their recurrence, ex. DAYOFMONTH values. foreach ($recurFormats as $recurFunc => $format) { $groupName = gmdate($format, strtotime($end . ' UTC')); // Adjust for PHP/MySQL diff. if ('z' == $format) { $groupName += 1; }