Son CV dans un terminal web en Javascript! https://terminal-cv.gregandev.fr
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
terminal-cv/node_modules/msgpackr/tests/test-node-iterators.js

72 lines
2.2 KiB

2 years ago
import { encodeIter, decodeIter } from '../index.js'
import { decode } from '../index.js'
import { assert } from 'chai'
const tests = [
null,
false,
true,
'interesting string',
12345,
123456789n,
123.456,
Buffer.from('Hello World'),
'abcdefghijklmnopqrstuvwxyz'.split('')
]
suite('msgpackr iterators interface tests', function () {
test('sync encode iterator', () => {
const encodings = [...encodeIter(tests)]
const decodings = encodings.map(x => decode(x))
assert.deepStrictEqual(decodings, tests)
})
test('async encode iterator', async () => {
async function * generate () {
for (const test of tests) {
await new Promise((resolve, reject) => setImmediate(resolve))
yield test
}
}
const chunks = []
for await (const chunk of encodeIter(generate())) {
chunks.push(chunk)
}
const decodings = chunks.map(x => decode(x))
assert.deepStrictEqual(decodings, tests)
})
test('sync encode and decode iterator', () => {
const encodings = [...encodeIter(tests)]
assert.isTrue(encodings.every(v => Buffer.isBuffer(v)))
const decodings = [...decodeIter(encodings)]
assert.deepStrictEqual(decodings, tests)
// also test decodings work with buffers multiple values in a buffer
const concatEncoding = Buffer.concat([...encodings])
const decodings2 = [...decodeIter([concatEncoding])]
assert.deepStrictEqual(decodings2, tests)
// also test decodings work with partial buffers that don't align to values perfectly
const half1 = concatEncoding.slice(0, Math.floor(concatEncoding.length / 2))
const half2 = concatEncoding.slice(Math.floor(concatEncoding.length / 2))
const decodings3 = [...decodeIter([half1, half2])]
assert.deepStrictEqual(decodings3, tests)
})
test('async encode and decode iterator', async () => {
async function * generator () {
for (const obj of tests) {
await new Promise((resolve, reject) => setImmediate(resolve))
yield obj
}
}
const yields = []
for await (const value of decodeIter(encodeIter(generator()))) {
yields.push(value)
}
assert.deepStrictEqual(yields, tests)
})
})