Skip to content

Commit 53f13be

Browse files
committed
Zend: Add new test for coercions from NAN
1 parent 84b78c0 commit 53f13be

File tree

2 files changed

+190
-0
lines changed

2 files changed

+190
-0
lines changed
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
--TEST--
2+
NAN coerced to other types
3+
--FILE--
4+
<?php
5+
6+
$binaryOperators = [
7+
"==",
8+
"!=",
9+
"===",
10+
"!==",
11+
"<",
12+
"<=",
13+
">",
14+
">=",
15+
"<=>",
16+
];
17+
$inputs = [
18+
0,
19+
null,
20+
false,
21+
true,
22+
"",
23+
[],
24+
NAN,
25+
];
26+
27+
$nan = fdiv(0, 0);
28+
var_dump($nan);
29+
foreach ($inputs as $right) {
30+
echo 'Using ';
31+
var_export($right);
32+
echo ' as right op', PHP_EOL;
33+
var_dump($nan == $right);
34+
var_dump($nan != $right);
35+
var_dump($nan === $right);
36+
var_dump($nan !== $right);
37+
var_dump($nan < $right);
38+
var_dump($nan <= $right);
39+
var_dump($nan > $right);
40+
var_dump($nan >= $right);
41+
var_dump($nan <=> $right);
42+
}
43+
44+
?>
45+
--CLEAN--
46+
<?php
47+
$fl = __DIR__ . DIRECTORY_SEPARATOR . 'compare_binary_operands_nan_temp.php';
48+
@unlink($fl);
49+
?>
50+
--EXPECT--
51+
float(NAN)
52+
Using 0 as right op
53+
bool(false)
54+
bool(true)
55+
bool(false)
56+
bool(true)
57+
bool(false)
58+
bool(false)
59+
bool(false)
60+
bool(false)
61+
int(1)
62+
Using NULL as right op
63+
bool(false)
64+
bool(true)
65+
bool(false)
66+
bool(true)
67+
bool(false)
68+
bool(false)
69+
bool(false)
70+
bool(false)
71+
int(1)
72+
Using false as right op
73+
bool(false)
74+
bool(true)
75+
bool(false)
76+
bool(true)
77+
bool(false)
78+
bool(false)
79+
bool(false)
80+
bool(false)
81+
int(1)
82+
Using true as right op
83+
bool(false)
84+
bool(true)
85+
bool(false)
86+
bool(true)
87+
bool(false)
88+
bool(false)
89+
bool(false)
90+
bool(false)
91+
int(1)
92+
Using '' as right op
93+
bool(false)
94+
bool(true)
95+
bool(false)
96+
bool(true)
97+
bool(false)
98+
bool(false)
99+
bool(false)
100+
bool(false)
101+
int(1)
102+
Using array (
103+
) as right op
104+
bool(false)
105+
bool(true)
106+
bool(false)
107+
bool(true)
108+
bool(false)
109+
bool(false)
110+
bool(false)
111+
bool(false)
112+
int(1)
113+
Using NAN as right op
114+
bool(false)
115+
bool(true)
116+
bool(false)
117+
bool(true)
118+
bool(false)
119+
bool(false)
120+
bool(false)
121+
bool(false)
122+
int(1)
123+
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
--TEST--
2+
NAN coerced to other types
3+
--FILE--
4+
<?php
5+
6+
$nan = fdiv(0, 0);
7+
var_dump($nan);
8+
9+
function implicit_to_bool(bool $v) {
10+
var_dump($v);
11+
}
12+
function implicit_to_string(string $v) {
13+
var_dump($v);
14+
}
15+
16+
implicit_to_bool($nan);
17+
implicit_to_string($nan);
18+
19+
var_dump((int) $nan);
20+
var_dump((bool) $nan);
21+
var_dump((string) $nan);
22+
var_dump((array) $nan);
23+
var_dump((object) $nan);
24+
25+
$types = [
26+
'null',
27+
'bool',
28+
'int',
29+
'string',
30+
'array',
31+
'object',
32+
];
33+
34+
foreach ($types as $type) {
35+
$nan = fdiv(0, 0);
36+
settype($nan, $type);
37+
var_dump($nan);
38+
}
39+
40+
?>
41+
--EXPECTF--
42+
float(NAN)
43+
bool(true)
44+
string(3) "NAN"
45+
int(0)
46+
bool(true)
47+
string(3) "NAN"
48+
array(1) {
49+
[0]=>
50+
float(NAN)
51+
}
52+
object(stdClass)#%d (1) {
53+
["scalar"]=>
54+
float(NAN)
55+
}
56+
NULL
57+
bool(true)
58+
int(0)
59+
string(3) "NAN"
60+
array(1) {
61+
[0]=>
62+
float(NAN)
63+
}
64+
object(stdClass)#%d (1) {
65+
["scalar"]=>
66+
float(NAN)
67+
}

0 commit comments

Comments
 (0)