to-number-basic.js 861 B

123456789101112131415161718192021222324252627282930313233
  1. function assert(x) { if (!x) throw 1; }
  2. // FIXME: Just "+x" doesn't parse currently,
  3. // so we use "x - 0", which is effectively the same.
  4. // "0 + x" would _not_ work in all cases.
  5. function n(x) { return x - 0; }
  6. try {
  7. assert(n(false) === 0);
  8. assert(n(true) === 1);
  9. assert(n(null) === 0);
  10. assert(n([]) === 0);
  11. assert(n([[[[[]]]]]) === 0);
  12. assert(n([[[[[42]]]]]) === 42);
  13. assert(n("") === 0);
  14. assert(n("42") === 42);
  15. assert(n(42) === 42);
  16. // FIXME: returns NaN
  17. // assert(n("1.23") === 1.23)
  18. // FIXME: chokes on ASSERT
  19. // assert(n(1.23) === 1.23);
  20. assert(isNaN(n(undefined)));
  21. assert(isNaN(n({})));
  22. assert(isNaN(n({a: 1})));
  23. assert(isNaN(n([1, 2, 3])));
  24. assert(isNaN(n([[[["foo"]]]])));
  25. assert(isNaN(n("foo")));
  26. console.log("PASS");
  27. } catch (e) {
  28. console.log("FAIL: " + e);
  29. }