Files
bun.sh/test/js/web/fetch/blob-cow.test.ts
2024-09-03 21:32:52 -07:00

38 lines
1.0 KiB
TypeScript

import { expect, test } from "bun:test";
test("Blob.arrayBuffer copy-on-write is not shared", async () => {
// 8 MB is the threshold for copy-on-write without --smol.
const bytes = new Uint8Array((1024 * 1024 * 8 * 1.5) | 0);
bytes.fill(42);
bytes[bytes.length - 100] = 43;
const blob = new Blob([bytes]);
bytes.fill(8);
const buf = new Uint8Array(await blob.arrayBuffer());
expect(buf.length).toBe(blob.size);
expect(buf[0]).toBe(42);
expect(buf[buf.length - 1]).toBe(42);
buf[0] = 0;
const buf2 = new Uint8Array(await blob.arrayBuffer());
expect(buf2[0]).toBe(42);
buf2[0] = 1;
expect(buf2[buf.length - 1]).toBe(42);
const buf3 = new Uint8Array(await blob.slice(0, 1).arrayBuffer());
expect(buf3[0]).toBe(42);
buf3[0] = 2;
expect(buf3.length).toBe(1);
const buf4 = new Uint8Array(await blob.slice(blob.size - 100).arrayBuffer());
expect(buf4[0]).toBe(43);
buf4[0] = 3;
expect(buf4.length).toBe(100);
expect(buf[0]).toBe(0);
expect(buf2[0]).toBe(1);
expect(buf3[0]).toBe(2);
expect(buf4[0]).toBe(3);
});