blob: 2f65b6d0fbc3cb314de5269a485a8b7e28e188d4 [file] [log] [blame]
<?php
/**
* ezcGraphDataSetAverageTest
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
* @package Graph
* @version //autogen//
* @subpackage Tests
* @copyright Copyright (C) 2005-2010 eZ Systems AS. All rights reserved.
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
*/
require_once dirname( __FILE__ ) . '/test_case.php';
/**
* Tests for ezcGraph class.
*
* @package Graph
* @subpackage Tests
*/
class ezcGraphDataSetAverageTest extends ezcGraphTestCase
{
protected $basePath;
protected $tempDir;
public static function suite()
{
return new PHPUnit_Framework_TestSuite( "ezcGraphDataSetAverageTest" );
}
protected function setUp()
{
static $i = 0;
$this->tempDir = $this->createTempDir( __CLASS__ . sprintf( '_%03d_', ++$i ) ) . '/';
$this->basePath = dirname( __FILE__ ) . '/data/';
}
protected function tearDown()
{
if ( !$this->hasFailed() )
{
$this->removeTempDir();
}
}
public function testCreateDatasetFromDataset()
{
$arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 1, 0 => 0, 1 => 1 ) );
$averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
$averageDataSet->polynomOrder = 2;
$polynom = $averageDataSet->getPolynom();
$this->assertEquals(
'x^2',
$polynom->__toString()
);
}
public function testCreateDatasetFromSingleElementDataset()
{
$arrayDataSet = new ezcGraphArrayDataSet( array( 1 => 1 ) );
$averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
$polynom = $averageDataSet->getPolynom();
$this->assertEquals(
'1',
$polynom->__toString()
);
}
public function testCreateDatasetFromSingleElementDatasetRender()
{
$filename = $this->tempDir . __FUNCTION__ . '.svg';
$chart = new ezcGraphLineChart();
$chart->data['src'] = new ezcGraphArrayDataSet( array( 1 => 1 ) );
$chart->data['avg'] = new ezcGraphDataSetAveragePolynom( $chart->data['src'] );
$chart->render( 500, 200, $filename );
$this->compare(
$filename,
$this->basePath . 'compare/' . __CLASS__ . '_' . __FUNCTION__ . '.svg'
);
}
public function testCreateDatasetFromDataset2()
{
$arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
$averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
$averageDataSet->polynomOrder = 2;
$polynom = $averageDataSet->getPolynom();
$this->assertEquals(
'x^2 + 1',
$polynom->__toString()
);
}
public function testCreateDatasetFromDataset3_52()
{
if ( version_compare( phpversion(), '5.2.0', '>' ) )
{
$this->markTestSkipped( "This test is only for PHP prior 5.2.1. See PHP bug #40482." );
}
date_default_timezone_set( 'MET' );
$arrayDataSet = new ezcGraphArrayDataSet( array(
strtotime( 'Jun 2006' ) => 1300000,
strtotime( 'May 2006' ) => 1200000,
strtotime( 'Apr 2006' ) => 1100000,
strtotime( 'Mar 2006' ) => 1100000,
strtotime( 'Feb 2006' ) => 1000000,
strtotime( 'Jan 2006' ) => 965000,
) );
$averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet, 2 );
$polynom = $averageDataSet->getPolynom();
$this->assertEquals(
'8.2e-10 x^2 - 1.85 x + 1.0e+9',
$polynom->__toString()
);
}
public function testCreateDatasetFromDataset3()
{
if ( version_compare( phpversion(), '5.2.1', '<' ) )
{
$this->markTestSkipped( "This test is only for PHP after 5.2.1. See PHP bug #40482." );
}
date_default_timezone_set( 'MET' );
$arrayDataSet = new ezcGraphArrayDataSet( array(
strtotime( 'Jun 2006' ) => 1300000,
strtotime( 'May 2006' ) => 1200000,
strtotime( 'Apr 2006' ) => 1100000,
strtotime( 'Mar 2006' ) => 1100000,
strtotime( 'Feb 2006' ) => 1000000,
strtotime( 'Jan 2006' ) => 965000,
) );
$averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet, 2 );
$polynom = $averageDataSet->getPolynom();
$this->assertEquals(
'8.21e-10 x^2 - 1.85 x + 1.04e+9',
$polynom->__toString()
);
}
public function testCreateDatasetFromDataset4()
{
$points = array();
for ( $x = -1; $x <= 5; ++$x )
{
$points[$x] = pow( $x - 2, 3 ) - .21 * pow( $x - 2, 2 ) + .2 * ( $x - 2 ) - 2.45;
}
$arrayDataSet = new ezcGraphArrayDataSet( $points );
$averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet, 3 );
$polynom = $averageDataSet->getPolynom();
$this->assertEquals(
'x^3 - 6.21 x^2 + 13.0 x - 11.7',
$polynom->__toString()
);
}
public function testCreateDatasetFromDataset5_52()
{
if ( version_compare( phpversion(), '5.2.0', '>' ) )
{
$this->markTestSkipped( "This test is only for PHP prior 5.2.1. See PHP bug #40482." );
}
$points = array();
for ( $x = -3; $x <= 3; ++$x )
{
$points[$x] = pow( $x, 3 ) - .21 * pow( $x, 2 ) + .2 * $x - 2.45;
}
$arrayDataSet = new ezcGraphArrayDataSet( $points );
$averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet, 3 );
$polynom = $averageDataSet->getPolynom();
$this->assertEquals(
'x^3 - 2.1e-1 x^2 + 2.0e-1 x - 2.45',
$polynom->__toString()
);
}
public function testCreateDatasetFromDataset5()
{
if ( version_compare( phpversion(), '5.2.1', '<' ) )
{
$this->markTestSkipped( "This test is only for PHP after 5.2.1. See PHP bug #40482." );
}
$points = array();
for ( $x = -3; $x <= 3; ++$x )
{
$points[$x] = pow( $x, 3 ) - .21 * pow( $x, 2 ) + .2 * $x - 2.45;
}
$arrayDataSet = new ezcGraphArrayDataSet( $points );
$averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet, 3 );
$polynom = $averageDataSet->getPolynom();
$this->assertEquals(
'x^3 - 2.10e-1 x^2 + 2.00e-1 x - 2.45',
$polynom->__toString()
);
}
public function testCreateDatasetFromDatasetLowOrder()
{
$arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
$averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
$averageDataSet->polynomOrder = 1;
$polynom = $averageDataSet->getPolynom();
$this->assertEquals(
'2.00 x + 2.67',
$polynom->__toString()
);
}
public function testCreateDatasetFromDatasetHighOrder()
{
$arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
$averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
$averageDataSet->polynomOrder = 3;
$polynom = $averageDataSet->getPolynom();
$this->assertEquals(
'x^2 + 1',
$polynom->__toString()
);
}
public function testCreateDatasetFromDatasetHighOrderConstructorParameter()
{
$arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
$averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet, 3 );
$polynom = $averageDataSet->getPolynom();
$this->assertEquals(
'x^2 + 1',
$polynom->__toString()
);
}
public function testIterateOverAverageDataset()
{
$arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
$averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
$averageDataSet->polynomOrder = 3;
$this->assertEquals(
2.,
$averageDataSet[-1],
'Polynom should evaluate to 2.',
.01
);
$this->assertEquals(
2.,
$averageDataSet[1],
'Polynom should evaluate to 2.',
.01
);
$this->assertEquals(
5.,
$averageDataSet[2],
'Polynom should evaluate to 5.',
.01
);
$this->assertEquals(
10.,
$averageDataSet[3],
'Polynom should evaluate to 10.',
.01
);
}
public function testIterateOverAverageDataset2()
{
$arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
$averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
$averageDataSet->polynomOrder = 3;
$stepSize = 4 / 100;
$start = -1 - $stepSize;
foreach ( $averageDataSet as $key => $value )
{
$this->assertEquals( (string) ( $start += $stepSize ), $key, 'Wrong step.', .01 );
}
}
public function testIterateOverAverageDataset3()
{
$arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
$averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
$averageDataSet->polynomOrder = 3;
$averageDataSet->resolution = 10;
$stepSize = 4 / 10;
$start = -1 - $stepSize;
foreach ( $averageDataSet as $key => $value )
{
$this->assertEquals( (string) ( $start += $stepSize ), $key, 'Wrong step.', .01 );
}
}
public function testRenderCompleteLineChart()
{
$filename = $this->tempDir . __FUNCTION__ . '.svg';
$chart = new ezcGraphLineChart();
$chart->data['Statistical data'] = new ezcGraphArrayDataSet( array(
'1' => 1,
'2.5' => -2.3,
'3.1' => 1.4,
'4' => 5,
'5.3' => 1.2,
'7' => 6.5,
) );
$chart->data['Statistical data']->symbol = ezcGraph::BULLET;
$chart->data['polynom order 0'] = new ezcGraphDataSetAveragePolynom( $chart->data['Statistical data'], 0 );
$chart->data['polynom order 1'] = new ezcGraphDataSetAveragePolynom( $chart->data['Statistical data'], 1 );
$chart->data['polynom order 3'] = new ezcGraphDataSetAveragePolynom( $chart->data['Statistical data'], 3 );
$chart->data['polynom order 5'] = new ezcGraphDataSetAveragePolynom( $chart->data['Statistical data'], 5 );
$chart->xAxis = new ezcGraphChartElementNumericAxis();
$chart->render( 500, 200, $filename );
$this->compare(
$filename,
$this->basePath . 'compare/' . __CLASS__ . '_' . __FUNCTION__ . '.svg'
);
}
public function testRenderCompleteLineChart2()
{
$filename = $this->tempDir . __FUNCTION__ . '.svg';
$chart = new ezcGraphLineChart();
date_default_timezone_set( 'MET' );
$chart->data['Statistical data'] = new ezcGraphArrayDataSet( array(
'Jun 2006' => 1300000,
'May 2006' => 1200000,
'Apr 2006' => 1100000,
'Mar 2006' => 1100000,
'Feb 2006' => 1000000,
'Jan 2006' => 965000,
) );
$chart->data['Statistical data']->symbol = ezcGraph::BULLET;
$chart->data['polynom order 2'] = new ezcGraphDataSetAveragePolynom( $chart->data['Statistical data'], 2 );
$chart->xAxis = new ezcGraphChartElementNumericAxis();
try
{
$chart->render( 500, 200, $filename );
}
catch ( ezcGraphDatasetAverageInvalidKeysException $e )
{
return true;
}
$this->fail( 'Expected ezcGraphDatasetAverageInvalidKeysException.' );
}
public function testAverageDataSetIsset()
{
$arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
$averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
$averageDataSet->polynomOrder = 3;
$averageDataSet->resolution = 10;
$this->assertSame(
isset( $averageDataSet[0] ),
true,
'Polygon not properly initialized.'
);
}
public function testDataSetAveragePolynomPropertyPolynomOrder()
{
$arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
$dataset = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
$this->assertSame(
3,
$dataset->polynomOrder,
'Wrong default value for property polynomOrder in class ezcGraphDataSetAveragePolynom'
);
$dataset->polynomOrder = 5;
$this->assertSame(
5,
$dataset->polynomOrder,
'Setting property value did not work for property polynomOrder in class ezcGraphDataSetAveragePolynom'
);
try
{
$dataset->polynomOrder = false;
}
catch ( ezcBaseValueException $e )
{
return true;
}
$this->fail( 'Expected ezcBaseValueException.' );
}
public function testDataSetAveragePolynomPropertyResolution()
{
$arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
$dataset = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
$this->assertSame(
100,
$dataset->resolution,
'Wrong default value for property resolution in class ezcGraphDataSetAveragePolynom'
);
$dataset->resolution = 5;
$this->assertSame(
5,
$dataset->resolution,
'Setting property value did not work for property resolution in class ezcGraphDataSetAveragePolynom'
);
try
{
$dataset->resolution = false;
}
catch ( ezcBaseValueException $e )
{
return true;
}
$this->fail( 'Expected ezcBaseValueException.' );
}
}
?>