mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 11:37:34 +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:
parent
1c1aa2c0d0
commit
3781948f0c
13 changed files with 347 additions and 0 deletions
|
@ -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");
|
||||
});
|
|
@ -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);
|
||||
});
|
|
@ -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);
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue