PHP  
 PHP_HEAD
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

Test Failure Report for Zend/tests/runtime_compile_time_binary_operands.phpt ('Test binary operands exposing the same behavior at compile as at run time')

Script

1: <?php
2:
3: $operands 
= [
4:     
"==",
5:     
"!=",
6:     
"===",
7:     
"!==",
8:     
"<",
9:     
"<=",
10:     
">",
11:     
">=",
12:     
"<=>",
13:     
"+",
14:     
"-",
15:     
"*",
16:     
"/",
17:     
"%",
18:     
"**",
19:     
".",
20:     
"|",
21:     
"&",
22:     
"^",
23:     
"or",
24:     
"and",
25:     
"xor",
26:     
"||",
27:     
"&&",
28: ];
29:
30:
$input = [
31:     
0,
32:     
1,
33:     
2,
34:     -
1,
35:     
2.0,
36:     
2.1,
37:     -
2.0,
38:     -
2.1,
39:     
PHP_INT_MAX,
40:     
PHP_INT_MIN,
41:     
PHP_INT_MAX 2,
42:     
PHP_INT_MIN 2,
43:     
INF,
44:     
NAN,
45:     [],
46:     [
12],
47:     [
123],
48:     [
=> 2=> 1],
49:     [
1'a' => 2],
50:     [
14],
51:     [
1'a'],
52:     [
1=> 2],
53:     [
1, [ ]],
54:     
null,
55:     
false,
56:     
true,
57:     
"",
58:     
" ",
59:     
"banana",
60:     
"Banana",
61:     
"banan",
62:     
"0",
63:     
"200",
64:     
"20",
65:     
"20a",
66:     
" \t\n\r\v\f20",
67:     
"20  ",
68:     
"2e1",
69:     
"2e150",
70:     
"9179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368",
71:     
"-9179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368",
72:     
"0.1",
73:     
"-0.1",
74:     
"1e-1",
75:     
"-20",
76:     
"-20.0",
77:     
"0x14",
78:     (string) 
PHP_INT_MAX 2,
79:     (string) 
PHP_INT_MIN 2,
80: ];
81:
82: function 
makeParam($param) {
83:     if (
$param === PHP_INT_MIN) {
84:         return 
"PHP_INT_MIN";
85:     }
86:     if (
$param === PHP_INT_MAX) {
87:         return 
"PHP_INT_MAX";
88:     }
89:     if (
is_string($param)) {
90:         return 
'"' strtr($param, ["\t" => '\t'"\n" => '\n'"\r" => '\r'"\v" => '\v'"\f" => '\f''$' => '\$''"' => '\"']) . '"';
91:     }
92:     return 
"(" str_replace("\n"""var_export($paramtrue)) . ")";
93: }
94:
95:
$c 0;
96:
$f 0;
97:
98: function 
prepareLine($op1$op2$cmp$operator) {
99:     
100:     
$op1_p makeParam($op1);
101:     
$op2_p makeParam($op2);
102:
103:     
$error "echo '" addcslashes("$op1_p $operator $op2_p""\\'") . '\', "\n"; $f++;';
104:
105:     
$compare "@($op1_p $operator $op2_p)";
106:     
$line "\$c++; try { ";
107:     try {
108:         
$result makeParam($cmp());
109:         
$line .= "if (" . ($result === "(NAN)" "!is_nan($compare)" "$compare !== $result") . ") { $error } } catch (Error \$e) { $error }";
110:     } catch (
Error $e) {
111:         if (
get_class($e) == "Error") {
112:             return 
"// exempt $op1_p $operator $op2_p from checking, it generates a compile time error";
113:         }
114:         
$msg makeParam($e->getMessage());
115:         
$line .= "$compare$error } catch (Error \$e) { if (\$e->getMessage() !== $msg) { $error } }";
116:     }
117:     return 
$line;
118: }
119:
120:
$filename __DIR__ DIRECTORY_SEPARATOR 'compare_binary_operands_temp.php';
121:
$file fopen($filename"w");
122:
123:
fwrite($file"<?php\n");
124:
125: foreach (
$input as $left) {
126:     foreach (
$input as $right) {
127:         foreach (
$operands as $operand) {
128:             
fwrite($fileprepareLine($left$right, function() use ($left$right$operand) { return eval("return @(\$left $operand \$right);"); }, $operand) . "\n");
129:         }
130:     }
131: }
132:
133:
fclose($file);
134:
135: include 
$filename;
136:
137: if(
$c === 0) {
138:     echo 
"Completely failed\n";
139: } else {
140:     echo 
"Failed: $f\n";
141: }
142:
?>
143:
===DONE===
144:

Expected

Failed: 0
===DONE===

Output

** ERROR: process timed out **

Diff

001+ ** ERROR: process timed out **
001- Failed: 0
002- ===DONE===

 

Generated at Mon, 06 May 2019 17:58:35 +0000 (944 days ago)

Copyright © 2005-2021 The PHP Group
All rights reserved.