mirror of
https://github.com/php/php-src.git
synced 2024-12-18 06:21:41 +08:00
This is part 1 of the 'Saner Numeric Strings' RFC: https://wiki.php.net/rfc/saner-numeric-strings
93 lines
1.8 KiB
PHP
93 lines
1.8 KiB
PHP
--TEST--
|
|
String to number comparison
|
|
--FILE--
|
|
<?php
|
|
|
|
// This tests the examples from the RFC.
|
|
|
|
function format($val) {
|
|
if (is_float($val)) {
|
|
if (is_nan($val)) return "NAN";
|
|
if ($val == INF) return "INF";
|
|
if ($val == -INF) return "-INF";
|
|
}
|
|
return json_encode($val);
|
|
}
|
|
|
|
function compare_eq($val1, $val2) {
|
|
echo format($val1), " == ", format($val2), ": ", format($val1 == $val2), "\n";
|
|
}
|
|
|
|
function compare_3way($val1, $val2) {
|
|
echo format($val1), " <=> ", format($val2), ": ", format($val1 <=> $val2), "\n";
|
|
}
|
|
|
|
compare_eq(42, "000042");
|
|
compare_eq(42, "42.0");
|
|
compare_eq(42.0, "+42.0E0");
|
|
compare_eq(0, "0e214987142012");
|
|
echo "\n";
|
|
|
|
compare_eq("42", "000042");
|
|
compare_eq("42", "42.0");
|
|
compare_eq("42.0", "+42.0E0");
|
|
compare_eq("0", "0e214987142012");
|
|
echo "\n";
|
|
|
|
compare_eq(42, " 42");
|
|
compare_eq(42, "42 ");
|
|
compare_eq(42, "42abc");
|
|
compare_eq(42, "abc42");
|
|
compare_eq( 0, "abc42");
|
|
echo "\n";
|
|
|
|
compare_eq(INF, "INF");
|
|
compare_eq(-INF, "-INF");
|
|
compare_eq(NAN, "NAN");
|
|
compare_eq(INF, "1e1000");
|
|
compare_eq(-INF, "-1e1000");
|
|
echo "\n";
|
|
|
|
$float = 1.75;
|
|
|
|
echo "precision=14:\n";
|
|
ini_set('precision', 14);
|
|
compare_3way($float, "1.75abc");
|
|
compare_3way((string) $float, "1.75abc");
|
|
|
|
echo "precision=0:\n";
|
|
ini_set('precision', 0);
|
|
compare_3way($float, "1.75abc");
|
|
compare_3way((string) $float, "1.75abc");
|
|
|
|
?>
|
|
--EXPECT--
|
|
42 == "000042": true
|
|
42 == "42.0": true
|
|
42 == "+42.0E0": true
|
|
0 == "0e214987142012": true
|
|
|
|
"42" == "000042": true
|
|
"42" == "42.0": true
|
|
"42.0" == "+42.0E0": true
|
|
"0" == "0e214987142012": true
|
|
|
|
42 == " 42": true
|
|
42 == "42 ": true
|
|
42 == "42abc": false
|
|
42 == "abc42": false
|
|
0 == "abc42": false
|
|
|
|
INF == "INF": true
|
|
-INF == "-INF": true
|
|
NAN == "NAN": false
|
|
INF == "1e1000": true
|
|
-INF == "-1e1000": true
|
|
|
|
precision=14:
|
|
1.75 <=> "1.75abc": -1
|
|
"1.75" <=> "1.75abc": -1
|
|
precision=0:
|
|
1.75 <=> "1.75abc": 1
|
|
"2" <=> "1.75abc": 1
|