string_to_number_comparison.phpt 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. --TEST--
  2. String to number comparison
  3. --FILE--
  4. <?php
  5. // This tests the examples from the RFC.
  6. function format($val) {
  7. if (is_float($val)) {
  8. if (is_nan($val)) return "NAN";
  9. if ($val == INF) return "INF";
  10. if ($val == -INF) return "-INF";
  11. }
  12. return json_encode($val);
  13. }
  14. function compare_eq($val1, $val2) {
  15. echo format($val1), " == ", format($val2), ": ", format($val1 == $val2), "\n";
  16. }
  17. function compare_3way($val1, $val2) {
  18. echo format($val1), " <=> ", format($val2), ": ", format($val1 <=> $val2), "\n";
  19. }
  20. compare_eq(42, "000042");
  21. compare_eq(42, "42.0");
  22. compare_eq(42.0, "+42.0E0");
  23. compare_eq(0, "0e214987142012");
  24. echo "\n";
  25. compare_eq("42", "000042");
  26. compare_eq("42", "42.0");
  27. compare_eq("42.0", "+42.0E0");
  28. compare_eq("0", "0e214987142012");
  29. echo "\n";
  30. compare_eq(42, " 42");
  31. compare_eq(42, "42 ");
  32. compare_eq(42, "42abc");
  33. compare_eq(42, "abc42");
  34. compare_eq( 0, "abc42");
  35. echo "\n";
  36. compare_eq(INF, "INF");
  37. compare_eq(-INF, "-INF");
  38. compare_eq(NAN, "NAN");
  39. compare_eq(INF, "1e1000");
  40. compare_eq(-INF, "-1e1000");
  41. echo "\n";
  42. $float = 1.75;
  43. echo "precision=14:\n";
  44. ini_set('precision', 14);
  45. compare_3way($float, "1.75abc");
  46. compare_3way((string) $float, "1.75abc");
  47. echo "precision=0:\n";
  48. ini_set('precision', 0);
  49. compare_3way($float, "1.75abc");
  50. compare_3way((string) $float, "1.75abc");
  51. ?>
  52. --EXPECT--
  53. 42 == "000042": true
  54. 42 == "42.0": true
  55. 42 == "+42.0E0": true
  56. 0 == "0e214987142012": true
  57. "42" == "000042": true
  58. "42" == "42.0": true
  59. "42.0" == "+42.0E0": true
  60. "0" == "0e214987142012": true
  61. 42 == " 42": true
  62. 42 == "42 ": true
  63. 42 == "42abc": false
  64. 42 == "abc42": false
  65. 0 == "abc42": false
  66. INF == "INF": true
  67. -INF == "-INF": true
  68. NAN == "NAN": false
  69. INF == "1e1000": true
  70. -INF == "-1e1000": true
  71. precision=14:
  72. 1.75 <=> "1.75abc": -1
  73. "1.75" <=> "1.75abc": -1
  74. precision=0:
  75. 1.75 <=> "1.75abc": 1
  76. "2" <=> "1.75abc": 1