PageRenderTime 63ms CodeModel.GetById 28ms RepoModel.GetById 1ms app.codeStats 0ms

/benchmark/simple.php

https://github.com/waynedog74/SimplePHPEasyPlus
PHP | 75 lines | 56 code | 19 blank | 0 comment | 4 complexity | a8209f16e493a988adecd1e761cfd984 MD5 | raw file
  1. <?php
  2. use SimplePHPEasyPlus\Number\NumberCollection;
  3. use SimplePHPEasyPlus\Number\SimpleNumber;
  4. use SimplePHPEasyPlus\Number\CollectionItemNumberProxy;
  5. use SimplePHPEasyPlus\Parser\SimpleNumberStringParser;
  6. use SimplePHPEasyPlus\Iterator\CallbackIterator;
  7. use SimplePHPEasyPlus\Operator\AdditionOperator;
  8. use SimplePHPEasyPlus\Operation\ArithmeticOperation;
  9. use SimplePHPEasyPlus\Operation\OperationStream;
  10. use SimplePHPEasyPlus\Engine;
  11. use SimplePHPEasyPlus\Calcul\Calcul;
  12. use SimplePHPEasyPlus\Calcul\CalculRunner;
  13. require_once(__DIR__.'/../tests/bootstrap.php');
  14. function process($a, $b)
  15. {
  16. $numberCollection = new NumberCollection();
  17. $numberParser = new SimpleNumberStringParser();
  18. $firstParsedNumber = $numberParser->parse('2');
  19. $firstNumber = new SimpleNumber($firstParsedNumber);
  20. $firstNumberProxy = new CollectionItemNumberProxy($firstNumber);
  21. $numberCollection->add($firstNumberProxy);
  22. $secondParsedNumber = $numberParser->parse('3');
  23. $secondNumber = new SimpleNumber($secondParsedNumber);
  24. $secondNumberProxy = new CollectionItemNumberProxy($secondNumber);
  25. $numberCollection->add($secondNumberProxy);
  26. $addition = new AdditionOperator('SimplePHPEasyPlus\Number\SimpleNumber');
  27. $operation = new ArithmeticOperation($addition);
  28. $engine = new Engine($operation);
  29. $calcul = new Calcul($engine, $numberCollection);
  30. $runner = new CalculRunner();
  31. $runner->run($calcul);
  32. $result = $calcul->getResult();
  33. $numericResult = $result->getValue();
  34. }
  35. $number = 100000;
  36. $a = $b = 1;
  37. $start = microtime(true);
  38. for($i = 0 ; $i < $number ; ++$i) {
  39. $a + $b;
  40. }
  41. $time1 = microtime(true) - $start;
  42. printf('For %d additions:%s', $number, "\n");;
  43. printf(' Native PHP "+" operator: %01.2f ms.%s', $time1*$number, "\n");
  44. $start = microtime(true);
  45. for($i = 0 ; $i < $number ; ++$i) {
  46. process($a, $b);
  47. }
  48. $time2 = microtime(true) - $start;
  49. printf(' SimplePHPEasyPlus: %01.2f ms.%s', $time2*$number, "\n");
  50. printf('%s=> ', "\n");
  51. if ($time2 >= $time1) {
  52. printf('SimplePHPEasyPlus is %.1fx slower than Native PHP', $time2/$time1);
  53. } else {
  54. printf('SimplePHPEasyPlus is %.1fx faster than Native PHP', $time1/$time2);
  55. }
  56. printf('%s', "\n");