int64.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. var assert = require('assert')
  2. var ref = require('../')
  3. describe('int64', function () {
  4. var JS_MAX_INT = +9007199254740992
  5. var JS_MIN_INT = -9007199254740992
  6. it('should allow simple ints to be written and read', function () {
  7. var buf = new Buffer(ref.sizeof.int64)
  8. var val = 123456789
  9. ref.writeInt64(buf, 0, val)
  10. var rtn = ref.readInt64(buf, 0)
  11. assert.equal(val, rtn)
  12. })
  13. it('should allow INT64_MAX to be written and read', function () {
  14. var buf = new Buffer(ref.sizeof.int64)
  15. var val = '9223372036854775807'
  16. ref.writeInt64(buf, 0, val)
  17. var rtn = ref.readInt64(buf, 0)
  18. assert.equal(val, rtn)
  19. })
  20. it('should allow a hex String to be input (signed)', function () {
  21. var buf = new Buffer(ref.sizeof.int64)
  22. var val = '-0x1234567890'
  23. ref.writeInt64(buf, 0, val)
  24. var rtn = ref.readInt64(buf, 0)
  25. assert.equal(parseInt(val, 16), rtn)
  26. })
  27. it('should allow an octal String to be input (signed)', function () {
  28. var buf = new Buffer(ref.sizeof.int64)
  29. var val = '-0777'
  30. ref.writeInt64(buf, 0, val)
  31. var rtn = ref.readInt64(buf, 0)
  32. assert.equal(parseInt(val, 8), rtn)
  33. })
  34. it('should allow a hex String to be input (unsigned)', function () {
  35. var buf = new Buffer(ref.sizeof.uint64)
  36. var val = '0x1234567890'
  37. ref.writeUInt64(buf, 0, val)
  38. var rtn = ref.readUInt64(buf, 0)
  39. assert.equal(parseInt(val, 16), rtn)
  40. })
  41. it('should allow an octal String to be input (unsigned)', function () {
  42. var buf = new Buffer(ref.sizeof.uint64)
  43. var val = '0777'
  44. ref.writeUInt64(buf, 0, val)
  45. var rtn = ref.readUInt64(buf, 0)
  46. assert.equal(parseInt(val, 8), rtn)
  47. })
  48. it('should return a Number when reading JS_MIN_INT', function () {
  49. var buf = new Buffer(ref.sizeof.int64)
  50. ref.writeInt64(buf, 0, JS_MIN_INT)
  51. var rtn = ref.readInt64(buf, 0)
  52. assert.equal('number', typeof rtn)
  53. assert.equal(JS_MIN_INT, rtn)
  54. })
  55. it('should return a Number when reading JS_MAX_INT', function () {
  56. var buf = new Buffer(ref.sizeof.int64)
  57. ref.writeInt64(buf, 0, JS_MAX_INT)
  58. var rtn = ref.readInt64(buf, 0)
  59. assert.equal('number', typeof rtn)
  60. assert.equal(JS_MAX_INT, rtn)
  61. })
  62. it('should return a String when reading JS_MAX_INT+1', function () {
  63. var buf = new Buffer(ref.sizeof.int64)
  64. var plus_one = '9007199254740993'
  65. ref.writeInt64(buf, 0, plus_one)
  66. var rtn = ref.readInt64(buf, 0)
  67. assert.equal('string', typeof rtn)
  68. assert.equal(plus_one, rtn)
  69. })
  70. it('should return a String when reading JS_MIN_INT-1', function () {
  71. var buf = new Buffer(ref.sizeof.int64)
  72. var minus_one = '-9007199254740993'
  73. ref.writeInt64(buf, 0, minus_one)
  74. var rtn = ref.readInt64(buf, 0)
  75. assert.equal('string', typeof rtn)
  76. assert.equal(minus_one, rtn)
  77. })
  78. it('should return a Number when reading 0, even when written as a String', function () {
  79. var buf = new Buffer(ref.sizeof.int64)
  80. var zero = '0'
  81. ref.writeInt64(buf, 0, zero)
  82. var rtn = ref.readInt64(buf, 0)
  83. assert.equal('number', typeof rtn)
  84. assert.equal(0, rtn)
  85. })
  86. it('should throw a "no digits" Error when writing an invalid String (signed)', function () {
  87. assert.throws(function () {
  88. var buf = new Buffer(ref.sizeof.int64)
  89. ref.writeInt64(buf, 0, 'foo')
  90. }, /no digits we found in input String/)
  91. })
  92. it('should throw a "no digits" Error when writing an invalid String (unsigned)', function () {
  93. assert.throws(function () {
  94. var buf = new Buffer(ref.sizeof.uint64)
  95. ref.writeUInt64(buf, 0, 'foo')
  96. }, /no digits we found in input String/)
  97. })
  98. it('should throw an "out of range" Error when writing an invalid String (signed)', function () {
  99. var e;
  100. try {
  101. var buf = new Buffer(ref.sizeof.int64)
  102. ref.writeInt64(buf, 0, '10000000000000000000000000')
  103. } catch (_e) {
  104. e = _e;
  105. }
  106. assert(/input String numerical value out of range/.test(e.message));
  107. })
  108. it('should throw an "out of range" Error when writing an invalid String (unsigned)', function () {
  109. var e;
  110. try {
  111. var buf = new Buffer(ref.sizeof.uint64)
  112. ref.writeUInt64(buf, 0, '10000000000000000000000000')
  113. } catch (_e) {
  114. e = _e;
  115. }
  116. assert(/input String numerical value out of range/.test(e.message));
  117. })
  118. it('should throw an Error when reading an int64_t from the NULL pointer', function () {
  119. assert.throws(function () {
  120. ref.readInt64(ref.NULL)
  121. })
  122. })
  123. it('should throw an Error when reading an uint64_t from the NULL pointer', function () {
  124. assert.throws(function () {
  125. ref.readUInt64(ref.NULL)
  126. })
  127. })
  128. ;['LE', 'BE'].forEach(function (endianness) {
  129. describe(endianness, function () {
  130. it('should read and write a signed ' + endianness + ' 64-bit integer', function () {
  131. var val = -123456789
  132. var buf = new Buffer(ref.sizeof.int64)
  133. ref['writeInt64' + endianness](buf, 0, val)
  134. assert.equal(val, ref['readInt64' + endianness](buf, 0))
  135. })
  136. it('should read and write an unsigned ' + endianness + ' 64-bit integer', function () {
  137. var val = 123456789
  138. var buf = new Buffer(ref.sizeof.uint64)
  139. ref['writeUInt64' + endianness](buf, 0, val)
  140. assert.equal(val, ref['readUInt64' + endianness](buf, 0))
  141. })
  142. })
  143. })
  144. })