cvs: php4 /ext/standard/tests/math pow.phpt /tests quicktester.inc

From: Date: Fri, 05 Oct 2001 23:37:08 +0000
Subject: cvs: php4 /ext/standard/tests/math pow.phpt /tests quicktester.inc
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-7691@lists.php.net to get a copy of this message
jeroen Fri Oct 5 19:37:08 2001 EDT Modified files: /php4/ext/standard/tests/math pow.phpt /php4/tests quicktester.inc Log: Fix the pow-test, it now succeeds on my machine Index: php4/ext/standard/tests/math/pow.phpt diff -u php4/ext/standard/tests/math/pow.phpt:1.3 php4/ext/standard/tests/math/pow.phpt:1.4 --- php4/ext/standard/tests/math/pow.phpt:1.3 Sun Aug 5 14:38:48 2001 +++ php4/ext/standard/tests/math/pow.phpt Fri Oct 5 19:37:08 2001 @@ -126,7 +126,7 @@ (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) Index: php4/tests/quicktester.inc diff -u php4/tests/quicktester.inc:1.1 php4/tests/quicktester.inc:1.2 --- php4/tests/quicktester.inc:1.1 Sun Aug 5 14:38:47 2001 +++ php4/tests/quicktester.inc Fri Oct 5 19:37:08 2001 @@ -15,21 +15,61 @@ 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";

« previous php.cvs (#7691) next »