1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 03:37:45 +00:00

LibJS: Add initial implementation for SharedArrayBuffer

None of the actual sharing is implemented yet, but this is enough for
most basic functionality.

Diff Tests:
    +260     -262    +2 💀
This commit is contained in:
Shannon Booth 2023-07-01 16:07:26 +12:00 committed by Linus Groh
parent 1c1aa2c0d0
commit 3781948f0c
13 changed files with 347 additions and 0 deletions

View file

@ -0,0 +1,19 @@
test("basic functionality", () => {
expect(SharedArrayBuffer).toHaveLength(1);
expect(SharedArrayBuffer.name).toBe("SharedArrayBuffer");
expect(SharedArrayBuffer.prototype.constructor).toBe(SharedArrayBuffer);
expect(new SharedArrayBuffer()).toBeInstanceOf(SharedArrayBuffer);
expect(typeof new SharedArrayBuffer()).toBe("object");
});
test("SharedArrayBuffer constructor must be invoked with 'new'", () => {
expect(() => {
SharedArrayBuffer();
}).toThrowWithMessage(TypeError, "SharedArrayBuffer constructor must be called with 'new'");
});
test("SharedArrayBuffer size limit", () => {
expect(() => {
new SharedArrayBuffer(2 ** 53);
}).toThrowWithMessage(RangeError, "Invalid shared array buffer length");
});

View file

@ -0,0 +1,6 @@
test("basic functionality", () => {
expect(new SharedArrayBuffer().byteLength).toBe(0);
expect(new SharedArrayBuffer(1).byteLength).toBe(1);
expect(new SharedArrayBuffer(64).byteLength).toBe(64);
expect(new SharedArrayBuffer(123).byteLength).toBe(123);
});

View file

@ -0,0 +1,29 @@
test("single parameter", () => {
const buffer = new SharedArrayBuffer(16);
const fullView = new Int32Array(buffer);
// modify some value that we can check in the sliced buffer
fullView[3] = 7;
// slice the buffer and use a new int32 view to perform basic checks
const slicedBuffer = buffer.slice(12);
const slicedView = new Int32Array(slicedBuffer);
expect(slicedView).toHaveLength(1);
expect(slicedView[0]).toBe(7);
});
test("both parameters", () => {
const buffer = new SharedArrayBuffer(16);
const fullView = new Int32Array(buffer);
// modify some value that we can check in the sliced buffer
fullView[1] = 12;
// slice the buffer and use a new int32 view to perform basic checks
const slicedBuffer = buffer.slice(4, 8);
const slicedView = new Int32Array(slicedBuffer);
expect(slicedView).toHaveLength(1);
expect(slicedView[0]).toBe(12);
});