parseFloat.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. load("test-common.js");
  2. try {
  3. const NUMBER_TEST_CASES = [
  4. [0, 0],
  5. [1, 1],
  6. [.23, 0.23],
  7. [1.23, 1.23],
  8. [0.0123E+2, 1.23],
  9. [1.23e4, 12300],
  10. [Infinity, Infinity]
  11. ];
  12. NUMBER_TEST_CASES.forEach(test => {
  13. const value = test[0];
  14. const result = test[1];
  15. assert(parseFloat(value) === result);
  16. assert(parseFloat(+value) === result);
  17. assert(parseFloat(-value) === -result);
  18. });
  19. const STRING_TEST_CASES = [
  20. ["0", 0],
  21. ["1", 1],
  22. [".23", 0.23],
  23. ["1.23", 1.23],
  24. ["0.0123E+2", 1.23],
  25. ["1.23e4", 12300],
  26. ["Infinity", Infinity]
  27. ];
  28. STRING_TEST_CASES.forEach(test => {
  29. const value = test[0];
  30. const result = test[1];
  31. assert(parseFloat(value) === result);
  32. assert(parseFloat(`+${value}`) === result);
  33. assert(parseFloat(`-${value}`) === -result);
  34. assert(parseFloat(`${value}foo`) === result);
  35. assert(parseFloat(`+${value}foo`) === result);
  36. assert(parseFloat(`-${value}foo`) === -result);
  37. assert(parseFloat(` \n \t ${value} \v foo `) === result);
  38. assert(parseFloat(` \r -${value} \f \n\n foo `) === -result);
  39. assert(parseFloat({ toString: () => value }) === result);
  40. });
  41. const NAN_TEST_CASES = [
  42. "",
  43. [],
  44. [],
  45. true,
  46. false,
  47. null,
  48. undefined,
  49. NaN,
  50. "foo123",
  51. "foo+123",
  52. "fooInfinity",
  53. "foo+Infinity"
  54. ];
  55. assert(isNaN(parseFloat()));
  56. assert(isNaN(parseFloat("", 123, Infinity)));
  57. NAN_TEST_CASES.forEach(value => {
  58. assert(isNaN(parseFloat(value)));
  59. });
  60. console.log("PASS");
  61. } catch (e) {
  62. console.log("FAIL: " + e)
  63. }