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