zstdify 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/dist/barrelExports.test.d.ts +0 -1
- package/dist/barrelExports.test.js +0 -25
- package/dist/barrelExports.test.js.map +0 -1
- package/dist/bitstream/bitReader.test.d.ts +0 -1
- package/dist/bitstream/bitReader.test.js +0 -47
- package/dist/bitstream/bitReader.test.js.map +0 -1
- package/dist/bitstream/bitReaderReverse.test.d.ts +0 -1
- package/dist/bitstream/bitReaderReverse.test.js +0 -49
- package/dist/bitstream/bitReaderReverse.test.js.map +0 -1
- package/dist/bitstream/littleEndian.test.d.ts +0 -1
- package/dist/bitstream/littleEndian.test.js +0 -21
- package/dist/bitstream/littleEndian.test.js.map +0 -1
- package/dist/bitstream/varint.test.d.ts +0 -1
- package/dist/bitstream/varint.test.js +0 -25
- package/dist/bitstream/varint.test.js.map +0 -1
- package/dist/compress.test.d.ts +0 -1
- package/dist/compress.test.js +0 -39
- package/dist/compress.test.js.map +0 -1
- package/dist/decode/block.test.d.ts +0 -1
- package/dist/decode/block.test.js +0 -26
- package/dist/decode/block.test.js.map +0 -1
- package/dist/decode/decompressFrame.test.d.ts +0 -1
- package/dist/decode/decompressFrame.test.js +0 -95
- package/dist/decode/decompressFrame.test.js.map +0 -1
- package/dist/decode/literals.corruption.test.d.ts +0 -1
- package/dist/decode/literals.corruption.test.js +0 -68
- package/dist/decode/literals.corruption.test.js.map +0 -1
- package/dist/decode/literals.test.d.ts +0 -1
- package/dist/decode/literals.test.js +0 -68
- package/dist/decode/literals.test.js.map +0 -1
- package/dist/decode/reconstruct.test.d.ts +0 -1
- package/dist/decode/reconstruct.test.js +0 -42
- package/dist/decode/reconstruct.test.js.map +0 -1
- package/dist/decode/sequences.corruption.test.d.ts +0 -1
- package/dist/decode/sequences.corruption.test.js +0 -32
- package/dist/decode/sequences.corruption.test.js.map +0 -1
- package/dist/decode/sequences.level1.test.d.ts +0 -1
- package/dist/decode/sequences.level1.test.js +0 -35
- package/dist/decode/sequences.level1.test.js.map +0 -1
- package/dist/decode/sequences.modes.test.d.ts +0 -1
- package/dist/decode/sequences.modes.test.js +0 -56
- package/dist/decode/sequences.modes.test.js.map +0 -1
- package/dist/dictionary/decoderDictionary.test.d.ts +0 -1
- package/dist/dictionary/decoderDictionary.test.js +0 -87
- package/dist/dictionary/decoderDictionary.test.js.map +0 -1
- package/dist/encode/blockWriter.test.d.ts +0 -1
- package/dist/encode/blockWriter.test.js +0 -31
- package/dist/encode/blockWriter.test.js.map +0 -1
- package/dist/encode/compressedBlock.test.d.ts +0 -1
- package/dist/encode/compressedBlock.test.js +0 -63
- package/dist/encode/compressedBlock.test.js.map +0 -1
- package/dist/encode/frameWriter.test.d.ts +0 -1
- package/dist/encode/frameWriter.test.js +0 -38
- package/dist/encode/frameWriter.test.js.map +0 -1
- package/dist/encode/greedySequences.test.d.ts +0 -1
- package/dist/encode/greedySequences.test.js +0 -33
- package/dist/encode/greedySequences.test.js.map +0 -1
- package/dist/entropy/fse.test.d.ts +0 -1
- package/dist/entropy/fse.test.js +0 -41
- package/dist/entropy/fse.test.js.map +0 -1
- package/dist/entropy/huffman.test.d.ts +0 -1
- package/dist/entropy/huffman.test.js +0 -22
- package/dist/entropy/huffman.test.js.map +0 -1
- package/dist/entropy/weights.test.d.ts +0 -1
- package/dist/entropy/weights.test.js +0 -38
- package/dist/entropy/weights.test.js.map +0 -1
- package/dist/errors.test.d.ts +0 -1
- package/dist/errors.test.js +0 -16
- package/dist/errors.test.js.map +0 -1
- package/dist/frame/checksum.test.d.ts +0 -1
- package/dist/frame/checksum.test.js +0 -28
- package/dist/frame/checksum.test.js.map +0 -1
- package/dist/frame/frameHeader.test.d.ts +0 -1
- package/dist/frame/frameHeader.test.js +0 -83
- package/dist/frame/frameHeader.test.js.map +0 -1
- package/dist/frame/skippable.test.d.ts +0 -1
- package/dist/frame/skippable.test.js +0 -35
- package/dist/frame/skippable.test.js.map +0 -1
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { executeSequences } from './reconstruct.js';
|
|
3
|
-
describe('executeSequences', () => {
|
|
4
|
-
it('does not over-allocate output when sequences consume literals', () => {
|
|
5
|
-
const literals = new TextEncoder().encode('abcd');
|
|
6
|
-
const sequences = [
|
|
7
|
-
{
|
|
8
|
-
literalsLength: 4, // "abcd"
|
|
9
|
-
offset: 7, // offsetValue 7 => actual offset 4
|
|
10
|
-
matchLength: 2,
|
|
11
|
-
},
|
|
12
|
-
];
|
|
13
|
-
const output = executeSequences(literals, sequences, 128 * 1024);
|
|
14
|
-
expect(new TextDecoder().decode(output)).toBe('abcdab');
|
|
15
|
-
expect(output.length).toBe(6);
|
|
16
|
-
});
|
|
17
|
-
it('supports match copies from previous block history', () => {
|
|
18
|
-
const history = new TextEncoder().encode('wxyz');
|
|
19
|
-
const literals = new Uint8Array(0);
|
|
20
|
-
const sequences = [
|
|
21
|
-
{
|
|
22
|
-
literalsLength: 0,
|
|
23
|
-
offset: 7, // Offset_Value 7 => actual offset 4
|
|
24
|
-
matchLength: 4,
|
|
25
|
-
},
|
|
26
|
-
];
|
|
27
|
-
const output = executeSequences(literals, sequences, 128 * 1024, [1, 4, 8], history);
|
|
28
|
-
expect(new TextDecoder().decode(output)).toBe('wxyz');
|
|
29
|
-
});
|
|
30
|
-
it('rejects rep1-1 when it becomes zero', () => {
|
|
31
|
-
const literals = new Uint8Array(0);
|
|
32
|
-
const sequences = [
|
|
33
|
-
{
|
|
34
|
-
literalsLength: 0,
|
|
35
|
-
offset: 3,
|
|
36
|
-
matchLength: 1,
|
|
37
|
-
},
|
|
38
|
-
];
|
|
39
|
-
expect(() => executeSequences(literals, sequences, 128 * 1024, [1, 4, 8])).toThrowError(/repeat1-1/i);
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
//# sourceMappingURL=reconstruct.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reconstruct.test.js","sourceRoot":"","sources":["../../src/decode/reconstruct.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAiB,MAAM,kBAAkB,CAAC;AAEnE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC;IACjC,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE,CAAC;QACxE,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,SAAS,GAAe;YAC5B;gBACE,cAAc,EAAE,CAAC,EAAE,SAAS;gBAC5B,MAAM,EAAE,CAAC,EAAE,mCAAmC;gBAC9C,WAAW,EAAE,CAAC;aACf;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAA,CAC/B,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE,CAAC;QAC5D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,SAAS,GAAe;YAC5B;gBACE,cAAc,EAAE,CAAC;gBACjB,MAAM,EAAE,CAAC,EAAE,oCAAoC;gBAC/C,WAAW,EAAE,CAAC;aACf;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACrF,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAAA,CACvD,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,SAAS,GAAe;YAC5B;gBACE,cAAc,EAAE,CAAC;gBACjB,MAAM,EAAE,CAAC;gBACT,WAAW,EAAE,CAAC;aACf;SACF,CAAC;QAEF,MAAM,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IAAA,CACvG,CAAC,CAAC;AAAA,CACJ,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { decodeSequences } from './sequences.js';
|
|
3
|
-
describe('decodeSequences corruption handling', () => {
|
|
4
|
-
it('rejects truncated sequences section header', () => {
|
|
5
|
-
const data = new Uint8Array([0x01]);
|
|
6
|
-
expect(() => decodeSequences(data, 0, data.length, null)).toThrowError(/too short|truncated/i);
|
|
7
|
-
});
|
|
8
|
-
it('rejects reserved bits set in modes byte', () => {
|
|
9
|
-
const data = new Uint8Array([
|
|
10
|
-
0x01, // numSequences
|
|
11
|
-
0x01, // reserved low 2 bits set
|
|
12
|
-
]);
|
|
13
|
-
expect(() => decodeSequences(data, 0, data.length, null)).toThrowError(/reserved bits/i);
|
|
14
|
-
});
|
|
15
|
-
it('rejects repeat mode without previous tables', () => {
|
|
16
|
-
const data = new Uint8Array([
|
|
17
|
-
0x01, // numSequences
|
|
18
|
-
0xc0, // llMode=3 (repeat), of/ml default
|
|
19
|
-
0xff, // bitstream marker byte
|
|
20
|
-
]);
|
|
21
|
-
expect(() => decodeSequences(data, 0, data.length, null)).toThrowError(/Repeat_Mode/i);
|
|
22
|
-
});
|
|
23
|
-
it('rejects bitstream too short for initial states', () => {
|
|
24
|
-
const data = new Uint8Array([
|
|
25
|
-
0x01, // numSequences
|
|
26
|
-
0x00, // predefined tables for LL/OF/ML
|
|
27
|
-
0x80, // valid reverse end marker but only 1 byte of bitstream
|
|
28
|
-
]);
|
|
29
|
-
expect(() => decodeSequences(data, 0, data.length, null)).toThrowError(/too short for initial states/i);
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
//# sourceMappingURL=sequences.corruption.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sequences.corruption.test.js","sourceRoot":"","sources":["../../src/decode/sequences.corruption.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE,CAAC;IACpD,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;IAAA,CAChG,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;YAC1B,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,0BAA0B;SACjC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAAA,CAC1F,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;YAC1B,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,mCAAmC;YACzC,IAAI,EAAE,wBAAwB;SAC/B,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;IAAA,CACxF,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;YAC1B,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,iCAAiC;YACvC,IAAI,EAAE,wDAAwD;SAC/D,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,+BAA+B,CAAC,CAAC;IAAA,CACzG,CAAC,CAAC;AAAA,CACJ,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import * as fs from 'node:fs';
|
|
2
|
-
import * as path from 'node:path';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
|
-
import { describe, expect, it } from 'vitest';
|
|
5
|
-
import { parseFrameHeader } from '../frame/frameHeader.js';
|
|
6
|
-
import { parseBlockHeader } from './block.js';
|
|
7
|
-
import { decodeRawLiterals, parseLiteralsSectionHeader } from './literals.js';
|
|
8
|
-
import { executeSequences } from './reconstruct.js';
|
|
9
|
-
import { decodeSequences } from './sequences.js';
|
|
10
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
11
|
-
const fixturePath = path.join(__dirname, '../../../zstdify-tests/fixtures/level1.zst');
|
|
12
|
-
describe('sequence internals (level1 fixture)', () => {
|
|
13
|
-
it('decodes exact sequence tuple and reconstructs output length', () => {
|
|
14
|
-
if (!fs.existsSync(fixturePath)) {
|
|
15
|
-
console.warn('Skipping: run "echo -n "hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world " | zstd -c --no-check -1 > packages/zstdify-tests/fixtures/level1.zst"');
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
const data = new Uint8Array(fs.readFileSync(fixturePath));
|
|
19
|
-
const header = parseFrameHeader(data, 4);
|
|
20
|
-
let pos = 4 + header.headerSize;
|
|
21
|
-
const block = parseBlockHeader(data, pos);
|
|
22
|
-
pos += 3;
|
|
23
|
-
const blockContent = data.subarray(pos, pos + block.blockSize);
|
|
24
|
-
const { header: litHeader, dataOffset } = parseLiteralsSectionHeader(blockContent, 0);
|
|
25
|
-
expect(litHeader.blockType).toBe(0); // Raw literals for this fixture.
|
|
26
|
-
const literals = decodeRawLiterals(blockContent, dataOffset, litHeader.regeneratedSize);
|
|
27
|
-
const litBytesConsumed = litHeader.headerSize + litHeader.regeneratedSize;
|
|
28
|
-
const seq = decodeSequences(blockContent, litBytesConsumed, block.blockSize - litBytesConsumed, null);
|
|
29
|
-
expect(seq.sequences).toEqual([{ literalsLength: 12, offset: 15, matchLength: 108 }]);
|
|
30
|
-
const output = executeSequences(literals, seq.sequences, header.windowSize, [1, 4, 8]);
|
|
31
|
-
expect(output.length).toBe(120);
|
|
32
|
-
expect(new TextDecoder().decode(output)).toBe('hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world ');
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
//# sourceMappingURL=sequences.level1.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sequences.level1.test.js","sourceRoot":"","sources":["../../src/decode/sequences.level1.test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,4CAA4C,CAAC,CAAC;AAEvF,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE,CAAC;IACpD,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE,CAAC;QACtE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CACV,yNAAyN,CAC1N,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;QAChC,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1C,GAAG,IAAI,CAAC,CAAC;QACT,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QAE/D,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,0BAA0B,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QACtF,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,iCAAiC;QACtE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;QACxF,MAAM,gBAAgB,GAAG,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,eAAe,CAAC;QAE1E,MAAM,GAAG,GAAG,eAAe,CAAC,YAAY,EAAE,gBAAgB,EAAE,KAAK,CAAC,SAAS,GAAG,gBAAgB,EAAE,IAAI,CAAC,CAAC;QACtG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAEtF,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAC3C,0HAA0H,CAC3H,CAAC;IAAA,CACH,CAAC,CAAC;AAAA,CACJ,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { decodeSequences } from './sequences.js';
|
|
3
|
-
describe('decodeSequences modes and extended counts', () => {
|
|
4
|
-
it('parses extended numSequences encoding for >= 128 path', () => {
|
|
5
|
-
const result = decodeSequences(new Uint8Array([0x80, 0x00]), 0, 2, null);
|
|
6
|
-
expect(result.sequences).toEqual([]);
|
|
7
|
-
expect(result.bytesRead).toBe(2);
|
|
8
|
-
});
|
|
9
|
-
it('parses 255 marker path and rejects truncated section afterwards', () => {
|
|
10
|
-
const data = new Uint8Array([0xff, 0x00, 0x00]);
|
|
11
|
-
expect(() => decodeSequences(data, 0, data.length, null)).toThrowError(/truncated/i);
|
|
12
|
-
});
|
|
13
|
-
it('handles all-RLE mode (LL/OF/ML) with explicit symbols', () => {
|
|
14
|
-
const data = new Uint8Array([
|
|
15
|
-
0x01, // numSequences
|
|
16
|
-
0x54, // ll=1, of=1, ml=1
|
|
17
|
-
0x00, // ll RLE symbol
|
|
18
|
-
0x00, // of RLE symbol
|
|
19
|
-
0x00, // ml RLE symbol
|
|
20
|
-
0xff,
|
|
21
|
-
0xff,
|
|
22
|
-
0xff, // bitstream bytes
|
|
23
|
-
]);
|
|
24
|
-
const result = decodeSequences(data, 0, data.length, null);
|
|
25
|
-
expect(result.sequences.length).toBe(1);
|
|
26
|
-
});
|
|
27
|
-
it('enters FSE mode and rejects malformed FSE table stream', () => {
|
|
28
|
-
const data = new Uint8Array([0x01, 0xa8, 0x00]); // ll=2, of=2, ml=2
|
|
29
|
-
expect(() => decodeSequences(data, 0, data.length, null)).toThrow();
|
|
30
|
-
});
|
|
31
|
-
it('uses repeat mode when previous tables are provided', () => {
|
|
32
|
-
const seeded = decodeSequences(new Uint8Array([0x00, 0x00]), 0, 2, null);
|
|
33
|
-
const data = new Uint8Array([
|
|
34
|
-
0x01, // numSequences
|
|
35
|
-
0xfc, // ll=3, of=3, ml=3 (repeat)
|
|
36
|
-
0xff,
|
|
37
|
-
0xff,
|
|
38
|
-
0xff, // bitstream bytes
|
|
39
|
-
]);
|
|
40
|
-
const result = decodeSequences(data, 0, data.length, seeded.tables);
|
|
41
|
-
expect(result.sequences.length).toBe(1);
|
|
42
|
-
});
|
|
43
|
-
it('rejects invalid state row when repeated tables are structurally invalid', () => {
|
|
44
|
-
const invalidTables = {
|
|
45
|
-
llTable: [],
|
|
46
|
-
llTableLog: 1,
|
|
47
|
-
ofTable: [],
|
|
48
|
-
ofTableLog: 1,
|
|
49
|
-
mlTable: [],
|
|
50
|
-
mlTableLog: 1,
|
|
51
|
-
};
|
|
52
|
-
const data = new Uint8Array([0x01, 0xfc, 0x80]);
|
|
53
|
-
expect(() => decodeSequences(data, 0, data.length, invalidTables)).toThrowError(/invalid state/i);
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
//# sourceMappingURL=sequences.modes.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sequences.modes.test.js","sourceRoot":"","sources":["../../src/decode/sequences.modes.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { spawnSync } from 'node:child_process';
|
|
2
|
-
import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
3
|
-
import { tmpdir } from 'node:os';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { describe, expect, it } from 'vitest';
|
|
6
|
-
import { normalizeDecoderDictionary } from './decoderDictionary.js';
|
|
7
|
-
function hasZstdCli() {
|
|
8
|
-
const result = spawnSync('zstd', ['--version'], { encoding: 'utf8' });
|
|
9
|
-
return result.status === 0;
|
|
10
|
-
}
|
|
11
|
-
describe('normalizeDecoderDictionary', () => {
|
|
12
|
-
it('keeps raw-content dictionary bytes as history prefix', () => {
|
|
13
|
-
const dictionaryBytes = new TextEncoder().encode('alpha beta gamma dictionary content');
|
|
14
|
-
const parsed = normalizeDecoderDictionary(dictionaryBytes);
|
|
15
|
-
expect(parsed.historyPrefix).toEqual(dictionaryBytes);
|
|
16
|
-
expect(parsed.dictionaryId).toBe(null);
|
|
17
|
-
expect(parsed.repOffsets).toEqual([1, 4, 8]);
|
|
18
|
-
expect(parsed.huffmanTable).toBe(null);
|
|
19
|
-
expect(parsed.sequenceTables).toBe(null);
|
|
20
|
-
});
|
|
21
|
-
it('rejects malformed trained dictionaries with truncated entropy tables', () => {
|
|
22
|
-
const malformed = new Uint8Array([
|
|
23
|
-
0x37,
|
|
24
|
-
0xa4,
|
|
25
|
-
0x30,
|
|
26
|
-
0xec, // dictionary magic
|
|
27
|
-
0x01,
|
|
28
|
-
0x00,
|
|
29
|
-
0x00,
|
|
30
|
-
0x00, // dictionary id
|
|
31
|
-
0x82, // direct-weight header: expects 3 nibbles => 2 bytes, but none provided
|
|
32
|
-
]);
|
|
33
|
-
expect(() => normalizeDecoderDictionary(malformed)).toThrow();
|
|
34
|
-
});
|
|
35
|
-
it('parses trained dictionary metadata and content when zstd cli is available', () => {
|
|
36
|
-
if (!hasZstdCli())
|
|
37
|
-
return;
|
|
38
|
-
const tempRoot = mkdtempSync(join(tmpdir(), 'zstdify-dict-parse-'));
|
|
39
|
-
try {
|
|
40
|
-
const dictPath = join(tempRoot, 'trained.dict');
|
|
41
|
-
const sampleTexts = [
|
|
42
|
-
'alpha alpha alpha beta beta gamma gamma delta delta epsilon epsilon zeta zeta',
|
|
43
|
-
'header vertex texture vertex normal normal index index tangent bitangent',
|
|
44
|
-
'compressor dictionary training corpus repeated tokens phrase phrase phrase',
|
|
45
|
-
'mesh primitive material shader pipeline render scene graph transform',
|
|
46
|
-
'packet stream frame header footer checksum block entropy symbols',
|
|
47
|
-
'typescript package monorepo workspace pnpm vitest biome lint check',
|
|
48
|
-
'offset match literal sequence table repeat mode huffman fse decode',
|
|
49
|
-
'browser node runtime buffer array uint8array encoder decoder api',
|
|
50
|
-
];
|
|
51
|
-
const samplePaths = sampleTexts.map((_, index) => join(tempRoot, `sample-${index}.txt`));
|
|
52
|
-
for (const [index, samplePath] of samplePaths.entries()) {
|
|
53
|
-
const sampleText = sampleTexts[index];
|
|
54
|
-
if (sampleText === undefined) {
|
|
55
|
-
throw new Error('Sample text missing');
|
|
56
|
-
}
|
|
57
|
-
writeFileSync(samplePath, sampleText);
|
|
58
|
-
}
|
|
59
|
-
const train = spawnSync('zstd', ['--train', ...samplePaths, '--maxdict=2048', '-o', dictPath, '--quiet'], {
|
|
60
|
-
encoding: null,
|
|
61
|
-
});
|
|
62
|
-
if (train.status !== 0) {
|
|
63
|
-
throw new Error(`zstd dictionary training failed: ${train.stderr?.toString() ?? 'unknown error'}`);
|
|
64
|
-
}
|
|
65
|
-
const dictionaryBytes = new Uint8Array(readFileSync(dictPath));
|
|
66
|
-
const parsed = normalizeDecoderDictionary(dictionaryBytes);
|
|
67
|
-
const dictIdFromHeader = (dictionaryBytes[4] ?? 0) |
|
|
68
|
-
((dictionaryBytes[5] ?? 0) << 8) |
|
|
69
|
-
((dictionaryBytes[6] ?? 0) << 16) |
|
|
70
|
-
((dictionaryBytes[7] ?? 0) << 24);
|
|
71
|
-
expect(parsed.dictionaryId).toBe(dictIdFromHeader >>> 0);
|
|
72
|
-
expect(parsed.historyPrefix.length).toBeGreaterThan(0);
|
|
73
|
-
expect(parsed.repOffsets[0]).toBeGreaterThan(0);
|
|
74
|
-
expect(parsed.repOffsets[1]).toBeGreaterThan(0);
|
|
75
|
-
expect(parsed.repOffsets[2]).toBeGreaterThan(0);
|
|
76
|
-
expect(parsed.repOffsets[0]).toBeLessThanOrEqual(parsed.historyPrefix.length);
|
|
77
|
-
expect(parsed.repOffsets[1]).toBeLessThanOrEqual(parsed.historyPrefix.length);
|
|
78
|
-
expect(parsed.repOffsets[2]).toBeLessThanOrEqual(parsed.historyPrefix.length);
|
|
79
|
-
expect(parsed.huffmanTable).not.toBe(null);
|
|
80
|
-
expect(parsed.sequenceTables).not.toBe(null);
|
|
81
|
-
}
|
|
82
|
-
finally {
|
|
83
|
-
rmSync(tempRoot, { recursive: true, force: true });
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
//# sourceMappingURL=decoderDictionary.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decoderDictionary.test.js","sourceRoot":"","sources":["../../src/dictionary/decoderDictionary.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { writeRawBlock, writeRLEBlock } from './blockWriter.js';
|
|
3
|
-
describe('blockWriter', () => {
|
|
4
|
-
it('writeRawBlock produces correct header and payload', () => {
|
|
5
|
-
const data = new Uint8Array([0x61, 0x62, 0x63]);
|
|
6
|
-
const block = writeRawBlock(data, 0, 3, true);
|
|
7
|
-
expect(block.length).toBe(6);
|
|
8
|
-
// Block header: last=1, type=0 (raw), size=3 -> (1 | 0<<1 | 3<<3) = 25 LE = 19 00 00
|
|
9
|
-
expect(block[0]).toBe(25);
|
|
10
|
-
expect(block[1]).toBe(0);
|
|
11
|
-
expect(block[2]).toBe(0);
|
|
12
|
-
expect(block[3]).toBe(0x61);
|
|
13
|
-
expect(block[4]).toBe(0x62);
|
|
14
|
-
expect(block[5]).toBe(0x63);
|
|
15
|
-
});
|
|
16
|
-
it('writeRawBlock with last=false sets last bit 0', () => {
|
|
17
|
-
const data = new Uint8Array([1]);
|
|
18
|
-
const block = writeRawBlock(data, 0, 1, false);
|
|
19
|
-
expect(block[0]).toBe(1 << 3); // last=0, type=0, size=1
|
|
20
|
-
});
|
|
21
|
-
it('writeRLEBlock produces correct header and single byte', () => {
|
|
22
|
-
const block = writeRLEBlock(0x61, 10, true);
|
|
23
|
-
expect(block.length).toBe(4);
|
|
24
|
-
// last=1, type=1 (RLE), size=10 -> (1 | 2 | 80) = 83 LE = 53 00 00
|
|
25
|
-
expect(block[0]).toBe(83);
|
|
26
|
-
expect(block[1]).toBe(0);
|
|
27
|
-
expect(block[2]).toBe(0);
|
|
28
|
-
expect(block[3]).toBe(0x61);
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
//# sourceMappingURL=blockWriter.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"blockWriter.test.js","sourceRoot":"","sources":["../../src/encode/blockWriter.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEhE,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC;IAC5B,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,qFAAqF;QACrF,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAAA,CAC7B,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,yBAAyB;IAA1B,CAC/B,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE,CAAC;QAChE,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,mEAAmE;QACnE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAAA,CAC7B,CAAC,CAAC;AAAA,CACJ,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { compress } from '../compress.js';
|
|
3
|
-
import { parseLiteralsSectionHeader } from '../decode/literals.js';
|
|
4
|
-
import { decompress } from '../decompress.js';
|
|
5
|
-
import { parseFrameHeader } from '../frame/frameHeader.js';
|
|
6
|
-
import { buildCompressedBlockPayload, writeCompressedBlock } from './compressedBlock.js';
|
|
7
|
-
import { buildGreedySequences } from './greedySequences.js';
|
|
8
|
-
describe('compressed block encoder', () => {
|
|
9
|
-
it('builds decodable compressed-block payload for single-sequence case', () => {
|
|
10
|
-
const input = new TextEncoder().encode('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
|
|
11
|
-
const plan = buildGreedySequences(input);
|
|
12
|
-
expect(plan.sequences.length).toBeGreaterThan(0);
|
|
13
|
-
const payload = buildCompressedBlockPayload(plan.literals, plan.sequences);
|
|
14
|
-
expect(payload).not.toBeNull();
|
|
15
|
-
const frameHeader = new Uint8Array([0x28, 0xb5, 0x2f, 0xfd, 0x20, input.length & 0xff]);
|
|
16
|
-
const block = writeCompressedBlock(payload, true);
|
|
17
|
-
const frame = new Uint8Array(frameHeader.length + block.length);
|
|
18
|
-
frame.set(frameHeader, 0);
|
|
19
|
-
frame.set(block, frameHeader.length);
|
|
20
|
-
expect(decompress(frame)).toEqual(input);
|
|
21
|
-
});
|
|
22
|
-
it('compress(level=3) emits compressed block when beneficial', () => {
|
|
23
|
-
const input = new TextEncoder().encode('abcdabcdabcdabcdabcdabcdabcdabcd');
|
|
24
|
-
const encoded = compress(input, { level: 3 });
|
|
25
|
-
const header = parseFrameHeader(encoded, 4);
|
|
26
|
-
const blockHeaderOffset = 4 + header.headerSize;
|
|
27
|
-
const blockType = ((encoded[blockHeaderOffset] ?? 0) >> 1) & 0x3;
|
|
28
|
-
expect(blockType).toBe(2);
|
|
29
|
-
expect(decompress(encoded)).toEqual(input);
|
|
30
|
-
});
|
|
31
|
-
it('encodes multi-sequence section using non-RLE modes', () => {
|
|
32
|
-
const input = new TextEncoder().encode('abcdabcdXabcdabcdYabcdabcdZabcdabcd');
|
|
33
|
-
const plan = buildGreedySequences(input);
|
|
34
|
-
expect(plan.sequences.length).toBeGreaterThan(1);
|
|
35
|
-
const payload = buildCompressedBlockPayload(plan.literals, plan.sequences);
|
|
36
|
-
expect(payload).not.toBeNull();
|
|
37
|
-
const { header } = parseLiteralsSectionHeader(payload, 0);
|
|
38
|
-
const litBytes = header.headerSize + (header.compressedSize ?? header.regeneratedSize);
|
|
39
|
-
const numSeq = payload[litBytes] ?? 0;
|
|
40
|
-
expect(numSeq).toBe(plan.sequences.length);
|
|
41
|
-
const modes = payload[litBytes + 1] ?? 0xff;
|
|
42
|
-
expect(modes).toBe(0); // predefined, i.e. non-RLE modes
|
|
43
|
-
const frameHeader = new Uint8Array([0x28, 0xb5, 0x2f, 0xfd, 0x20, input.length & 0xff]);
|
|
44
|
-
const block = writeCompressedBlock(payload, true);
|
|
45
|
-
const frame = new Uint8Array(frameHeader.length + block.length);
|
|
46
|
-
frame.set(frameHeader, 0);
|
|
47
|
-
frame.set(block, frameHeader.length);
|
|
48
|
-
expect(decompress(frame)).toEqual(input);
|
|
49
|
-
});
|
|
50
|
-
it('encodes multi-symbol compressed literals for bounded symbol sets', () => {
|
|
51
|
-
const literals = new Uint8Array(40);
|
|
52
|
-
for (let i = 0; i < literals.length; i++) {
|
|
53
|
-
literals[i] = (i & 1);
|
|
54
|
-
}
|
|
55
|
-
const payload = buildCompressedBlockPayload(literals, [
|
|
56
|
-
{ literalsLength: literals.length, offset: 1, matchLength: 3 },
|
|
57
|
-
]);
|
|
58
|
-
expect(payload).not.toBeNull();
|
|
59
|
-
const { header } = parseLiteralsSectionHeader(payload, 0);
|
|
60
|
-
expect([0, 2]).toContain(header.blockType);
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
//# sourceMappingURL=compressedBlock.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compressedBlock.test.js","sourceRoot":"","sources":["../../src/encode/compressedBlock.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { writeFrameHeader } from './frameWriter.js';
|
|
3
|
-
const ZSTD_MAGIC_LE = [0x28, 0xb5, 0x2f, 0xfd];
|
|
4
|
-
describe('frameWriter', () => {
|
|
5
|
-
it('writeFrameHeader writes magic and 1-byte content size for small content', () => {
|
|
6
|
-
const h = writeFrameHeader(100, false);
|
|
7
|
-
expect(h.length).toBeGreaterThanOrEqual(6);
|
|
8
|
-
expect(h[0]).toBe(ZSTD_MAGIC_LE[0]);
|
|
9
|
-
expect(h[1]).toBe(ZSTD_MAGIC_LE[1]);
|
|
10
|
-
expect(h[2]).toBe(ZSTD_MAGIC_LE[2]);
|
|
11
|
-
expect(h[3]).toBe(ZSTD_MAGIC_LE[3]);
|
|
12
|
-
// FHD: single segment (1<<5), content size flag 0 (1 byte), no checksum
|
|
13
|
-
expect(h[4]).toBe(1 << 5);
|
|
14
|
-
expect(h[5]).toBe(100);
|
|
15
|
-
});
|
|
16
|
-
it('writeFrameHeader uses 2-byte content size for medium content', () => {
|
|
17
|
-
const h = writeFrameHeader(256 + 100, false);
|
|
18
|
-
expect(h.length).toBeGreaterThanOrEqual(7);
|
|
19
|
-
expect(h[4]).toBe((1 << 6) | (1 << 5));
|
|
20
|
-
// 256+100-256 = 100, LE
|
|
21
|
-
expect(h[5]).toBe(100);
|
|
22
|
-
expect(h[6]).toBe(0);
|
|
23
|
-
});
|
|
24
|
-
it('writeFrameHeader uses 4-byte content size for large content', () => {
|
|
25
|
-
const h = writeFrameHeader(300_000, false);
|
|
26
|
-
expect(h.length).toBeGreaterThanOrEqual(9);
|
|
27
|
-
expect(h[4]).toBe((2 << 6) | (1 << 5));
|
|
28
|
-
expect(h[5]).toBe(300_000 & 0xff);
|
|
29
|
-
expect(h[6]).toBe((300_000 >> 8) & 0xff);
|
|
30
|
-
expect(h[7]).toBe((300_000 >> 16) & 0xff);
|
|
31
|
-
expect(h[8]).toBe((300_000 >> 24) & 0xff);
|
|
32
|
-
});
|
|
33
|
-
it('writeFrameHeader sets checksum flag when hasChecksum true', () => {
|
|
34
|
-
const h = writeFrameHeader(5, true);
|
|
35
|
-
expect(h[4]).toBe((1 << 5) | (1 << 2));
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
//# sourceMappingURL=frameWriter.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"frameWriter.test.js","sourceRoot":"","sources":["../../src/encode/frameWriter.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { executeSequences } from '../decode/reconstruct.js';
|
|
3
|
-
import { buildGreedySequences } from './greedySequences.js';
|
|
4
|
-
describe('buildGreedySequences', () => {
|
|
5
|
-
it('reconstructs repetitive text via generated sequences', () => {
|
|
6
|
-
const input = new TextEncoder().encode('hello world hello world hello world hello world hello world ');
|
|
7
|
-
const plan = buildGreedySequences(input);
|
|
8
|
-
const output = executeSequences(plan.literals, plan.sequences, 128 * 1024);
|
|
9
|
-
expect(output).toEqual(input);
|
|
10
|
-
expect(plan.sequences.length).toBeGreaterThan(0);
|
|
11
|
-
});
|
|
12
|
-
it('reconstructs binary payload via generated sequences', () => {
|
|
13
|
-
const input = new Uint8Array(4096);
|
|
14
|
-
for (let i = 0; i < input.length; i++) {
|
|
15
|
-
input[i] = i & 0xff;
|
|
16
|
-
}
|
|
17
|
-
const doubled = new Uint8Array(input.length * 2);
|
|
18
|
-
doubled.set(input, 0);
|
|
19
|
-
doubled.set(input, input.length);
|
|
20
|
-
const plan = buildGreedySequences(doubled);
|
|
21
|
-
const output = executeSequences(plan.literals, plan.sequences, 128 * 1024);
|
|
22
|
-
expect(output).toEqual(doubled);
|
|
23
|
-
expect(plan.sequences.length).toBeGreaterThan(0);
|
|
24
|
-
});
|
|
25
|
-
it('returns literals-only result when no matches exist', () => {
|
|
26
|
-
const input = new TextEncoder().encode('abcdefghijklmnopqrstuvwxyz');
|
|
27
|
-
const plan = buildGreedySequences(input);
|
|
28
|
-
expect(plan.sequences).toEqual([]);
|
|
29
|
-
expect(plan.literals).toEqual(input);
|
|
30
|
-
expect(plan.trailingLiterals).toBe(input.length);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
//# sourceMappingURL=greedySequences.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"greedySequences.test.js","sourceRoot":"","sources":["../../src/encode/greedySequences.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC;IACrC,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,8DAA8D,CAAC,CAAC;QACvG,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAAA,CAClD,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAAA,CAClD,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAAA,CAClD,CAAC,CAAC;AAAA,CACJ,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/dist/entropy/fse.test.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { BitReaderReverse } from '../bitstream/bitReaderReverse.js';
|
|
3
|
-
import { buildFSEDecodeTable, decodeFSESymbol, readNCount } from './fse.js';
|
|
4
|
-
import { LITERALS_LENGTH_DEFAULT_DISTRIBUTION, LITERALS_LENGTH_TABLE_LOG } from './predefined.js';
|
|
5
|
-
describe('FSE', () => {
|
|
6
|
-
it('readNCount decodes 2-symbol distribution', () => {
|
|
7
|
-
const result = readNCount(new Uint8Array([0x10, 0x3f, 0x01]), 0, 255, 12);
|
|
8
|
-
expect(result.tableLog).toBe(5);
|
|
9
|
-
expect(result.maxSymbolValue).toBe(1);
|
|
10
|
-
expect(result.normalizedCounter[0]).toBe(16);
|
|
11
|
-
expect(result.normalizedCounter[1]).toBe(16);
|
|
12
|
-
expect(result.bytesRead).toBe(2);
|
|
13
|
-
});
|
|
14
|
-
it('readNCount matches short-buffer and padded-buffer parsing', () => {
|
|
15
|
-
const short = new Uint8Array([0x10, 0x3f, 0x01]);
|
|
16
|
-
const padded = new Uint8Array([0x10, 0x3f, 0x01, 0, 0, 0, 0, 0]);
|
|
17
|
-
const a = readNCount(short, 0, 255, 12);
|
|
18
|
-
const b = readNCount(padded, 0, 255, 12);
|
|
19
|
-
expect(a.tableLog).toBe(b.tableLog);
|
|
20
|
-
expect(a.maxSymbolValue).toBe(b.maxSymbolValue);
|
|
21
|
-
expect(a.bytesRead).toBe(2);
|
|
22
|
-
expect(b.bytesRead).toBe(2);
|
|
23
|
-
expect(a.normalizedCounter.slice(0, 8)).toEqual(b.normalizedCounter.slice(0, 8));
|
|
24
|
-
});
|
|
25
|
-
it('buildFSEDecodeTable from predefined literals length', () => {
|
|
26
|
-
const table = buildFSEDecodeTable(LITERALS_LENGTH_DEFAULT_DISTRIBUTION, LITERALS_LENGTH_TABLE_LOG);
|
|
27
|
-
expect(table.length).toBe(1 << LITERALS_LENGTH_TABLE_LOG);
|
|
28
|
-
expect(table.every((r) => r.symbol >= 0 && r.numBits >= 0)).toBe(true);
|
|
29
|
-
});
|
|
30
|
-
it('decodeFSESymbol updates state', () => {
|
|
31
|
-
const table = buildFSEDecodeTable(LITERALS_LENGTH_DEFAULT_DISTRIBUTION, LITERALS_LENGTH_TABLE_LOG);
|
|
32
|
-
const data = new Uint8Array([0x55, 0xaa, 0x01]);
|
|
33
|
-
const reader = new BitReaderReverse(data, 0, 3);
|
|
34
|
-
reader.skipPadding();
|
|
35
|
-
const state = { value: 0 };
|
|
36
|
-
const symbol = decodeFSESymbol(table, LITERALS_LENGTH_TABLE_LOG, reader, state);
|
|
37
|
-
expect(typeof symbol).toBe('number');
|
|
38
|
-
expect(state.value).toBeGreaterThanOrEqual(0);
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
//# sourceMappingURL=fse.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fse.test.js","sourceRoot":"","sources":["../../src/entropy/fse.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { BitReaderReverse } from '../bitstream/bitReaderReverse.js';
|
|
3
|
-
import { buildHuffmanDecodeTable, decodeHuffmanSymbol } from './huffman.js';
|
|
4
|
-
describe('Huffman', () => {
|
|
5
|
-
it('builds canonical decode table in rank order', () => {
|
|
6
|
-
const table = buildHuffmanDecodeTable([1, 2, 2], 2);
|
|
7
|
-
expect(table.map((r) => r?.symbol)).toEqual([1, 2, 0, 0]);
|
|
8
|
-
expect(table.map((r) => r?.numBits)).toEqual([2, 2, 1, 1]);
|
|
9
|
-
});
|
|
10
|
-
it('decode consumes symbol bit length (not max bits)', () => {
|
|
11
|
-
const table = buildHuffmanDecodeTable([1, 2, 2], 2);
|
|
12
|
-
// Reverse bitstream payload is first byte; last byte is only the end-mark.
|
|
13
|
-
// For first byte 0b10100000, the first 2-bit peek is binary 10 (index 2),
|
|
14
|
-
// whose row has numBits=1, so one bit must remain unread.
|
|
15
|
-
const reader = new BitReaderReverse(new Uint8Array([0xa0, 0x01]), 0, 2);
|
|
16
|
-
reader.skipPadding();
|
|
17
|
-
const symbol = decodeHuffmanSymbol(table, 2, reader);
|
|
18
|
-
expect(symbol).toBe(0);
|
|
19
|
-
expect(reader.readBits(1)).toBe(0);
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
//# sourceMappingURL=huffman.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"huffman.test.js","sourceRoot":"","sources":["../../src/entropy/huffman.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE5E,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC;IACxB,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAAA,CAC5D,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE,CAAC;QAC3D,MAAM,KAAK,GAAG,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,2EAA2E;QAC3E,0EAA0E;QAC1E,0DAA0D;QAC1D,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAA,CACpC,CAAC,CAAC;AAAA,CACJ,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|