UNPKG

numeric-sequence-compressor

Version:

Numeric array compressor Compression quality is ~ 2 times better than the original separator-separated sequence of numbers

62 lines (52 loc) 2.23 kB
const { serialize, deserialize } = require('./index'); /** TESTS */ const BENCHMARK_ITERATIONS = 1000; const specFill = () => { const result = [], l = 20 + Math.random() * 300; while (result.length < l) { result.push(Math.round(Math.random() * 1000)); } return result; } const specGenerateListsForBenchmark = (iterations = BENCHMARK_ITERATIONS) => { const result = []; for (let i = 0, l = iterations; i < l; i++) { result.push(specFill()); } return result; } const mesureCompression = (lists, withCapitalLatters = false) => { const iterations = lists.length; let summ = 0; for (let i = 0, l = iterations; i < l; i++) { const list = lists[i]; summ += JSON.stringify(list).length / serialize(list, { caseSensetive: withCapitalLatters }).length } return `${Number(summ / iterations * 100 - 100).toFixed(2)} %`; } const deserializeMustBeCorrect = (lists, withCapitalLatters = false) => { const iterations = lists.length; let isCorrect = false; for (let i = 0, l = iterations; i < l; i++) { const list = lists[i]; isCorrect = JSON.stringify(deserialize(serialize(list, { caseSensetive: withCapitalLatters }), { caseSensetive: withCapitalLatters })) === JSON.stringify(list); if (!isCorrect) { return isCorrect; } } return isCorrect; } const LISTS = specGenerateListsForBenchmark(); const isCorrect = (v, msg) => { if (v) { return `\x1b[32m ${msg} \x1b[0m`; } return `\x1b[41m ${msg} \x1b[0m`; } console.info(`Benchmark on ${LISTS.length} iterations:`) console.log(` - compression (With capital letters): \x1b[34m ${mesureCompression(LISTS, true)} \x1b[0m`); console.log(` - compression (Lowercase letters only): \x1b[34m ${mesureCompression(LISTS, false)} \x1b[0m`); const isCorrect1 = deserializeMustBeCorrect(LISTS, true); console.log(isCorrect(isCorrect1, `- deserialize must be correct (With capital letters): ${isCorrect1}`)); const isCorrect2 = deserializeMustBeCorrect(LISTS, false); console.log(isCorrect(isCorrect2, `- deserialize must be correct (Lowercase letters only): ${isCorrect2}`));