diff --git a/implementations/javascript/package.json b/implementations/javascript/package.json index d1c7af7..c6f3aa6 100644 --- a/implementations/javascript/package.json +++ b/implementations/javascript/package.json @@ -1,6 +1,6 @@ { "name": "preserves", - "version": "0.6.0", + "version": "0.6.1", "description": "Experimental data serialization format", "homepage": "https://gitlab.com/preserves/preserves", "license": "Apache-2.0", diff --git a/implementations/javascript/src/codec.ts b/implementations/javascript/src/codec.ts index d7be394..d69e478 100644 --- a/implementations/javascript/src/codec.ts +++ b/implementations/javascript/src/codec.ts @@ -128,7 +128,7 @@ export class Decoder { if (n === 0) return 0; let acc = this.nextbyte(); if (acc & 0x80) acc -= 256; - for (let i = 1; i < n; i++) acc = (acc << 8) | this.nextbyte(); + for (let i = 1; i < n; i++) acc = (acc * 256) + this.nextbyte(); return acc; } @@ -311,7 +311,7 @@ export class Encoder { encodeint(v: number) { // TODO: Bignums :-/ - const plain_bitcount = Math.floor(Math.log2(v > 0 ? v : ~v)) + 1; + const plain_bitcount = Math.floor(Math.log2(v > 0 ? v : -(1 + v))) + 1; const signed_bitcount = plain_bitcount + 1; const bytecount = (signed_bitcount + 7) >> 3; if (bytecount <= 16) { @@ -322,7 +322,7 @@ export class Encoder { } const enc = (n: number, x: number) => { if (n > 0) { - enc(n - 1, x >> 8); + enc(n - 1, Math.floor(x / 256)); this.emitbyte(x & 255); } }; diff --git a/tests/samples.bin b/tests/samples.bin index a832fc3..dba2dcb 100644 Binary files a/tests/samples.bin and b/tests/samples.bin differ diff --git a/tests/samples.txt b/tests/samples.txt index a7c21c5..e6450b8 100644 --- a/tests/samples.txt +++ b/tests/samples.txt @@ -101,6 +101,7 @@ int65535: int65536: int131072: + int2500000000: list0: list4: list4a: