1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-20 16:35:07 +00:00
serenity/Userland/Libraries/LibJS/Tests/builtins/Atomics/Atomics.wait.js
Timothy Flynn 78edaad97d LibJS: Stub out Atomics.wait and Atomics.waitAsync
We don't have the facilities to implement these methods fully (namely, a
fully realized SharedArrayBuffer). But we can implement enough to
validate the values passed in by the user.
2023-11-30 09:51:46 -05:00

76 lines
2.6 KiB
JavaScript

describe("errors", () => {
test("called on non-TypedArray", () => {
expect(() => {
Atomics.wait(Symbol.hasInstance, 0, 0, 0);
}).toThrowWithMessage(TypeError, "Not an object of type TypedArray");
});
test("detached buffer", () => {
expect(() => {
const typedArray = new Int32Array(4);
detachArrayBuffer(typedArray.buffer);
Atomics.wait(typedArray, 0, 0, 0);
}).toThrowWithMessage(TypeError, "ArrayBuffer is detached");
});
test("invalid TypedArray type", () => {
expect(() => {
const typedArray = new Float32Array(4);
Atomics.wait(typedArray, 0, 0, 0);
}).toThrowWithMessage(
TypeError,
"Typed array Float32Array element type is not Int32 or BigInt64"
);
});
test("non-shared ArrayBuffer", () => {
expect(() => {
const typedArray = new Int32Array(4);
Atomics.wait(typedArray, 0, 0, 0);
}).toThrowWithMessage(
TypeError,
"The TypedArray's underlying buffer must be a SharedArrayBuffer"
);
});
test("invalid index", () => {
expect(() => {
const buffer = new SharedArrayBuffer(4 * Int32Array.BYTES_PER_ELEMENT);
const typedArray = new Int32Array(buffer);
Atomics.wait(typedArray, 4, 0, 0);
}).toThrowWithMessage(RangeError, "Index 4 is out of range of array length 4");
});
test("invalid value", () => {
expect(() => {
const buffer = new SharedArrayBuffer(4 * Int32Array.BYTES_PER_ELEMENT);
const typedArray = new Int32Array(buffer);
Atomics.wait(typedArray, 0, Symbol.hasInstance, 0);
}).toThrowWithMessage(TypeError, "Cannot convert symbol to number");
expect(() => {
const buffer = new SharedArrayBuffer(4 * BigInt64Array.BYTES_PER_ELEMENT);
const typedArray = new BigInt64Array(buffer);
Atomics.wait(typedArray, 0, Symbol.hasInstance, 0);
}).toThrowWithMessage(TypeError, "Cannot convert symbol to BigInt");
});
test("invalid timeout", () => {
expect(() => {
const buffer = new SharedArrayBuffer(4 * Int32Array.BYTES_PER_ELEMENT);
const typedArray = new Int32Array(buffer);
Atomics.wait(typedArray, 0, 0, Symbol.hasInstance);
}).toThrowWithMessage(TypeError, "Cannot convert symbol to number");
});
});
test("basic functionality", () => {
test("invariants", () => {
expect(Atomics.wait).toHaveLength(4);
});
});