$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";