mirror of
https://github.com/php/php-src.git
synced 2026-04-26 09:28:21 +02:00
Fix the pow-test, it now succeeds on my machine
This commit is contained in:
@@ -126,7 +126,7 @@ FALSE ===@pow(LONG_MIN+1,1.0)
|
||||
(LONG_MAX-1)*(LONG_MAX-1) === pow(LONG_MAX-1,2.0)
|
||||
FALSE ===@pow(LONG_MIN+1,2.0)
|
||||
LONG_MAX === pow(LONG_MAX,1)
|
||||
LONG_MIN === pow(LONG_MIN,1)
|
||||
LONG_MIN ~== pow(LONG_MIN,1)
|
||||
LONG_MAX*LONG_MAX === pow(LONG_MAX,2)
|
||||
LONG_MIN*LONG_MIN === pow(LONG_MIN,2)
|
||||
(float)LONG_MAX === pow(LONG_MAX,1.0)
|
||||
|
||||
+57
-17
@@ -15,21 +15,61 @@ TESTS;
|
||||
Remember to NOT put a trailing ; after a line!
|
||||
|
||||
*/
|
||||
error_reporting(E_ALL);
|
||||
$tests = explode("\n",$tests);
|
||||
$success = TRUE;
|
||||
foreach ($tests as $test)
|
||||
{
|
||||
$res = eval("return ($test);");
|
||||
$success = $success && $res;
|
||||
if (!$res)
|
||||
{
|
||||
echo "\nAssert failed:\n";
|
||||
echo "$test\n";
|
||||
list($left,$right) = explode('===',$test);
|
||||
echo "Left: ";var_dump(eval("return ($left );"));
|
||||
echo "Right: ";var_dump(eval("return ($right);"));
|
||||
}
|
||||
}
|
||||
if ($success) echo "OK";
|
||||
error_reporting(E_ALL);
|
||||
$tests = explode("\n",$tests);
|
||||
$success = TRUE;
|
||||
foreach ($tests as $n=>$test)
|
||||
{
|
||||
// ignore empty lines
|
||||
if (!$test) continue;
|
||||
|
||||
// warn for trailing ;
|
||||
if (substr(trim($test), -1, 1) === ';') {
|
||||
echo "WARNING: trailing ';' found in test ".($n+1)."\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
// try for operators
|
||||
$operators = array('===', '~==');
|
||||
$operator = NULL;
|
||||
foreach ($operators as $a_operator) {
|
||||
if (strpos($test, $a_operator)!== FALSE) {
|
||||
$operator = $a_operator;
|
||||
list($left,$right) = explode($operator, $test);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$operator) {
|
||||
echo "WARNING: unknown operator in '$test' (1)\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
$left = eval("return ($left );");
|
||||
$right = eval("return ($right);");
|
||||
switch (@$operator) {
|
||||
case '===': // exact match
|
||||
$result = $left === $right;
|
||||
break;
|
||||
case '~==': // may differ after 12th significant number
|
||||
if ( !is_float($left ) && !is_int($left )
|
||||
|| !is_float($right) && !is_int($right)) {
|
||||
$result = FALSE;
|
||||
break;
|
||||
}
|
||||
$result = abs(($left-$right) / $left) < 1e-12;
|
||||
break;
|
||||
default:
|
||||
echo "WARNING: unknown operator in '$test' (2)\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
$success = $success && $result;
|
||||
if (!$result) {
|
||||
echo "\nAssert failed:\n";
|
||||
echo "$test\n";
|
||||
echo "Left: ";var_dump($left );
|
||||
echo "Right: ";var_dump($right);
|
||||
}
|
||||
}
|
||||
if ($success) echo "OK";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user