xref: /PHP-7.2/tests/quicktester.inc (revision 60a69dae)
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