basics.spec.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. 'use strict'
  2. const assert = require('assert')
  3. const tsame = require('tsame')
  4. const { it } = require('mocha')
  5. const bytes = require('../')
  6. const test = it
  7. const same = (x, y) => assert.ok(tsame(x, y))
  8. test('string conversion', done => {
  9. const ab = bytes('hello world')
  10. assert(ab instanceof DataView)
  11. const str = bytes.toString(ab)
  12. same(str, 'hello world')
  13. done()
  14. })
  15. test('compare', done => {
  16. const a = bytes('hello world')
  17. const b = bytes('hello world 2')
  18. assert(bytes.compare(a, a))
  19. assert(bytes.compare(a, 'hello world'))
  20. assert(!bytes.compare(a, b))
  21. assert(!bytes.compare(b, a))
  22. assert(!bytes.compare(a, '123'))
  23. assert(!bytes.compare('123', a))
  24. done()
  25. })
  26. test('double view', done => {
  27. const a = bytes('hello world')
  28. const b = bytes(a)
  29. same(a, b)
  30. done()
  31. })
  32. test('typed array', done => {
  33. const ab = bytes.random(4)
  34. const view = bytes(ab)
  35. const uint = bytes.typedArray(ab, Uint32Array)
  36. assert(uint instanceof Uint32Array)
  37. assert(bytes.compare(uint, view))
  38. done()
  39. })
  40. test('from array buffer', done => {
  41. const a = bytes('hello world')
  42. const b = bytes(bytes.memcopy(a))
  43. same(bytes.toString(a), bytes.toString(b))
  44. done()
  45. })
  46. test('to array buffer', done => {
  47. const a = bytes.arrayBuffer('hello world')
  48. const b = bytes('hello world')
  49. assert(a instanceof ArrayBuffer)
  50. assert(bytes.compare(a, b))
  51. assert(a, bytes.arrayBuffer(a))
  52. done()
  53. })
  54. test('Uint8Array', done => {
  55. const a = bytes('hello world')
  56. const b = bytes(new Uint8Array(bytes.memcopy(a)))
  57. same(bytes.toString(a), bytes.toString(b))
  58. done()
  59. })
  60. test('native', done => {
  61. let n = bytes.native('hello world')
  62. if (process.browser) {
  63. assert(n instanceof Uint8Array)
  64. n = bytes.native(n)
  65. assert(n instanceof Uint8Array)
  66. } else {
  67. assert(n instanceof Buffer)
  68. n = bytes.native(n)
  69. assert(n instanceof Buffer)
  70. }
  71. done()
  72. })
  73. test('slice', done => {
  74. const a = bytes.slice('hello world', 2, 7)
  75. assert(a instanceof DataView)
  76. const b = bytes.arrayBuffer('hello world').slice(2, 7)
  77. same(b, bytes.arrayBuffer(a))
  78. done()
  79. })
  80. test('slice memcopy', done => {
  81. const a = bytes.memcopySlice('hello world', 2, 7)
  82. assert(a instanceof ArrayBuffer)
  83. const b = bytes.arrayBuffer('hello world').slice(2, 7)
  84. same(b, a)
  85. const c = bytes.memcopySlice(a)
  86. assert(a !== c)
  87. same(a, c)
  88. done()
  89. })
  90. test('concat', done => {
  91. let values = [bytes('1'), bytes.native('2'), bytes.arrayBuffer('3')]
  92. let ab = bytes.concat(values)
  93. assert(ab instanceof ArrayBuffer)
  94. assert(bytes.compare(ab, '123'))
  95. values = [bytes('one')]
  96. ab = bytes.concat(values)
  97. assert(bytes.compare(ab, 'one'))
  98. done()
  99. })
  100. test('random above max entropy', done => {
  101. const maxEntropy = 65536
  102. const size = (maxEntropy * 3) + 8
  103. const rand = bytes.random(size)
  104. same(rand.byteLength, size)
  105. done()
  106. })