]> granicus.if.org Git - php/commitdiff
Fix the pow-test, it now succeeds on my machine
authorJeroen van Wolffelaar <jeroen@php.net>
Fri, 5 Oct 2001 23:37:08 +0000 (23:37 +0000)
committerJeroen van Wolffelaar <jeroen@php.net>
Fri, 5 Oct 2001 23:37:08 +0000 (23:37 +0000)
ext/standard/tests/math/pow.phpt
tests/quicktester.inc

index 150db4ad38dcce7f633bed788d03b08b0e9adf9b..efaf500521b4e0516e0a6fcb569e6f91d4634b2a 100644 (file)
@@ -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)
index 08e3c0a40f05dc72e615013885bf3ab3208c90a6..0ca8bbab0835de7698fe94a3de20266a02354370 100644 (file)
@@ -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";