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.
641 lines
19 KiB
641 lines
19 KiB
2 years ago
|
import * as msgpackr from '../index.js'
|
||
|
import chai from 'chai'
|
||
|
//import inspector from 'inspector'; inspector.open(9330, null, true); debugger
|
||
|
import sampleData from './example4.json'
|
||
|
function tryRequire(module) {
|
||
|
try {
|
||
|
return require(module)
|
||
|
} catch(error) {
|
||
|
return {}
|
||
|
}
|
||
|
}
|
||
|
//if (typeof chai === 'undefined') { chai = require('chai') }
|
||
|
var assert = chai.assert
|
||
|
//if (typeof msgpackr === 'undefined') { msgpackr = require('..') }
|
||
|
var Packr = msgpackr.Packr
|
||
|
var unpack = msgpackr.unpack
|
||
|
var unpackMultiple = msgpackr.unpackMultiple
|
||
|
var roundFloat32 = msgpackr.roundFloat32
|
||
|
var pack = msgpackr.pack
|
||
|
var DECIMAL_FIT = msgpackr.FLOAT32_OPTIONS.DECIMAL_FIT
|
||
|
|
||
|
var addExtension = msgpackr.addExtension
|
||
|
var zlib = tryRequire('zlib')
|
||
|
var deflateSync = zlib.deflateSync
|
||
|
var inflateSync = zlib.inflateSync
|
||
|
var deflateSync = zlib.brotliCompressSync
|
||
|
var inflateSync = zlib.brotliDecompressSync
|
||
|
var constants = zlib.constants
|
||
|
try {
|
||
|
// var { decode, encode } = require('msgpack-lite')
|
||
|
} catch (error) {}
|
||
|
|
||
|
var ITERATIONS = 4000
|
||
|
|
||
|
suite('msgpackr basic tests', function(){
|
||
|
test('pack/unpack data', function(){
|
||
|
var data = {
|
||
|
data: [
|
||
|
{ a: 1, name: 'one', type: 'odd', isOdd: true },
|
||
|
{ a: 2, name: 'two', type: 'even'},
|
||
|
{ a: 3, name: 'three', type: 'odd', isOdd: true },
|
||
|
{ a: 4, name: 'four', type: 'even'},
|
||
|
{ a: 5, name: 'five', type: 'odd', isOdd: true },
|
||
|
{ a: 6, name: 'six', type: 'even', isOdd: null }
|
||
|
],
|
||
|
description: 'some names',
|
||
|
types: ['odd', 'even'],
|
||
|
convertEnumToNum: [
|
||
|
{ prop: 'test' },
|
||
|
{ prop: 'test' },
|
||
|
{ prop: 'test' },
|
||
|
{ prop: 1 },
|
||
|
{ prop: 2 },
|
||
|
{ prop: [undefined] },
|
||
|
{ prop: null }
|
||
|
]
|
||
|
}
|
||
|
let structures = []
|
||
|
let packr = new Packr({ structures })
|
||
|
var serialized = packr.pack(data)
|
||
|
var deserialized = packr.unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
})
|
||
|
|
||
|
test('mixed array', function(){
|
||
|
var data = [
|
||
|
'one',
|
||
|
'two',
|
||
|
'one',
|
||
|
10,
|
||
|
11,
|
||
|
null,
|
||
|
true,
|
||
|
'three',
|
||
|
'three',
|
||
|
'one', [
|
||
|
3, -5, -50, -400,1.3, -5.3, true
|
||
|
]
|
||
|
]
|
||
|
let structures = []
|
||
|
let packr = new Packr({ structures })
|
||
|
var serialized = packr.pack(data)
|
||
|
var deserialized = packr.unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
})
|
||
|
|
||
|
test('255 chars', function() {
|
||
|
const data = 'RRZG9A6I7xupPeOZhxcOcioFsuhszGOdyDUcbRf4Zef2kdPIfC9RaLO4jTM5JhuZvTsF09fbRHMGtqk7YAgu3vespeTe9l61ziZ6VrMnYu2CamK96wCkmz0VUXyqaiUoTPgzk414LS9yYrd5uh7w18ksJF5SlC2e91rukWvNqAZJjYN3jpkqHNOFchCwFrhbxq2Lrv1kSJPYCx9blRg2hGmYqTbElLTZHv20iNqwZeQbRMgSBPT6vnbCBPnOh1W'
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.equal(deserialized, data)
|
||
|
})
|
||
|
|
||
|
test('pack/unpack sample data', function(){
|
||
|
var data = sampleData
|
||
|
let structures = []
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
})
|
||
|
test('pack/unpack sample data with records', function(){
|
||
|
var data = sampleData
|
||
|
let structures = []
|
||
|
let packr = new Packr({ structures, useRecords: true })
|
||
|
var serialized = packr.pack(data)
|
||
|
var deserialized = packr.unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
})
|
||
|
if (typeof Buffer != 'undefined')
|
||
|
test('replace data', function(){
|
||
|
var data1 = {
|
||
|
data: [
|
||
|
{ a: 1, name: 'one', type: 'odd', isOdd: true, a: '13 characters' },
|
||
|
{ a: 2, name: 'two', type: 'even', a: '11 characte' },
|
||
|
{ a: 3, name: 'three', type: 'odd', isOdd: true, a: '12 character' },
|
||
|
{ a: 4, name: 'four', type: 'even', a: '9 charact'},
|
||
|
{ a: 5, name: 'five', type: 'odd', isOdd: true, a: '14 characters!' },
|
||
|
{ a: 6, name: 'six', type: 'even', isOdd: null }
|
||
|
],
|
||
|
}
|
||
|
var data2 = {
|
||
|
data: [
|
||
|
{ foo: 7, name: 'one', type: 'odd', isOdd: true },
|
||
|
{ foo: 8, name: 'two', type: 'even'},
|
||
|
{ foo: 9, name: 'three', type: 'odd', isOdd: true },
|
||
|
{ foo: 10, name: 'four', type: 'even'},
|
||
|
{ foo: 11, name: 'five', type: 'odd', isOdd: true },
|
||
|
{ foo: 12, name: 'six', type: 'even', isOdd: null }
|
||
|
],
|
||
|
}
|
||
|
var serialized1 = pack(data1)
|
||
|
var serialized2 = pack(data2)
|
||
|
var b = Buffer.alloc(8000)
|
||
|
serialized1.copy(b)
|
||
|
var deserialized1 = unpack(b, serialized1.length)
|
||
|
serialized2.copy(b)
|
||
|
var deserialized2 = unpack(b, serialized2.length)
|
||
|
assert.deepEqual(deserialized1, data1)
|
||
|
assert.deepEqual(deserialized2, data2)
|
||
|
})
|
||
|
|
||
|
test('extended class pack/unpack', function(){
|
||
|
function Extended() {
|
||
|
|
||
|
}
|
||
|
Extended.prototype.getDouble = function() {
|
||
|
return this.value * 2
|
||
|
}
|
||
|
var instance = new Extended()
|
||
|
instance.value = 4
|
||
|
instance.string = 'decode this: ᾜ'
|
||
|
var data = {
|
||
|
prop1: 'has multi-byte: ᾜ',
|
||
|
extendedInstance: instance,
|
||
|
prop2: 'more string',
|
||
|
num: 3,
|
||
|
}
|
||
|
let packr = new Packr()
|
||
|
addExtension({
|
||
|
Class: Extended,
|
||
|
type: 11,
|
||
|
unpack: function(buffer) {
|
||
|
let e = new Extended()
|
||
|
let data = packr.unpack(buffer)
|
||
|
e.value = data[0]
|
||
|
e.string = data[1]
|
||
|
return e
|
||
|
},
|
||
|
pack: function(instance) {
|
||
|
return packr.pack([instance.value, instance.string])
|
||
|
}
|
||
|
})
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(data, deserialized)
|
||
|
assert.equal(deserialized.extendedInstance.getDouble(), 8)
|
||
|
})
|
||
|
test('extended class pack/unpack custom size', function(){
|
||
|
function TestClass() {
|
||
|
|
||
|
}
|
||
|
addExtension({
|
||
|
Class: TestClass,
|
||
|
type: 0x01,
|
||
|
pack() {
|
||
|
return typeof Buffer != 'undefined' ? Buffer.alloc(256) : new Uint8Array(256)
|
||
|
},
|
||
|
unpack(data) {
|
||
|
return data.length
|
||
|
}
|
||
|
});
|
||
|
let result = unpack(pack(new TestClass()));
|
||
|
assert.equal(result, 256)
|
||
|
})
|
||
|
|
||
|
test('extended class read/write', function(){
|
||
|
function Extended() {
|
||
|
|
||
|
}
|
||
|
Extended.prototype.getDouble = function() {
|
||
|
return this.value * 2
|
||
|
}
|
||
|
var instance = new Extended()
|
||
|
instance.value = 4
|
||
|
instance.string = 'decode this: ᾜ'
|
||
|
var data = {
|
||
|
prop1: 'has multi-byte: ᾜ',
|
||
|
extendedInstance: instance,
|
||
|
prop2: 'more string',
|
||
|
num: 3,
|
||
|
}
|
||
|
let packr = new Packr()
|
||
|
addExtension({
|
||
|
Class: Extended,
|
||
|
type: 12,
|
||
|
read: function(data) {
|
||
|
let e = new Extended()
|
||
|
e.value = data[0]
|
||
|
e.string = data[1]
|
||
|
return e
|
||
|
},
|
||
|
write: function(instance) {
|
||
|
return [instance.value, instance.string]
|
||
|
}
|
||
|
})
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(data, deserialized)
|
||
|
assert.equal(deserialized.extendedInstance.getDouble(), 8)
|
||
|
})
|
||
|
|
||
|
test.skip('text decoder', function() {
|
||
|
let td = new TextDecoder('ISO-8859-15')
|
||
|
let b = Buffer.alloc(3)
|
||
|
let total = 0
|
||
|
for (var i = 0; i < 256; i++) {
|
||
|
b[0] = i
|
||
|
b[1] = 0
|
||
|
b[2] = 0
|
||
|
let s = td.decode(b)
|
||
|
if (!require('msgpackr-extract').isOneByte(s)) {
|
||
|
console.log(i.toString(16), s.length)
|
||
|
total++
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
|
||
|
test('structured cloning: self reference', function() {
|
||
|
let object = {
|
||
|
test: 'string',
|
||
|
children: [
|
||
|
{ name: 'child' }
|
||
|
]
|
||
|
}
|
||
|
object.self = object
|
||
|
object.children[1] = object
|
||
|
object.children[2] = object.children[0]
|
||
|
object.childrenAgain = object.children
|
||
|
let packr = new Packr({
|
||
|
structuredClone: true,
|
||
|
})
|
||
|
var serialized = packr.pack(object)
|
||
|
var deserialized = packr.unpack(serialized)
|
||
|
assert.equal(deserialized.self, deserialized)
|
||
|
assert.equal(deserialized.children[0].name, 'child')
|
||
|
assert.equal(deserialized.children[1], deserialized)
|
||
|
assert.equal(deserialized.children[0], deserialized.children[2])
|
||
|
assert.equal(deserialized.children, deserialized.childrenAgain)
|
||
|
})
|
||
|
|
||
|
test('structured cloning: types', function() {
|
||
|
let b = typeof Buffer != 'undefined' ? Buffer.alloc(20) : new Uint8Array(20)
|
||
|
let fa = new Float32Array(b.buffer, 8, 2)
|
||
|
fa[0] = 2.25
|
||
|
fa[1] = 6
|
||
|
let object = {
|
||
|
error: new Error('test'),
|
||
|
set: new Set(['a', 'b']),
|
||
|
regexp: /test/gi,
|
||
|
float32Array: fa,
|
||
|
uint16Array: new Uint16Array([3,4])
|
||
|
}
|
||
|
let packr = new Packr({
|
||
|
structuredClone: true,
|
||
|
})
|
||
|
var serialized = packr.pack(object)
|
||
|
var deserialized = packr.unpack(serialized)
|
||
|
assert.deepEqual(Array.from(deserialized.set), Array.from(object.set))
|
||
|
assert.equal(deserialized.error.message, object.error.message)
|
||
|
assert.equal(deserialized.regexp.test('TEST'), true)
|
||
|
assert.equal(deserialized.float32Array.constructor.name, 'Float32Array')
|
||
|
assert.equal(deserialized.float32Array[0], 2.25)
|
||
|
assert.equal(deserialized.float32Array[1], 6)
|
||
|
assert.equal(deserialized.uint16Array.constructor.name, 'Uint16Array')
|
||
|
assert.equal(deserialized.uint16Array[0], 3)
|
||
|
assert.equal(deserialized.uint16Array[1], 4)
|
||
|
})
|
||
|
|
||
|
test('object without prototype', function(){
|
||
|
var data = Object.create(null)
|
||
|
data.test = 3
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
})
|
||
|
|
||
|
test('many shared structures', function() {
|
||
|
let data = []
|
||
|
for (let i = 0; i < 200; i++) {
|
||
|
data.push({['a' + i]: i})
|
||
|
}
|
||
|
let structures = []
|
||
|
let savedStructures
|
||
|
let packr = new Packr({
|
||
|
structures,
|
||
|
saveStructures(structures) {
|
||
|
savedStructures = structures
|
||
|
}
|
||
|
})
|
||
|
var serializedWith32 = packr.pack(data)
|
||
|
assert.equal(savedStructures.length, 32)
|
||
|
var deserialized = packr.unpack(serializedWith32)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
structures = structures.slice(0, 32)
|
||
|
packr = new Packr({
|
||
|
structures,
|
||
|
maxSharedStructures: 100,
|
||
|
saveStructures(structures) {
|
||
|
savedStructures = structures
|
||
|
}
|
||
|
})
|
||
|
deserialized = packr.unpack(serializedWith32)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
structures = structures.slice(0, 32)
|
||
|
packr = new Packr({
|
||
|
structures,
|
||
|
maxSharedStructures: 100,
|
||
|
saveStructures(structures) {
|
||
|
savedStructures = structures
|
||
|
}
|
||
|
})
|
||
|
let serialized = packr.pack(data)
|
||
|
assert.equal(savedStructures.length, 100)
|
||
|
deserialized = packr.unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
|
||
|
deserialized = packr.unpack(serializedWith32)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
assert.equal(savedStructures.length, 100)
|
||
|
|
||
|
deserialized = packr.unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
assert.equal(packr.structures.sharedLength, 100)
|
||
|
})
|
||
|
test('more shared structures', function() {
|
||
|
const structures = []
|
||
|
for (let i = 0; i < 40; i++) {
|
||
|
structures.push(['a' + i])
|
||
|
}
|
||
|
const structures2 = [...structures]
|
||
|
const packr = new Packr({
|
||
|
getStructures() {
|
||
|
return structures
|
||
|
},
|
||
|
saveStructures(structures) {
|
||
|
},
|
||
|
maxSharedStructures: 100
|
||
|
})
|
||
|
const packr2 = new Packr({
|
||
|
getStructures() {
|
||
|
return structures2
|
||
|
},
|
||
|
saveStructures(structures) {
|
||
|
},
|
||
|
maxSharedStructures: 100
|
||
|
})
|
||
|
const inputData = {a35: 35}
|
||
|
const buffer = packr.pack(inputData)
|
||
|
const outputData = packr2.decode(buffer)
|
||
|
assert.deepEqual(inputData, outputData)
|
||
|
})
|
||
|
|
||
|
test('big buffer', function() {
|
||
|
var size = 100000000
|
||
|
var data = new Uint8Array(size).fill(1)
|
||
|
var packed = pack(data)
|
||
|
var unpacked = unpack(packed)
|
||
|
assert.equal(unpacked.length, size)
|
||
|
})
|
||
|
|
||
|
test('random strings', function(){
|
||
|
var data = []
|
||
|
for (var i = 0; i < 2000; i++) {
|
||
|
var str = 'test'
|
||
|
while (Math.random() < 0.7 && str.length < 0x100000) {
|
||
|
str = str + String.fromCharCode(90/(Math.random() + 0.01)) + str
|
||
|
}
|
||
|
data.push(str)
|
||
|
}
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
})
|
||
|
|
||
|
test('map/date', function(){
|
||
|
var map = new Map()
|
||
|
map.set(4, 'four')
|
||
|
map.set('three', 3)
|
||
|
|
||
|
|
||
|
var data = {
|
||
|
map: map,
|
||
|
date: new Date(1532219539733),
|
||
|
farFutureDate: new Date(3532219539133),
|
||
|
ancient: new Date(-3532219539133),
|
||
|
}
|
||
|
let packr = new Packr()
|
||
|
var serialized = packr.pack(data)
|
||
|
var deserialized = packr.unpack(serialized)
|
||
|
assert.equal(deserialized.map.get(4), 'four')
|
||
|
assert.equal(deserialized.map.get('three'), 3)
|
||
|
assert.equal(deserialized.date.getTime(), 1532219539733)
|
||
|
assert.equal(deserialized.farFutureDate.getTime(), 3532219539133)
|
||
|
assert.equal(deserialized.ancient.getTime(), -3532219539133)
|
||
|
})
|
||
|
test('map/date with options', function(){
|
||
|
var map = new Map()
|
||
|
map.set(4, 'four')
|
||
|
map.set('three', 3)
|
||
|
|
||
|
|
||
|
var data = {
|
||
|
map: map,
|
||
|
date: new Date(1532219539011),
|
||
|
}
|
||
|
let packr = new Packr({
|
||
|
mapsAsObjects: true,
|
||
|
useTimestamp32: true,
|
||
|
})
|
||
|
var serialized = packr.pack(data)
|
||
|
var deserialized = packr.unpack(serialized)
|
||
|
assert.equal(deserialized.map[4], 'four')
|
||
|
assert.equal(deserialized.map.three, 3)
|
||
|
assert.equal(deserialized.date.getTime(), 1532219539000)
|
||
|
})
|
||
|
test('key caching', function() {
|
||
|
var data = {
|
||
|
foo: 2,
|
||
|
bar: 'test',
|
||
|
four: 4,
|
||
|
seven: 7,
|
||
|
foz: 3,
|
||
|
}
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
// do multiple times to test caching
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
})
|
||
|
test('strings', function() {
|
||
|
var data = ['']
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
// do multiple times
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
data = 'decode this: ᾜ'
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
data = 'decode this that is longer but without any non-latin characters'
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
})
|
||
|
test('decimal float32', function() {
|
||
|
var data = {
|
||
|
a: 2.526,
|
||
|
b: 0.0035235,
|
||
|
c: 0.00000000000352501,
|
||
|
d: 3252.77,
|
||
|
}
|
||
|
let packr = new Packr({
|
||
|
useFloat32: DECIMAL_FIT
|
||
|
})
|
||
|
var serialized = packr.pack(data)
|
||
|
assert.equal(serialized.length, 32)
|
||
|
var deserialized = packr.unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
})
|
||
|
|
||
|
test('numbers', function(){
|
||
|
var data = {
|
||
|
bigEncodable: 48978578104322,
|
||
|
dateEpoch: 1530886513200,
|
||
|
realBig: 3432235352353255323,
|
||
|
decimal: 32.55234,
|
||
|
negative: -34.11,
|
||
|
exponential: 0.234e123,
|
||
|
tiny: 3.233e-120,
|
||
|
zero: 0,
|
||
|
//negativeZero: -0,
|
||
|
Infinity: Infinity
|
||
|
}
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
})
|
||
|
test('bigint', function(){
|
||
|
var data = {
|
||
|
bigintSmall: 352n,
|
||
|
bigintSmallNegative: -333335252n,
|
||
|
bigintBig: 2n**64n - 1n, // biggest possible
|
||
|
bigintBigNegative: -(2n**63n), // largest negative
|
||
|
mixedWithNormal: 44,
|
||
|
}
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
var tooBigInt = {
|
||
|
tooBig: 2n**66n
|
||
|
}
|
||
|
assert.throws(function(){ serialized = pack(tooBigInt) })
|
||
|
let packr = new Packr({
|
||
|
largeBigIntToFloat: true
|
||
|
})
|
||
|
serialized = packr.pack(tooBigInt)
|
||
|
deserialized = unpack(serialized)
|
||
|
assert.isTrue(deserialized.tooBig > 2n**65n)
|
||
|
})
|
||
|
|
||
|
test('roundFloat32', function() {
|
||
|
assert.equal(roundFloat32(0.00333000003), 0.00333)
|
||
|
assert.equal(roundFloat32(43.29999999993), 43.3)
|
||
|
})
|
||
|
|
||
|
test('buffers', function(){
|
||
|
var data = {
|
||
|
buffer1: new Uint8Array([2,3,4]),
|
||
|
buffer2: new Uint8Array(pack(sampleData))
|
||
|
}
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
})
|
||
|
|
||
|
test('notepack test', function() {
|
||
|
const data = {
|
||
|
foo: 1,
|
||
|
bar: [1, 2, 3, 4, 'abc', 'def'],
|
||
|
foobar: {
|
||
|
foo: true,
|
||
|
bar: -2147483649,
|
||
|
foobar: {
|
||
|
foo: new Uint8Array([1, 2, 3, 4, 5]),
|
||
|
bar: 1.5,
|
||
|
foobar: [true, false, 'abcdefghijkmonpqrstuvwxyz']
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
var deserialized = unpack(serialized)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
})
|
||
|
|
||
|
test('utf16 causing expansion', function() {
|
||
|
this.timeout(10000)
|
||
|
let data = {fixstr: 'ᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝ', str8:'ᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝ'}
|
||
|
var serialized = pack(data)
|
||
|
var deserialized = unpack(serialized)
|
||
|
assert.deepEqual(deserialized, data)
|
||
|
})
|
||
|
test('unpackMultiple', () => {
|
||
|
let values = unpackMultiple(new Uint8Array([1, 2, 3, 4]))
|
||
|
assert.deepEqual(values, [1, 2, 3, 4])
|
||
|
values = []
|
||
|
unpackMultiple(new Uint8Array([1, 2, 3, 4]), value => values.push(value))
|
||
|
assert.deepEqual(values, [1, 2, 3, 4])
|
||
|
})
|
||
|
|
||
|
})
|
||
|
suite('msgpackr performance tests', function(){
|
||
|
test('performance JSON.parse', function() {
|
||
|
var data = sampleData
|
||
|
this.timeout(10000)
|
||
|
let structures = []
|
||
|
var serialized = JSON.stringify(data)
|
||
|
console.log('JSON size', serialized.length)
|
||
|
for (var i = 0; i < ITERATIONS; i++) {
|
||
|
var deserialized = JSON.parse(serialized)
|
||
|
}
|
||
|
})
|
||
|
test('performance JSON.stringify', function() {
|
||
|
var data = sampleData
|
||
|
this.timeout(10000)
|
||
|
for (var i = 0; i < ITERATIONS; i++) {
|
||
|
var serialized = JSON.stringify(data)
|
||
|
}
|
||
|
})
|
||
|
test('performance unpack', function() {
|
||
|
var data = sampleData
|
||
|
this.timeout(10000)
|
||
|
let structures = []
|
||
|
var serialized = pack(data)
|
||
|
console.log('MessagePack size', serialized.length)
|
||
|
let packr = new Packr({ structures })
|
||
|
var serialized = packr.pack(data)
|
||
|
console.log('msgpackr w/ record ext size', serialized.length)
|
||
|
for (var i = 0; i < ITERATIONS; i++) {
|
||
|
var deserialized = packr.unpack(serialized)
|
||
|
}
|
||
|
})
|
||
|
test('performance pack', function() {
|
||
|
var data = sampleData
|
||
|
this.timeout(10000)
|
||
|
let structures = []
|
||
|
let packr = new Packr({ structures })
|
||
|
let buffer = typeof Buffer != 'undefined' ? Buffer.alloc(0x10000) : new Uint8Array(0x10000)
|
||
|
|
||
|
for (var i = 0; i < ITERATIONS; i++) {
|
||
|
//serialized = pack(data, { shared: sharedStructure })
|
||
|
packr.useBuffer(buffer)
|
||
|
var serialized = packr.pack(data)
|
||
|
//var serializedGzip = deflateSync(serialized)
|
||
|
}
|
||
|
//console.log('serialized', serialized.length, global.propertyComparisons)
|
||
|
})
|
||
|
})
|