/apps/principal/lib/Graph/tests/dataset_average_test.php

https://github.com/proyectoalba/alba · PHP · 446 lines · 343 code · 88 blank · 15 comment · 12 complexity · d3c9c7232196c4dc3c4efcc8b9ac1bc7 MD5 · raw file

  1. <?php
  2. /**
  3. * ezcGraphDataSetAverageTest
  4. *
  5. * @package Graph
  6. * @version 1.2
  7. * @subpackage Tests
  8. * @copyright Copyright (C) 2005-2007 eZ systems as. All rights reserved.
  9. * @license http://ez.no/licenses/new_bsd New BSD License
  10. */
  11. require_once dirname( __FILE__ ) . '/test_case.php';
  12. /**
  13. * Tests for ezcGraph class.
  14. *
  15. * @package Graph
  16. * @subpackage Tests
  17. */
  18. class ezcGraphDataSetAverageTest extends ezcGraphTestCase
  19. {
  20. protected $basePath;
  21. protected $tempDir;
  22. public static function suite()
  23. {
  24. return new PHPUnit_Framework_TestSuite( "ezcGraphDataSetAverageTest" );
  25. }
  26. protected function setUp()
  27. {
  28. static $i = 0;
  29. $this->tempDir = $this->createTempDir( __CLASS__ . sprintf( '_%03d_', ++$i ) ) . '/';
  30. $this->basePath = dirname( __FILE__ ) . '/data/';
  31. }
  32. protected function tearDown()
  33. {
  34. if ( !$this->hasFailed() )
  35. {
  36. $this->removeTempDir();
  37. }
  38. }
  39. public function testCreateDatasetFromDataset()
  40. {
  41. $arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 1, 0 => 0, 1 => 1 ) );
  42. $averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
  43. $averageDataSet->polynomOrder = 2;
  44. $polynom = $averageDataSet->getPolynom();
  45. $this->assertEquals(
  46. 'x^2',
  47. $polynom->__toString()
  48. );
  49. }
  50. public function testCreateDatasetFromDataset2()
  51. {
  52. $arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
  53. $averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
  54. $averageDataSet->polynomOrder = 2;
  55. $polynom = $averageDataSet->getPolynom();
  56. $this->assertEquals(
  57. 'x^2 + 1',
  58. $polynom->__toString()
  59. );
  60. }
  61. public function testCreateDatasetFromDataset3_52()
  62. {
  63. if ( version_compare( phpversion(), '5.2.0', '>' ) )
  64. {
  65. $this->markTestSkipped( "This test is only for PHP prior 5.2.1. See PHP bug #40482." );
  66. }
  67. date_default_timezone_set( 'MET' );
  68. $arrayDataSet = new ezcGraphArrayDataSet( array(
  69. strtotime( 'Jun 2006' ) => 1300000,
  70. strtotime( 'May 2006' ) => 1200000,
  71. strtotime( 'Apr 2006' ) => 1100000,
  72. strtotime( 'Mar 2006' ) => 1100000,
  73. strtotime( 'Feb 2006' ) => 1000000,
  74. strtotime( 'Jan 2006' ) => 965000,
  75. ) );
  76. $averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet, 2 );
  77. $polynom = $averageDataSet->getPolynom();
  78. $this->assertEquals(
  79. '8.2e-10 x^2 - 1.85 x + 1.0e+9',
  80. $polynom->__toString()
  81. );
  82. }
  83. public function testCreateDatasetFromDataset3()
  84. {
  85. if ( version_compare( phpversion(), '5.2.1', '<' ) )
  86. {
  87. $this->markTestSkipped( "This test is only for PHP after 5.2.1. See PHP bug #40482." );
  88. }
  89. date_default_timezone_set( 'MET' );
  90. $arrayDataSet = new ezcGraphArrayDataSet( array(
  91. strtotime( 'Jun 2006' ) => 1300000,
  92. strtotime( 'May 2006' ) => 1200000,
  93. strtotime( 'Apr 2006' ) => 1100000,
  94. strtotime( 'Mar 2006' ) => 1100000,
  95. strtotime( 'Feb 2006' ) => 1000000,
  96. strtotime( 'Jan 2006' ) => 965000,
  97. ) );
  98. $averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet, 2 );
  99. $polynom = $averageDataSet->getPolynom();
  100. $this->assertEquals(
  101. '8.21e-10 x^2 - 1.85 x + 1.04e+9',
  102. $polynom->__toString()
  103. );
  104. }
  105. public function testCreateDatasetFromDataset4()
  106. {
  107. $points = array();
  108. for ( $x = -1; $x <= 5; ++$x )
  109. {
  110. $points[$x] = pow( $x - 2, 3 ) - .21 * pow( $x - 2, 2 ) + .2 * ( $x - 2 ) - 2.45;
  111. }
  112. $arrayDataSet = new ezcGraphArrayDataSet( $points );
  113. $averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet, 3 );
  114. $polynom = $averageDataSet->getPolynom();
  115. $this->assertEquals(
  116. 'x^3 - 6.21 x^2 + 13.0 x - 11.7',
  117. $polynom->__toString()
  118. );
  119. }
  120. public function testCreateDatasetFromDataset5_52()
  121. {
  122. if ( version_compare( phpversion(), '5.2.0', '>' ) )
  123. {
  124. $this->markTestSkipped( "This test is only for PHP prior 5.2.1. See PHP bug #40482." );
  125. }
  126. $points = array();
  127. for ( $x = -3; $x <= 3; ++$x )
  128. {
  129. $points[$x] = pow( $x, 3 ) - .21 * pow( $x, 2 ) + .2 * $x - 2.45;
  130. }
  131. $arrayDataSet = new ezcGraphArrayDataSet( $points );
  132. $averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet, 3 );
  133. $polynom = $averageDataSet->getPolynom();
  134. $this->assertEquals(
  135. 'x^3 - 2.1e-1 x^2 + 2.0e-1 x - 2.45',
  136. $polynom->__toString()
  137. );
  138. }
  139. public function testCreateDatasetFromDataset5()
  140. {
  141. if ( version_compare( phpversion(), '5.2.1', '<' ) )
  142. {
  143. $this->markTestSkipped( "This test is only for PHP after 5.2.1. See PHP bug #40482." );
  144. }
  145. $points = array();
  146. for ( $x = -3; $x <= 3; ++$x )
  147. {
  148. $points[$x] = pow( $x, 3 ) - .21 * pow( $x, 2 ) + .2 * $x - 2.45;
  149. }
  150. $arrayDataSet = new ezcGraphArrayDataSet( $points );
  151. $averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet, 3 );
  152. $polynom = $averageDataSet->getPolynom();
  153. $this->assertEquals(
  154. 'x^3 - 2.10e-1 x^2 + 2.00e-1 x - 2.45',
  155. $polynom->__toString()
  156. );
  157. }
  158. public function testCreateDatasetFromDatasetLowOrder()
  159. {
  160. $arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
  161. $averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
  162. $averageDataSet->polynomOrder = 1;
  163. $polynom = $averageDataSet->getPolynom();
  164. $this->assertEquals(
  165. '2.00 x + 2.67',
  166. $polynom->__toString()
  167. );
  168. }
  169. public function testCreateDatasetFromDatasetHighOrder()
  170. {
  171. $arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
  172. $averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
  173. $averageDataSet->polynomOrder = 3;
  174. $polynom = $averageDataSet->getPolynom();
  175. $this->assertEquals(
  176. 'x^2 + 1',
  177. $polynom->__toString()
  178. );
  179. }
  180. public function testCreateDatasetFromDatasetHighOrderConstructorParameter()
  181. {
  182. $arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
  183. $averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet, 3 );
  184. $polynom = $averageDataSet->getPolynom();
  185. $this->assertEquals(
  186. 'x^2 + 1',
  187. $polynom->__toString()
  188. );
  189. }
  190. public function testIterateOverAverageDataset()
  191. {
  192. $arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
  193. $averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
  194. $averageDataSet->polynomOrder = 3;
  195. $this->assertEquals(
  196. 2.,
  197. $averageDataSet[-1],
  198. 'Polynom should evaluate to 2.',
  199. .01
  200. );
  201. $this->assertEquals(
  202. 2.,
  203. $averageDataSet[1],
  204. 'Polynom should evaluate to 2.',
  205. .01
  206. );
  207. $this->assertEquals(
  208. 5.,
  209. $averageDataSet[2],
  210. 'Polynom should evaluate to 5.',
  211. .01
  212. );
  213. $this->assertEquals(
  214. 10.,
  215. $averageDataSet[3],
  216. 'Polynom should evaluate to 10.',
  217. .01
  218. );
  219. }
  220. public function testIterateOverAverageDataset2()
  221. {
  222. $arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
  223. $averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
  224. $averageDataSet->polynomOrder = 3;
  225. $stepSize = 4 / 100;
  226. $start = -1 - $stepSize;
  227. foreach ( $averageDataSet as $key => $value )
  228. {
  229. $this->assertEquals( (string) ( $start += $stepSize ), $key, 'Wrong step.', .01 );
  230. }
  231. }
  232. public function testIterateOverAverageDataset3()
  233. {
  234. $arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
  235. $averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
  236. $averageDataSet->polynomOrder = 3;
  237. $averageDataSet->resolution = 10;
  238. $stepSize = 4 / 10;
  239. $start = -1 - $stepSize;
  240. foreach ( $averageDataSet as $key => $value )
  241. {
  242. $this->assertEquals( (string) ( $start += $stepSize ), $key, 'Wrong step.', .01 );
  243. }
  244. }
  245. public function testRenderCompleteLineChart()
  246. {
  247. $filename = $this->tempDir . __FUNCTION__ . '.svg';
  248. $chart = new ezcGraphLineChart();
  249. $chart->data['Statistical data'] = new ezcGraphArrayDataSet( array(
  250. '1' => 1,
  251. '2.5' => -2.3,
  252. '3.1' => 1.4,
  253. '4' => 5,
  254. '5.3' => 1.2,
  255. '7' => 6.5,
  256. ) );
  257. $chart->data['Statistical data']->symbol = ezcGraph::BULLET;
  258. $chart->data['polynom order 0'] = new ezcGraphDataSetAveragePolynom( $chart->data['Statistical data'], 0 );
  259. $chart->data['polynom order 1'] = new ezcGraphDataSetAveragePolynom( $chart->data['Statistical data'], 1 );
  260. $chart->data['polynom order 3'] = new ezcGraphDataSetAveragePolynom( $chart->data['Statistical data'], 3 );
  261. $chart->data['polynom order 5'] = new ezcGraphDataSetAveragePolynom( $chart->data['Statistical data'], 5 );
  262. $chart->xAxis = new ezcGraphChartElementNumericAxis();
  263. $chart->render( 500, 200, $filename );
  264. $this->compare(
  265. $filename,
  266. $this->basePath . 'compare/' . __CLASS__ . '_' . __FUNCTION__ . '.svg'
  267. );
  268. }
  269. public function testRenderCompleteLineChart2()
  270. {
  271. $filename = $this->tempDir . __FUNCTION__ . '.svg';
  272. $chart = new ezcGraphLineChart();
  273. date_default_timezone_set( 'MET' );
  274. $chart->data['Statistical data'] = new ezcGraphArrayDataSet( array(
  275. 'Jun 2006' => 1300000,
  276. 'May 2006' => 1200000,
  277. 'Apr 2006' => 1100000,
  278. 'Mar 2006' => 1100000,
  279. 'Feb 2006' => 1000000,
  280. 'Jan 2006' => 965000,
  281. ) );
  282. $chart->data['Statistical data']->symbol = ezcGraph::BULLET;
  283. $chart->data['polynom order 2'] = new ezcGraphDataSetAveragePolynom( $chart->data['Statistical data'], 2 );
  284. $chart->xAxis = new ezcGraphChartElementNumericAxis();
  285. try
  286. {
  287. $chart->render( 500, 200, $filename );
  288. }
  289. catch ( ezcGraphDatasetAverageInvalidKeysException $e )
  290. {
  291. return true;
  292. }
  293. $this->fail( 'Expected ezcGraphDatasetAverageInvalidKeysException.' );
  294. }
  295. public function testAverageDataSetIsset()
  296. {
  297. $arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
  298. $averageDataSet = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
  299. $averageDataSet->polynomOrder = 3;
  300. $averageDataSet->resolution = 10;
  301. $this->assertSame(
  302. isset( $averageDataSet[0] ),
  303. true,
  304. 'Polygon not properly initialized.'
  305. );
  306. }
  307. public function testDataSetAveragePolynomPropertyPolynomOrder()
  308. {
  309. $arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
  310. $dataset = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
  311. $this->assertSame(
  312. 3,
  313. $dataset->polynomOrder,
  314. 'Wrong default value for property polynomOrder in class ezcGraphDataSetAveragePolynom'
  315. );
  316. $dataset->polynomOrder = 5;
  317. $this->assertSame(
  318. 5,
  319. $dataset->polynomOrder,
  320. 'Setting property value did not work for property polynomOrder in class ezcGraphDataSetAveragePolynom'
  321. );
  322. try
  323. {
  324. $dataset->polynomOrder = false;
  325. }
  326. catch ( ezcBaseValueException $e )
  327. {
  328. return true;
  329. }
  330. $this->fail( 'Expected ezcBaseValueException.' );
  331. }
  332. public function testDataSetAveragePolynomPropertyResolution()
  333. {
  334. $arrayDataSet = new ezcGraphArrayDataSet( array( -1 => 2, 1 => 2, 3 => 10 ) );
  335. $dataset = new ezcGraphDataSetAveragePolynom( $arrayDataSet );
  336. $this->assertSame(
  337. 100,
  338. $dataset->resolution,
  339. 'Wrong default value for property resolution in class ezcGraphDataSetAveragePolynom'
  340. );
  341. $dataset->resolution = 5;
  342. $this->assertSame(
  343. 5,
  344. $dataset->resolution,
  345. 'Setting property value did not work for property resolution in class ezcGraphDataSetAveragePolynom'
  346. );
  347. try
  348. {
  349. $dataset->resolution = false;
  350. }
  351. catch ( ezcBaseValueException $e )
  352. {
  353. return true;
  354. }
  355. $this->fail( 'Expected ezcBaseValueException.' );
  356. }
  357. }
  358. ?>