diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /js/src/tests/shell/futex-apis.js | |
parent | Initial commit. (diff) | |
download | firefox-esr-upstream.tar.xz firefox-esr-upstream.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | js/src/tests/shell/futex-apis.js | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/js/src/tests/shell/futex-apis.js b/js/src/tests/shell/futex-apis.js new file mode 100644 index 0000000000..dd38a1c98b --- /dev/null +++ b/js/src/tests/shell/futex-apis.js @@ -0,0 +1,125 @@ +// |reftest| skip-if(!xulRuntime.shell) +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +if (this.SharedArrayBuffer && this.Atomics) { + +// Checks for parameter validation of wait/wake API. All of these test +// cases should throw exceptions during parameter validation, before +// we check whether any waiting should be done. + +let ab = new ArrayBuffer(16); +let sab = new SharedArrayBuffer(16); + +////////////////////////////////////////////////////////////////////// +// +// The view must be an Int32Array on a SharedArrayBuffer. + +// Check against non-TypedArray cases. + +{ + let values = [null, + undefined, + true, + false, + new Boolean(true), + 10, + 3.14, + new Number(4), + "Hi there", + new Date, + /a*utomaton/g, + { password: "qumquat" }, + new DataView(new ArrayBuffer(10)), + new ArrayBuffer(128), + new SharedArrayBuffer(128), + new Error("Ouch"), + [1,1,2,3,5,8], + ((x) => -x), + new Map(), + new Set(), + new WeakMap(), + new WeakSet(), + new Promise(() => "done"), + Symbol("halleluja"), + // TODO: Proxy? + Object, + Int32Array, + Date, + Math, + Atomics ]; + + for ( let i=0 ; i < values.length ; i++ ) { + let view = values[i]; + assertThrowsInstanceOf(() => Atomics.wait(view, 0, 0), TypeError); + assertThrowsInstanceOf(() => Atomics.wake(view, 0), TypeError); + } +} + +// Check against TypedArray on non-shared memory and wrong view types cases. + +{ + let views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Uint32Array, + Uint8ClampedArray, Float32Array, Float64Array]; + + for ( let View of views ) { + let view = new View(ab); + + assertThrowsInstanceOf(() => Atomics.wait(view, 0, 0), TypeError); + assertThrowsInstanceOf(() => Atomics.wake(view, 0), TypeError); + } +} + +// Check against TypedArray on non-shared memory and correct view types cases. + +{ + let views = [Int32Array]; + + for ( let View of views ) { + let view = new View(ab); + + assertThrowsInstanceOf(() => Atomics.wait(view, 0, 0), TypeError); + assertEq(Atomics.wake(view, 0, 0), 0); + } +} + +// Check against TypedArray on shared memory, but wrong view type + +{ + let views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Uint32Array, + Uint8ClampedArray, Float32Array, Float64Array]; + + for ( let View of views ) { + let view = new View(sab); + + assertThrowsInstanceOf(() => Atomics.wait(view, 0, 0), TypeError); + assertThrowsInstanceOf(() => Atomics.wake(view, 0), TypeError); + } +} + +////////////////////////////////////////////////////////////////////// +// +// The indices must be in the range of the array + +{ + let view = new Int32Array(sab); + + let indices = [ (view) => -1, + (view) => view.length, + (view) => view.length*2, + (view) => '-3.5', + (view) => ({ valueOf: () => -8 }) ]; + + for ( let iidx=0 ; iidx < indices.length ; iidx++ ) { + let Idx = indices[iidx](view); + assertThrowsInstanceOf(() => Atomics.wait(view, Idx, 10), RangeError); + assertThrowsInstanceOf(() => Atomics.wake(view, Idx), RangeError); + } +} + +} // if (this.SharedArrayBuffer && this.Atomics) { ... } + +reportCompare(true,true); |