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.
 
 
 
 

1214 lines
30 KiB

(function (msgpackr, chai) {
'use strict';
chai = chai && Object.prototype.hasOwnProperty.call(chai, 'default') ? chai['default'] : chai;
var metadata = {
Designs: [
"Randomized Controlled Trial"
],
Types: [
],
BriefSummary: "To determine the efficacy, long-term safety, and tolerability of alirocumab 300 mg every 4\n weeks (Q4W), in comparison with placebo, as well as its potential as a starting regimen. The\n dose regimen of 75 mg every 2 weeks (Q2W), as used in other studies, was added as a\n calibrator.",
Abstract: "To determine the efficacy, long-term safety, and tolerability of alirocumab 300 mg every 4\n weeks (Q4W), in comparison with placebo, as well as its potential as a starting regimen. The\n dose regimen of 75 mg every 2 weeks (Q2W), as used in other studies, was added as a\n calibrator.",
Acronym: null,
ArticleId: "Qy3gwKWSoaWRmbmFEQA",
Authors: null,
CochraneID: null,
Confidential: false,
CorporateAuthor: null,
Country: "Bulgaria, Canada, Hungary, Israel, Norway, Slovakia, United Kingdom, United States",
CustomData: null,
DatabaseType: "ClinicalTrials.gov",
DOI: null,
EmbaseAccessionNumber: null,
Emtree: null,
ErrataText: null,
FullTextURL: null,
Institution: null,
ISSN: null,
Issue: null,
JournalTitle: null,
MedlineID: null,
MeSH: "Hypercholesterolemia|Antibodies, Monoclonal",
Pages: null,
ParentChildStatus: null,
ParentID: null,
PublicationDate: "March 21, 2017",
PublicationYear: 2017,
PubType: null,
ReferenceStudy: null,
SecondarySourceID: null,
Source: "Regeneron Pharmaceuticals",
SourceReferenceId: "NCT01926782",
TaStudyDesign: "Randomized",
Title: "A Randomized, Double-Blind, Placebo-Controlled Study to Evaluate the Efficacy and Safety of an Every Four Weeks Treatment Regimen of Alirocumab in Patients With Primary Hypercholesterolemia",
TrialOutcome: null,
Volume: null,
Id: 179246831,
Created: "2020-04-10T14:48:20.4384957Z",
VersionNo: 2,
ExtractData: null,
Digitized: true,
IsRapidExtract: false,
IsUploaded: false
};
var design = "Randomized Controlled Trial";
var conditions = [
{
label: "Cholesterol Total Increased",
id: "SUE_c"
}
];
var phase = 3;
var name = "NCT01926782";
var trialIds = [
"NCT01926782"
];
var acronyms = [
];
var outcomeCount = 156;
var id = 179246831;
var groups = [
{
Id: "4r",
RefId: "B5|O2~Alirocumab 75 mg Q2W/Up 150 mg Q2W Without Concomitant Statin",
OriginalName: "Alirocumab 75 mg Q2W/Up 150 mg Q2W Without Concomitant Statin",
N: 37,
age: 59.3,
ageSD: 11.3,
male: 37.83783783783784,
Interventions: [
{
termIds: [
[
"SUBYEL",
"SUB_Oc"
],
[
"SUNUVb"
]
]
}
],
analyzeAs: "Alirocumab",
analyzableScore: 1.0717734625362931,
matchingScore: 0
},
{
Id: "zB",
RefId: "B6|O3~Alirocumab 300 mg Q4W/Up 150 mg Q2W Without Concomitant Statin",
OriginalName: "Alirocumab 300 mg Q4W/Up 150 mg Q2W Without Concomitant Statin",
N: 146,
age: 59.2,
ageSD: 10.8,
male: 45.205479452054796,
Interventions: [
{
termIds: [
[
"SUBYEL",
"SUB_Oc"
]
]
}
],
analyzeAs: "Statins",
analyzableScore: 1.0717734625362931,
matchingScore: 0
},
{
Id: "3!",
RefId: "B4|O1~Placebo Q2W Without Concomitant Statin",
OriginalName: "Placebo Q2W Without Concomitant Statin",
N: 73,
age: 59.4,
ageSD: 10.2,
male: 54.794520547945204,
Interventions: [
{
termIds: [
[
"SUGeLS"
],
[
"SUBYEL",
"SUB_Oc"
]
]
}
],
analyzeAs: "Control",
analyzableScore: 1.2020833333333334,
matchingScore: 0
},
{
Id: "tv",
RefId: "E3",
OriginalName: "Alirocumab 300 mg Q4W/Up 150 mg Q2W",
Interventions: [
{
termIds: [
[
"SUCO54",
"SUNUVb"
]
]
}
]
},
{
Id: "jt",
RefId: "B3|O3~Alirocumab 300 mg Q4W/Up 150 mg Q2W With Concomitant Statin",
OriginalName: "Alirocumab 300 mg Q4W/Up 150 mg Q2W With Concomitant Statin",
N: 312,
age: 61.6,
ageSD: 10,
male: 60.8974358974359,
Interventions: [
{
termIds: [
[
"SUBYEL",
"SUB_Oc"
]
]
}
]
},
{
Id: "5!",
RefId: "E2",
OriginalName: "Alirocumab 75 mg Q2W/Up 150 mg Q2W",
Interventions: [
{
termIds: [
[
"SUNUVb"
]
]
}
]
},
{
Id: "4E",
RefId: "B2|O2~Alirocumab 75 mg Q2W/Up 150 mg Q2W With Concomitant Statin",
OriginalName: "Alirocumab 75 mg Q2W/Up 150 mg Q2W With Concomitant Statin",
N: 78,
age: 60.7,
ageSD: 9.1,
male: 65.38461538461539,
Interventions: [
{
termIds: [
[
"SUBYEL",
"SUB_Oc"
],
[
"SUNUVb"
]
]
}
]
},
{
Id: "i4",
Interventions: [
{
Id: "Ya",
Name: 178613599,
Treatments: [
{
Id: "((",
Phase: "k)"
}
],
Type: "Drug",
termIds: [
[
"SUGeLS"
],
[
"SUNUVb"
]
],
terms: [
[
"Placebo"
],
[
"Alirocumab"
]
]
},
{
Id: "o)",
Name: 2159990,
Treatments: [
{
Id: "1$",
Phase: "k)"
}
],
Type: "Drug",
termIds: [
[
"SUBYEL"
]
],
terms: [
[
"Statins"
]
]
}
],
RefId: "E1|Placebo Q2W",
OriginalName: "Placebo Q2W"
},
{
Id: "Ls",
RefId: "B1|O1~Placebo Q2W With Concomitant Statin",
OriginalName: "Placebo Q2W With Concomitant Statin",
N: 157,
age: 61.6,
ageSD: 9.7,
male: 64.3312101910828,
Interventions: [
{
termIds: [
[
"SUGeLS"
],
[
"SUBYEL",
"SUB_Oc"
]
]
}
]
}
];
var hasDocData = true;
var hasRapidExtract = false;
var N = 803;
var queryScore = 1.4868329805051381;
var matchingScore = 7.960635921410255;
var score = 22.084654254966498;
var outcomes = [
{
id: "179246387",
type: "Change",
unit: "%",
termIds: [
[
"SUF0R",
"SUBskP"
]
],
quantifiers: [
],
name: "Calculated LDL-C in Not Receiving Concomitant Statin Therapy - On-Treatment Analysis",
cells: [
{
number: -0.4,
unit: "%",
group: "3!",
varType: "se",
N: 70,
se: 2,
sd: 16.73
},
{
number: -54.6,
unit: "%",
group: "4r",
varType: "se",
N: 37,
se: 2.8,
sd: 17.03
},
{
number: -59.4,
unit: "%",
group: "zB",
varType: "se",
N: 141,
se: 1.4,
sd: 16.62
}
],
time: {
Id: 67122072,
Low: {
Value: "Baseline"
},
High: {
"Number": 24,
Unit: "wk"
},
Type: "Total",
days: 168,
description: "24wk"
},
score: 2.08,
matchingTerm: "SUF0R",
suggestedPositive: false,
sourceUnit: "%"
},
{
id: "179246389",
type: "Change",
unit: "%",
termIds: [
[
"SUF0R",
"SUBskP"
]
],
quantifiers: [
],
name: "Calculated LDL-C in Receiving Concomitant Statin Therapy - On-Treatment Analysis",
cells: [
{
number: -0.3,
unit: "%",
group: "Ls",
varType: "se",
N: 151,
se: 2.1,
sd: 25.81
},
{
number: -55.1,
unit: "%",
group: "4E",
varType: "se",
N: 75,
se: 3,
sd: 25.98
},
{
number: -62.3,
unit: "%",
group: "jt",
varType: "se",
N: 302,
se: 1.5,
sd: 26.07
}
],
time: {
Id: 67122072,
Low: {
Value: "Baseline"
},
High: {
"Number": 24,
Unit: "wk"
},
Type: "Total",
days: 168,
description: "24wk"
},
score: 2.08,
matchingTerm: "SUF0R",
suggestedPositive: false,
sourceUnit: "%"
},
{
id: "179246393",
type: "Change",
unit: "%",
termIds: [
[
"SUF0R",
"SUBskP"
]
],
quantifiers: [
],
name: "Calculated LDL-C in Not Receiving Concomitant Statin Therapy - On-Treatment Analysis",
cells: [
{
number: -0.5,
unit: "%",
group: "3!",
varType: "se",
N: 70,
se: 2,
sd: 16.73
},
{
number: -53.9,
unit: "%",
group: "4r",
varType: "se",
N: 37,
se: 2.7,
sd: 16.42
},
{
number: -60,
unit: "%",
group: "zB",
varType: "se",
N: 141,
se: 1.4,
sd: 16.62
}
],
time: {
Id: 67122069,
Low: {
Value: "Baseline"
},
High: {
"Number": 12,
Unit: "wk"
},
Type: "Total",
days: 84,
description: "12wk"
},
score: 2.08,
matchingTerm: "SUF0R",
suggestedPositive: false,
sourceUnit: "%"
},
{
id: "179246394",
type: "Change",
unit: "%",
termIds: [
[
"SUF0R",
"SUBskP"
]
],
quantifiers: [
],
name: "Calculated LDL-C in Receiving Concomitant Statin Therapy - On-Treatment Analysis",
cells: [
{
number: 1.4,
unit: "%",
group: "Ls",
varType: "se",
N: 151,
se: 1.9,
sd: 23.35
},
{
number: -47.3,
unit: "%",
group: "4E",
varType: "se",
N: 75,
se: 2.8,
sd: 24.25
},
{
number: -58,
unit: "%",
group: "jt",
varType: "se",
N: 302,
se: 1.4,
sd: 24.33
}
],
time: {
Id: 67122069,
Low: {
Value: "Baseline"
},
High: {
"Number": 12,
Unit: "wk"
},
Type: "Total",
days: 84,
description: "12wk"
},
score: 2.08,
matchingTerm: "SUF0R",
suggestedPositive: false,
sourceUnit: "%"
}
];
var characteristics = [
{
id: "179246354",
type: "Binary",
isCharacteristic: true,
termIds: [
[
"SUE_c",
"SUCbN",
"SUyJj"
]
],
quantifiers: [
],
name: "Patients not having adequate control of their hypercholesterolemia based on their individual level of CVD risk",
cells: [
],
number: 100
}
];
var outcomesScore = 18.97947630112307;
var sampleData = {
metadata: metadata,
design: design,
conditions: conditions,
phase: phase,
name: name,
trialIds: trialIds,
acronyms: acronyms,
outcomeCount: outcomeCount,
id: id,
groups: groups,
hasDocData: hasDocData,
hasRapidExtract: hasRapidExtract,
N: N,
queryScore: queryScore,
matchingScore: matchingScore,
score: score,
outcomes: outcomes,
characteristics: characteristics,
outcomesScore: outcomesScore
};
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;
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;
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);
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);
}
}
});
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);
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)
});
});
}(msgpackr, chai));