quicktester.inc 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. /*
  3. Helper for simple tests to check return-value. Usage:
  4. $tests = <<<TESTS
  5. expected_return_value === expression
  6. 2 === 1+1
  7. 4 === 2*2
  8. FALSE === @ fopen('non_existent_file')
  9. TESTS;
  10. include( 'tests/quicktester.inc' );
  11. Expect: OK
  12. Remember to NOT put a trailing ; after a line!
  13. */
  14. error_reporting(E_ALL);
  15. $tests = explode("\n",$tests);
  16. $success = TRUE;
  17. foreach ($tests as $n=>$test)
  18. {
  19. // ignore empty lines
  20. if (!$test) continue;
  21. // warn for trailing ;
  22. if (substr(trim($test), -1, 1) === ';') {
  23. echo "WARNING: trailing ';' found in test ".($n+1)."\n";
  24. exit;
  25. }
  26. // try for operators
  27. $operators = array('===', '~==');
  28. $operator = NULL;
  29. foreach ($operators as $a_operator) {
  30. if (strpos($test, $a_operator)!== FALSE) {
  31. $operator = $a_operator;
  32. list($left,$right) = explode($operator, $test);
  33. break;
  34. }
  35. }
  36. if (!$operator) {
  37. echo "WARNING: unknown operator in '$test' (1)\n";
  38. exit;
  39. }
  40. $left = eval("return ($left );");
  41. $right = eval("return ($right);");
  42. switch (@$operator) {
  43. case '===': // exact match
  44. $result = $left === $right;
  45. break;
  46. case '~==': // may differ after 12th significant number
  47. if ( !is_float($left ) && !is_int($left )
  48. || !is_float($right) && !is_int($right)) {
  49. $result = FALSE;
  50. break;
  51. }
  52. $result = abs(($left-$right) / $left) < 1e-12;
  53. break;
  54. default:
  55. echo "WARNING: unknown operator in '$test' (2)\n";
  56. exit;
  57. }
  58. $success = $success && $result;
  59. if (!$result) {
  60. echo "\nAssert failed:\n";
  61. echo "$test\n";
  62. echo "Left: ";var_dump($left );
  63. echo "Right: ";var_dump($right);
  64. }
  65. }
  66. if ($success) echo "OK";