// META: global=window,worker const EXPECTED_SIZE = 27000000; const EXPECTED_SHA256 = [ 74, 100, 37, 243, 147, 61, 116, 60, 241, 221, 126, 18, 24, 71, 204, 28, 50, 62, 201, 130, 152, 225, 217, 183, 10, 201, 143, 214, 102, 155, 212, 248, ]; promise_test(async () => { const response = await fetch('resources/big.text.zst'); assert_true(response.ok); const arrayBuffer = await response.arrayBuffer(); assert_equals(arrayBuffer.byteLength, EXPECTED_SIZE, 'uncompressed size should match'); const sha256 = await crypto.subtle.digest('SHA-256', arrayBuffer); assert_array_equals(new Uint8Array(sha256), EXPECTED_SHA256, 'digest should match'); }, 'large zstd data should be decompressed successfully'); promise_test(async () => { const response = await fetch('resources/big.text.zst'); assert_true(response.ok); const reader = response.body.getReader({mode: 'byob'}); let offset = 0; // Pre-allocate space for the output. The response body will be read // chunk-by-chunk into this array. let ab = new ArrayBuffer(EXPECTED_SIZE); while (offset < EXPECTED_SIZE) { // To stress the data pipe, we want to use a different size read each // time. Unfortunately, JavaScript doesn't have a seeded random number // generator, so this creates the possibility of making this test flaky if // it doesn't work for some edge cases. let size = Math.floor(Math.random() * 65535 + 1); if (size + offset > EXPECTED_SIZE) { size = EXPECTED_SIZE - offset; } const u8 = new Uint8Array(ab, offset, size); const { value, done } = await reader.read(u8); ab = value.buffer; // Check that we got our original array back. assert_equals(ab.byteLength, EXPECTED_SIZE, 'backing array should be the same size'); assert_equals(offset, value.byteOffset, 'offset should match'); assert_less_than_equal(value.byteLength, size, 'we should not have got more than we asked for'); offset = value.byteOffset + value.byteLength; if (done) break; } assert_equals(offset, EXPECTED_SIZE, 'we should have read the whole thing'); const sha256 = await crypto.subtle.digest('SHA-256', new Uint8Array(ab)); assert_array_equals(new Uint8Array(sha256), EXPECTED_SHA256, 'digest should match'); }, 'large zstd data should be decompressed successfully with byte stream');