88 lines
2.5 KiB
JavaScript
88 lines
2.5 KiB
JavaScript
// META: global=window,worker
|
|
|
|
"use strict";
|
|
|
|
// The zstd-compressed bytes for the string "expected output!!!!".
|
|
// Note that four exclamation points are added to make the compressed data a multiple of 8 bytes,
|
|
// which is a requirement to test with Float64Array.
|
|
const compressedZstdBytes = [
|
|
0x28, 0xb5, 0x2f, 0xfd, 0x04, 0x58, 0x99, 0x00, 0x00, 0x65, 0x78, 0x70, 0x65,
|
|
0x63, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x21, 0x21,
|
|
0x21, 0x21, 0x2e, 0x4f, 0xe5, 0x2b,
|
|
];
|
|
|
|
const bufferSourceChunksForZstd = [
|
|
{
|
|
name: "ArrayBuffer",
|
|
value: new Uint8Array(compressedZstdBytes).buffer,
|
|
},
|
|
{
|
|
name: "Int8Array",
|
|
value: new Int8Array(new Uint8Array(compressedZstdBytes).buffer),
|
|
},
|
|
{
|
|
name: "Uint8Array",
|
|
value: new Uint8Array(compressedZstdBytes),
|
|
},
|
|
{
|
|
name: "Uint8ClampedArray",
|
|
value: new Uint8ClampedArray(new Uint8Array(compressedZstdBytes).buffer),
|
|
},
|
|
{
|
|
name: "Int16Array",
|
|
value: new Int16Array(new Uint8Array(compressedZstdBytes).buffer),
|
|
},
|
|
{
|
|
name: "Uint16Array",
|
|
value: new Uint16Array(new Uint8Array(compressedZstdBytes).buffer),
|
|
},
|
|
{
|
|
name: "Int32Array",
|
|
value: new Int32Array(new Uint8Array(compressedZstdBytes).buffer),
|
|
},
|
|
{
|
|
name: "Uint32Array",
|
|
value: new Uint32Array(new Uint8Array(compressedZstdBytes).buffer),
|
|
},
|
|
{
|
|
name: "Float16Array",
|
|
value: new Float16Array(new Uint8Array(compressedZstdBytes).buffer),
|
|
},
|
|
{
|
|
name: "Float32Array",
|
|
value: new Float32Array(new Uint8Array(compressedZstdBytes).buffer),
|
|
},
|
|
{
|
|
name: "Float64Array",
|
|
value: new Float64Array(new Uint8Array(compressedZstdBytes).buffer),
|
|
},
|
|
{
|
|
name: "DataView",
|
|
value: new DataView(new Uint8Array(compressedZstdBytes).buffer),
|
|
},
|
|
];
|
|
|
|
for (const chunk of bufferSourceChunksForZstd) {
|
|
promise_test(async t => {
|
|
const ds = new DecompressionStream("zstd");
|
|
const writer = ds.writable.getWriter();
|
|
const reader = ds.readable.getReader();
|
|
|
|
const writePromise = writer.write(chunk.value);
|
|
const writerClosePromise = writer.close();
|
|
|
|
const { value, done } = await reader.read();
|
|
|
|
assert_false(done, "Stream should not be done after reading valid data");
|
|
|
|
await writePromise;
|
|
await writerClosePromise;
|
|
|
|
const decompressedText = new TextDecoder().decode(value);
|
|
assert_equals(
|
|
decompressedText,
|
|
"expected output!!!!",
|
|
`The decompressed text should match the expected text when reading from ${chunk.name}`
|
|
);
|
|
}, `chunk of type ${chunk.name} should work for zstd decompression`);
|
|
}
|