1
0
Fork 0
firefox/testing/web-platform/mozilla/tests/compression/zstd/decompression-split-chunk.tentative.any.js
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

66 lines
1.7 KiB
JavaScript

// META: global=window,worker
"use strict";
// The zstd-compressed bytes for the string "expected output".
const compressedZstdBytes = new Uint8Array([
0x28, 0xb5, 0x2f, 0xfd, 0x04, 0x58, 0x79, 0x00, 0x00, 0x65, 0x78, 0x70, 0x65,
0x63, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5b, 0x11,
0xc6, 0x85,
]);
for (let chunkSize = 1; chunkSize < 16; ++chunkSize) {
promise_test(async t => {
const ds = new DecompressionStream("zstd");
const writer = ds.writable.getWriter();
const reader = ds.readable.getReader();
const writePromises = [];
for (
let beginning = 0;
beginning < compressedZstdBytes.length;
beginning += chunkSize
) {
writePromises.push(
writer.write(
compressedZstdBytes.slice(beginning, beginning + chunkSize)
)
);
}
const writerClosePromise = writer.close();
const chunks = [];
while (true) {
const { value, done } = await reader.read();
if (done) {
break;
}
chunks.push(value);
}
await Promise.all(writePromises);
await writerClosePromise;
let totalLength = 0;
for (const chunk of chunks) {
totalLength += chunk.byteLength;
}
const combined = new Uint8Array(totalLength);
let offset = 0;
for (const chunk of chunks) {
combined.set(chunk, offset);
offset += chunk.byteLength;
}
const decompressedText = new TextDecoder().decode(combined);
assert_equals(
decompressedText,
"expected output",
`Decompressed text with chunkSize=${chunkSize} should match the expected output.`
);
}, `decompressing valid zstd input in chunks of size ${chunkSize} should yield "expected output"`);
}