forked from php/php-src
-
Notifications
You must be signed in to change notification settings - Fork 2
/
quicktester.inc
75 lines (66 loc) · 1.65 KB
/
quicktester.inc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
/*
Helper for simple tests to check return-value. Usage:
$tests = <<<TESTS
expected_return_value === expression
2 === 1+1
4 === 2*2
FALSE === @ fopen('non_existent_file')
TESTS;
include( 'tests/quicktester.inc' );
Expect: OK
Remember to NOT put a trailing ; after a line!
*/
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";