IconTest 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/usr/bin/env php
  2. <?php
  3. define('ITERATIONS', 100000);
  4. require dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
  5. use Identicon\Generator\GdGenerator;
  6. use Identicon\Generator\ImageMagickGenerator;
  7. use Identicon\Generator\SvgGenerator;
  8. use Identicon\Identicon;
  9. use PrivateBin\Vizhash16x16;
  10. $vizhash = new Vizhash16x16();
  11. $identiconGenerators = array(
  12. 'identicon GD' => new Identicon(new GdGenerator()),
  13. 'identicon ImageMagick' => new Identicon(new ImageMagickGenerator()),
  14. 'identicon SVG' => new Identicon(new SvgGenerator())
  15. );
  16. $results = array(
  17. 'vizhash' => array(
  18. 'lengths' => array(),
  19. 'time' => 0
  20. ),
  21. 'identicon GD' => array(
  22. 'lengths' => array(),
  23. 'time' => 0
  24. ),
  25. 'identicon ImageMagick' => array(
  26. 'lengths' => array(),
  27. 'time' => 0
  28. ),
  29. 'identicon SVG' => array(
  30. 'lengths' => array(),
  31. 'time' => 0
  32. )
  33. );
  34. $hmacs = array();
  35. echo 'generate ', ITERATIONS, ' hmacs and pre-populate the result array, so tests wont be slowed down', PHP_EOL;
  36. for ($i = 0; $i < ITERATIONS; ++$i) {
  37. $hmacs[$i] = hash_hmac('sha512', '127.0.0.1', bin2hex(random_bytes(256)));
  38. $results['vizhash']['lengths'][$i] = 0;
  39. $results['identicon GD']['lengths'][$i] = 0;
  40. $results['identicon ImageMagick']['lengths'][$i] = 0;
  41. $results['identicon SVG']['lengths'][$i] = 0;
  42. }
  43. echo 'run vizhash tests', PHP_EOL;
  44. $start = microtime(true);
  45. foreach ($hmacs as $i => $hmac) {
  46. $data = 'data:image/png;base64,' . base64_encode(
  47. $vizhash->generate($hmac)
  48. );
  49. $results['vizhash']['lengths'][$i] = strlen($data);
  50. }
  51. $results['vizhash']['time'] = microtime(true) - $start;
  52. foreach ($identiconGenerators as $key => $identicon) {
  53. echo 'run ', $key,' tests', PHP_EOL;
  54. $start = microtime(true);
  55. foreach ($hmacs as $i => $hmac) {
  56. $data = $identicon->getImageDataUri($hmac, 16);
  57. $results[$key]['lengths'][$i] = strlen($data);
  58. }
  59. $results[$key]['time'] = microtime(true) - $start;
  60. }
  61. define('PADDING_LENGTH', max(array_map(function ($key) { return strlen($key); }, array_keys($results))) + 1);
  62. function format_result_line($generator, $min, $max, $avg, $sec) {
  63. echo str_pad($generator, PADDING_LENGTH, ' '), "\t",
  64. str_pad($min, 4, ' ', STR_PAD_LEFT), "\t",
  65. str_pad($max, 4, ' ', STR_PAD_LEFT), "\t",
  66. str_pad($avg, 4, ' ', STR_PAD_LEFT), "\t",
  67. str_pad($sec, 7, ' ', STR_PAD_LEFT), PHP_EOL;
  68. }
  69. echo PHP_EOL;
  70. format_result_line('Generator:', 'min', 'max', 'avg', 'seconds');
  71. format_result_line(str_repeat('─', PADDING_LENGTH), str_repeat('─', 4), str_repeat('─', 4), str_repeat('─', 4), str_repeat('─', 7));
  72. foreach ($results as $generator => $result) {
  73. sort($result['lengths']);
  74. format_result_line(
  75. $generator . ':',
  76. $result['lengths'][0],
  77. $result['lengths'][ITERATIONS-1],
  78. round(array_sum($result['lengths']) / ITERATIONS),
  79. round($result['time'], 3)
  80. );
  81. }