|
<?php
|
|
|
|
$times = 300000;
|
|
|
|
|
|
function testInt ($var) {
|
|
return !strcmp($var, intval($var));
|
|
}
|
|
function testIntVariantTrunk ($var) {
|
|
return (string)intval($var) == $var;
|
|
}
|
|
function testIntVariant1 ($var) {
|
|
if ($var === '') {
|
|
return FALSE;
|
|
}
|
|
return (string)intval($var) === (string)$var;
|
|
}
|
|
|
|
function testIntVariant2 ($var) {
|
|
if ($var === '') {
|
|
return FALSE;
|
|
}
|
|
return strval((int)$var) === (string)$var;
|
|
}
|
|
|
|
function testIntVariant3 ($var) {
|
|
if ($var === '') {
|
|
return FALSE;
|
|
}
|
|
return strval((int)$var) === strval($var);
|
|
}
|
|
|
|
function resultTest ($function, $a) {
|
|
return $function($a);
|
|
}
|
|
|
|
function timeTest ($function, $a) {
|
|
global $times;
|
|
$time_start = microtime(TRUE);
|
|
for ($i = 0; $i < $times; $i++) {
|
|
$function($a);
|
|
}
|
|
return (microtime(TRUE) - $time_start);
|
|
}
|
|
|
|
function showResult($result) {
|
|
if($result === FALSE) {
|
|
return "FALSE";
|
|
}
|
|
if($result === TRUE) {
|
|
return "TRUE ";
|
|
}
|
|
|
|
}
|
|
$testcases = array (
|
|
'int' => array(32425),
|
|
'negative int' => array(-32425),
|
|
'largest int' => array(PHP_INT_MAX),
|
|
'int as string' => array('32425'),
|
|
'negative int as string' => array('-32425'),
|
|
'zero' => array(0),
|
|
'zero as string' => array('0'),
|
|
'int as string with leading zero' => array('01234'),
|
|
'positive int as string with plus modifier' => array('+1234'),
|
|
'negative int as string with leading zero' => array('-01234'),
|
|
'largest int plus one' => array(PHP_INT_MAX + 1),
|
|
'string' => array('testInt'),
|
|
'empty string' => array(''),
|
|
'int in string' => array('5 times of testInt'),
|
|
'int as string with space after' => array('5 '),
|
|
'int as string with space before' => array(' 5'),
|
|
'int as string with many spaces before' => array(' 5'),
|
|
'float' => array(3.14159),
|
|
'float as string' => array('3.14159'),
|
|
'float as string only a dot' => array('10.'),
|
|
'float as string trailing zero would evaluate to int 10' => array('10.0'),
|
|
'float as string trailing zeros would evaluate to int 10' => array('10.00'),
|
|
'null' => array(NULL),
|
|
);
|
|
?>
|
|
<pre>
|
|
<?php
|
|
foreach ($testcases as $name => $parameters) {
|
|
echo "\n$name";
|
|
|
|
$baseTime = timeTest ('testInt', $parameters[0]);
|
|
$result = showResult(resultTest ('testInt', $parameters[0]));
|
|
echo "\noriginal $result : " . sprintf("%.3f", $baseTime);
|
|
|
|
$time = timeTest ('testIntVariantTrunk', $parameters[0]);
|
|
$result = showResult(resultTest ('testIntVariantTrunk', $parameters[0]));
|
|
echo "\nvariantTrunk $result : " . sprintf("%.3f", $time) . ' gain ' . number_format((($baseTime/$time)*100) - 100, 1) . ' %';
|
|
|
|
$time = timeTest ('testIntVariant1', $parameters[0]);
|
|
$result = showResult(resultTest ('testIntVariant1', $parameters[0]));
|
|
echo "\nvariant1 $result : " . sprintf("%.3f", $time) . ' gain ' . number_format((($baseTime/$time)*100) - 100, 1) . ' %';
|
|
|
|
$time = timeTest ('testIntVariant2', $parameters[0]);
|
|
$result = showResult(resultTest ('testIntVariant2', $parameters[0]));
|
|
echo "\nvariant2 $result : " . sprintf("%.3f", $time) . ' gain ' . number_format((($baseTime/$time)*100) - 100, 1) . ' %';
|
|
|
|
$time = timeTest ('testIntVariant3', $parameters[0]);
|
|
$result = showResult(resultTest ('testIntVariant3', $parameters[0]));
|
|
echo "\nvariant3 $result : " . sprintf("%.3f", $time) . ' gain ' . number_format((($baseTime/$time)*100) - 100, 1) . ' %';
|
|
|
|
|
|
echo "\n";
|
|
}
|
|
|
|
?>
|
|
|
|
</pre>
|