/test/numbers.coffee

http://github.com/jashkenas/coffee-script · CoffeeScript · 88 lines · 51 code · 21 blank · 16 comment · 1 complexity · 3a0225f3ae2e18ab8a122d54ddc7590c MD5 · raw file

  1. # Number Literals
  2. # ---------------
  3. # * Decimal Integer Literals
  4. # * Octal Integer Literals
  5. # * Hexadecimal Integer Literals
  6. # * Scientific Notation Integer Literals
  7. # * Scientific Notation Non-Integer Literals
  8. # * Non-Integer Literals
  9. # * Binary Integer Literals
  10. # Binary Integer Literals
  11. # Binary notation is understood as would be decimal notation.
  12. test "Parser recognises binary numbers", ->
  13. eq 4, 0b100
  14. # Decimal Integer Literals
  15. test "call methods directly on numbers", ->
  16. eq 4, 4.valueOf()
  17. eq '11', 4.toString 3
  18. eq -1, 3 -4
  19. #764: Numbers should be indexable
  20. eq Number::toString, 42['toString']
  21. eq Number::toString, 42.toString
  22. eq Number::toString, 2e308['toString'] # Infinity
  23. # Non-Integer Literals
  24. # Decimal number literals.
  25. value = .25 + .75
  26. ok value is 1
  27. value = 0.0 + -.25 - -.75 + 0.0
  28. ok value is 0.5
  29. #764: Numbers should be indexable
  30. eq Number::toString, 4['toString']
  31. eq Number::toString, 4.2['toString']
  32. eq Number::toString, .42['toString']
  33. eq Number::toString, (4)['toString']
  34. eq Number::toString, 4.toString
  35. eq Number::toString, 4.2.toString
  36. eq Number::toString, .42.toString
  37. eq Number::toString, (4).toString
  38. test '#1168: leading floating point suppresses newline', ->
  39. eq 1, do ->
  40. 1
  41. .5 + 0.5
  42. test "Python-style octal literal notation '0o777'", ->
  43. eq 511, 0o777
  44. eq 1, 0o1
  45. eq 1, 0o00001
  46. eq parseInt('0777', 8), 0o777
  47. eq '777', 0o777.toString 8
  48. eq 4, 0o4.valueOf()
  49. eq Number::toString, 0o777['toString']
  50. eq Number::toString, 0o777.toString
  51. test "#2060: Disallow uppercase radix prefixes and exponential notation", ->
  52. for char in ['b', 'o', 'x', 'e']
  53. program = "0#{char}0"
  54. doesNotThrowCompileError program, bare: yes
  55. throwsCompileError program.toUpperCase(), bare: yes
  56. test "#2224: hex literals with 0b or B or E", ->
  57. eq 176, 0x0b0
  58. eq 177, 0x0B1
  59. eq 225, 0xE1
  60. test "Infinity", ->
  61. eq Infinity, CoffeeScript.eval "0b#{Array(1024 + 1).join('1')}"
  62. eq Infinity, CoffeeScript.eval "0o#{Array(342 + 1).join('7')}"
  63. eq Infinity, CoffeeScript.eval "0x#{Array(256 + 1).join('f')}"
  64. eq Infinity, CoffeeScript.eval Array(500 + 1).join('9')
  65. eq Infinity, 2e308
  66. test "NaN", ->
  67. ok isNaN 1/NaN