From a1c2b86701b140e1fcfe47bcbf6dd7cd0c593bec Mon Sep 17 00:00:00 2001 From: Jeroen van Wolffelaar Date: Fri, 5 Oct 2001 23:37:08 +0000 Subject: [PATCH] Fix the pow-test, it now succeeds on my machine --- ext/standard/tests/math/pow.phpt | 2 +- tests/quicktester.inc | 74 ++++++++++++++++++++++++-------- 2 files changed, 58 insertions(+), 18 deletions(-) diff --git a/ext/standard/tests/math/pow.phpt b/ext/standard/tests/math/pow.phpt index 150db4ad38..efaf500521 100644 --- a/ext/standard/tests/math/pow.phpt +++ b/ext/standard/tests/math/pow.phpt @@ -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) diff --git a/tests/quicktester.inc b/tests/quicktester.inc index 08e3c0a40f..0ca8bbab08 100644 --- a/tests/quicktester.inc +++ b/tests/quicktester.inc @@ -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"; -- 2.40.0