]> granicus.if.org Git - php/commitdiff
- Commit synthetic benchmark
authorAndi Gutmans <andi@php.net>
Thu, 23 Sep 2004 16:42:21 +0000 (16:42 +0000)
committerAndi Gutmans <andi@php.net>
Thu, 23 Sep 2004 16:42:21 +0000 (16:42 +0000)
Zend/tests/bench.php [new file with mode: 0644]

diff --git a/Zend/tests/bench.php b/Zend/tests/bench.php
new file mode 100644 (file)
index 0000000..c45fe40
--- /dev/null
@@ -0,0 +1,412 @@
+<?php
+
+function simple() {
+  for ($i = 0; $i < 1000000; $i++) 
+    $a++;
+
+  for ($thisisalongname = 0; $thisisalongname < 1000000; $thisisalongname++) 
+    $thisisanotherlongname++;
+}
+
+/****/
+
+function simplecall() {
+  for ($i = 0; $i < 1000000; $i++) 
+    strlen("hallo");
+}
+
+/****/
+
+function hallo($a) {
+}
+
+function simpleucall() {
+  for ($i = 0; $i < 1000000; $i++) 
+    hallo("hallo");
+}
+
+/****/
+
+function simpleudcall() {
+  for ($i = 0; $i < 1000000; $i++) 
+    hallo2("hallo");
+}
+
+function hallo2($a) {
+}
+
+/****/
+
+function mandel() {
+  $w1=50;
+  $h1=150;
+  $recen=-.45;
+  $imcen=0.0;
+  $r=0.7;
+  $s=0;  $rec=0;  $imc=0;  $re=0;  $im=0;  $re2=0;  $im2=0;
+  $x=0;  $y=0;  $w2=0;  $h2=0;  $color=0;
+  $s=2*$r/$w1;
+  $w2=40;
+  $h2=12;
+  for ($y=0 ; $y<=$w1; $y=$y+1) {
+    $imc=$s*($y-$h2)+$imcen;
+    for ($x=0 ; $x<=$h1; $x=$x+1) {
+      $rec=$s*($x-$w2)+$recen;
+      $re=$rec;
+      $im=$imc;
+      $color=1000;
+      $re2=$re*$re;
+      $im2=$im*$im;
+      while( ((($re2+$im2)<1000000) && $color>0)) {
+        $im=$re*$im*2+$imc;
+        $re=$re2-$im2+$rec;
+        $re2=$re*$re;
+        $im2=$im*$im;
+        $color=$color-1;
+      }
+      if ( $color==0 ) {
+        print "_";
+      } else {
+        print "#";
+      }
+    }
+    print "<br>".$vbCr;
+    flush();
+  }
+}
+
+/****/
+
+function mandel2() {
+  $b = " .:,;!/>)|&IH%*#";
+  //float r, i, z, Z, t, c, C;
+  for ($y=30; printf("\n"), $C = $y*0.1 - 1.5, $y--;){
+    for ($x=0; $c = $x*0.04 - 2, $z=0, $Z=0, $x++ < 75;){
+      for ($r=$c, $i=$C, $k=0; $t = $z*$z - $Z*$Z + $r, $Z = 2*$z*$Z + $i, $z=$t, $k<5000; $k++)
+        if ($z*$z + $Z*$Z > 500000) break;
+      echo $b[$k%16];
+    }
+  }
+}
+
+/****/
+
+function Ack($m, $n){
+  if($m == 0) return $n+1;
+  if($n == 0) return Ack($m-1, 1);
+  return Ack($m - 1, Ack($m, ($n - 1)));
+}
+
+function ackermann($n) {
+  $r = Ack(3,$n);
+  print "Ack(3,$n): $r\n";
+}
+
+/****/
+
+function ary($n) {
+  for ($i=0; $i<$n; $i++) {
+    $X[$i] = $i;
+  }
+  for ($i=$n-1; $i>=0; $i--) {
+    $Y[$i] = $X[$i];
+  }
+  $last = $n-1;
+  print "$Y[$last]\n";
+}
+
+/****/
+
+function ary2($n) {
+  for ($i=0; $i<$n;) {
+    $X[$i] = $i; ++$i;
+    $X[$i] = $i; ++$i;
+    $X[$i] = $i; ++$i;
+    $X[$i] = $i; ++$i;
+    $X[$i] = $i; ++$i;
+
+    $X[$i] = $i; ++$i;
+    $X[$i] = $i; ++$i;
+    $X[$i] = $i; ++$i;
+    $X[$i] = $i; ++$i;
+    $X[$i] = $i; ++$i;
+  }
+  for ($i=$n-1; $i>=0; $i--) {
+    $Y[$i] = $X[$i]; --$i;
+    $Y[$i] = $X[$i]; --$i;
+    $Y[$i] = $X[$i]; --$i;
+    $Y[$i] = $X[$i]; --$i;
+    $Y[$i] = $X[$i]; --$i;
+
+    $Y[$i] = $X[$i]; --$i;
+    $Y[$i] = $X[$i]; --$i;
+    $Y[$i] = $X[$i]; --$i;
+    $Y[$i] = $X[$i]; --$i;
+    $Y[$i] = $X[$i]; --$i;
+  }
+  $last = $n-1;
+  print "$Y[$last]\n";
+}
+
+/****/
+
+function ary3($n) {
+  for ($i=0; $i<$n; $i++) {
+    $X[$i] = $i + 1;
+  }
+  for ($k=0; $k<1000; $k++) {
+    for ($i=$n-1; $i>=0; $i--) {
+      $Y[$i] += $X[$i];
+    }
+  }
+  $last = $n-1;
+  print "$Y[0] $Y[$last]\n";
+}
+
+/****/
+
+function fibo_r($n){
+    return(($n < 2) ? 1 : fibo($n - 2) + fibo_r($n - 1));
+}
+
+function fibo($n) {
+  $r = fibo_r($n);
+  print "$r\n";
+}
+
+/****/
+
+function hash($n) {
+  for ($i = 1; $i <= $n; $i++) {
+    $X[dechex($i)] = $i;
+  }
+  for ($i = $n; $i > 0; $i--) {
+    if ($X[$i]) { $c++; }
+  }
+  print "$c\n";
+}
+
+/****/
+
+function hash2($n) {
+  for ($i = 0; $i < 10000; $i++) {
+    $hash1["foo_$i"] = $i;
+  }
+  for ($i = $n; $i > 0; $i--) {
+    foreach($hash1 as $key => $value) $hash2[$key] += $value;
+  }
+  print "$hash1[foo_1] $hash1[foo_9999] $hash2[foo_1] $hash2[foo_9999]\n";
+}
+
+/****/
+
+function gen_random ($n) {
+    global $LAST;
+    return( ($n * ($LAST = ($LAST * IA + IC) % IM)) / IM );
+}
+
+function heapsort_r($n, &$ra) {
+    $l = ($n >> 1) + 1;
+    $ir = $n;
+
+    while (1) {
+       if ($l > 1) {
+           $rra = $ra[--$l];
+       } else {
+           $rra = $ra[$ir];
+           $ra[$ir] = $ra[1];
+           if (--$ir == 1) {
+               $ra[1] = $rra;
+               return;
+           }
+       }
+       $i = $l;
+       $j = $l << 1;
+       while ($j <= $ir) {
+           if (($j < $ir) && ($ra[$j] < $ra[$j+1])) {
+               $j++;
+           }
+           if ($rra < $ra[$j]) {
+               $ra[$i] = $ra[$j];
+               $j += ($i = $j);
+           } else {
+               $j = $ir + 1;
+           }
+       }
+       $ra[$i] = $rra;
+    }
+}
+
+function heapsort($N) {
+  global $LAST;
+
+  define("IM", 139968);
+  define("IA", 3877);
+  define("IC", 29573);
+
+  $LAST = 42;
+  for ($i=1; $i<=$N; $i++) {
+    $ary[$i] = gen_random(1);
+  }
+  heapsort_r($N, $ary);
+  printf("%.10f\n", $ary[$N]);
+}
+
+/****/
+
+function mkmatrix ($rows, $cols) {
+    $count = 1;
+    $mx = array();
+    for ($i=0; $i<$rows; $i++) {
+       for ($j=0; $j<$cols; $j++) {
+           $mx[$i][$j] = $count++;
+       }
+    }
+    return($mx);
+}
+
+function mmult ($rows, $cols, $m1, $m2) {
+    $m3 = array();
+    for ($i=0; $i<$rows; $i++) {
+       for ($j=0; $j<$cols; $j++) {
+           $x = 0;
+           for ($k=0; $k<$cols; $k++) {
+               $x += $m1[$i][$k] * $m2[$k][$j];
+           }
+           $m3[$i][$j] = $x;
+       }
+    }
+    return($m3);
+}
+
+function matrix($n) {
+  $SIZE = 30;
+  $m1 = mkmatrix($SIZE, $SIZE);
+  $m2 = mkmatrix($SIZE, $SIZE);
+  while ($n--) {
+    $mm = mmult($SIZE, $SIZE, $m1, $m2);
+  }
+  print "{$mm[0][0]} {$mm[2][3]} {$mm[3][2]} {$mm[4][4]}\n";
+}
+
+/****/
+
+function nestedloop($n) {
+  $x = 0;
+  for ($a=0; $a<$n; $a++)
+    for ($b=0; $b<$n; $b++)
+      for ($c=0; $c<$n; $c++)
+        for ($d=0; $d<$n; $d++)
+          for ($e=0; $e<$n; $e++)
+            for ($f=0; $f<$n; $f++)
+             $x++;
+  print "$x\n";
+}
+
+/****/
+
+function sieve($n) {
+  $count = 0;
+  while ($n-- > 0) {
+    $count = 0;
+    $flags = range (0,8192);
+    for ($i=2; $i<8193; $i++) {
+      if ($flags[$i] > 0) {
+        for ($k=$i+$i; $k <= 8192; $k+=$i) {
+          $flags[$k] = 0;
+        }
+        $count++;
+      }
+    }
+  }
+  print "Count: $count\n";
+}
+
+/****/
+
+function strcat($n) {
+  $str = "";
+  while ($n-- > 0) {
+    $str .= "hello\n";
+  }
+  $len = strlen($str);
+  print "$len\n";
+}
+
+/*****/
+
+function getmicrotime()
+{ 
+  list($usec, $sec) = explode(" ",microtime()); 
+  return ((float)$usec + (float)$sec); 
+} 
+
+function start_test()
+{
+       ob_start();
+  return getmicrotime();
+}
+
+function end_test($start, $name)
+{
+  global $total;
+  $end = getmicrotime();
+  ob_end_clean();
+  $total += $end-$start;
+  $num = number_format($end-$start,3);
+  $pad = str_repeat(" ", 24-strlen($name)-strlen($num));
+
+  echo $name.$pad.$num."\n";
+       ob_start();
+  return getmicrotime();
+}
+
+function total()
+{
+  global $total;
+  $pad = str_repeat("-", 24);
+  echo $pad."\n";
+  $num = number_format($total,3);
+  $pad = str_repeat(" ", 24-strlen("Total")-strlen($num));
+  echo "Total".$pad.$num."\n";
+}
+
+$t0 = $t = start_test();
+simple();
+$t = end_test($t, "simple");
+simplecall();
+$t = end_test($t, "simplecall");
+simpleucall();
+$t = end_test($t, "simpleucall");
+simpleudcall();
+$t = end_test($t, "simpleudcall");
+mandel();
+$t = end_test($t, "mandel");
+mandel2();
+$t = end_test($t, "mandel2");
+ackermann(7);
+$t = end_test($t, "ackermann(7)");
+ary(50000);
+$t = end_test($t, "ary(50000)");
+ary2(50000);
+$t = end_test($t, "ary2(50000)");
+ary3(2000);
+$t = end_test($t, "ary3(2000)");
+fibo(30);
+$t = end_test($t, "fibo(30)");
+hash(50000);
+$t = end_test($t, "hash(50000)");
+hash2(50);
+$t = end_test($t, "hash2(50)");
+heapsort(20000);
+$t = end_test($t, "heapsort(20000)");
+matrix(20);
+$t = end_test($t, "matrix(20)");
+nestedloop(12);
+$t = end_test($t, "nestedloop(12)");
+sieve(30);
+$t = end_test($t, "sieve(30)");
+strcat(200000);
+$t = end_test($t, "strcat(200000)");
+total($t0, "Total");
+?>