diff --git a/test/built-ins/Atomics/wait/bad-range.js b/test/built-ins/Atomics/wait/bad-range.js new file mode 100644 index 0000000000000000000000000000000000000000..87203dcc29af2aa8b5b019d690b14dc7824ef3c0 --- /dev/null +++ b/test/built-ins/Atomics/wait/bad-range.js @@ -0,0 +1,31 @@ +// Copyright (C) 2017 Mozilla Corporation. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-atomics.wake +description: > + Test range checking of Atomics.wake on arrays that allow atomic operations +info: | + Atomics.wait( typedArray, index, value, timeout ) + + 1. Let buffer be ? ValidateSharedIntegerTypedArray(typedArray, true). + ... + +includes: [testAtomics.js, testTypedArray.js] +features: [ArrayBuffer, arrow-function, Atomics, BigInt, DataView, for-of, let, SharedArrayBuffer, TypedArray] +---*/ + +var sab = new SharedArrayBuffer(8); +var views = [Int32Array]; + +if (typeof BigInt !== "undefined") { + views.push(BigInt64Array); + views.push(BigUint64Array); +} + +testWithTypedArrayConstructors(function(TA) { + let view = new TA(sab); + testWithAtomicsOutOfBoundsIndices(function(IdxGen) { + assert.throws(RangeError, () => Atomics.wake(view, IdxGen(view), 0)); // Even with waking zero + }); +}, views); diff --git a/test/built-ins/Atomics/wait/waiterlist-block-indexedposition-wake.js b/test/built-ins/Atomics/wait/waiterlist-block-indexedposition-wake.js new file mode 100644 index 0000000000000000000000000000000000000000..8f9c1cfade339e3ddbef3216153885f25470708c --- /dev/null +++ b/test/built-ins/Atomics/wait/waiterlist-block-indexedposition-wake.js @@ -0,0 +1,62 @@ +// Copyright (C) 2018 Rick Waldron. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-atomics.wait +description: > + Get the correct WaiterList +info: | + Atomics.wait( typedArray, index, value, timeout ) + + ... + 11. Let WL be GetWaiterList(block, indexedPosition). + ... + + + GetWaiterList( block, i ) + + ... + 4. Return the WaiterList that is referenced by the pair (block, i). + +features: [Atomics, SharedArrayBuffer, TypedArray] +---*/ +function getReport() { + var r; + while ((r = $262.agent.getReport()) == null) { + $262.agent.sleep(10); + } + return r; +} + +$262.agent.start(` +$262.agent.receiveBroadcast(function(sab) { + var i32 = new Int32Array(sab); + + // Wait on index 0 + Atomics.wait(i32, 0, 0, 200); + $262.agent.report("fail"); + $262.agent.leaving(); +}); +`); + +$262.agent.start(` +$262.agent.receiveBroadcast(function(sab) { + var i32 = new Int32Array(sab); + + // Wait on index 2 + Atomics.wait(i32, 2, 0, 200); + $262.agent.report("pass"); + $262.agent.leaving(); +}); +`); + +var length = 4 * Int32Array.BYTES_PER_ELEMENT; +var i32 = new Int32Array(new SharedArrayBuffer(length)); + +$262.agent.broadcast(i32.buffer); +$262.agent.sleep(10); + +// Wake index 2 +Atomics.wake(i32, 2, 1); + +assert.sameValue(getReport(), "pass"); diff --git a/test/built-ins/Atomics/wait/waitlist-order-of-operations-is-fifo.js b/test/built-ins/Atomics/wait/waiterlist-order-of-operations-is-fifo.js similarity index 100% rename from test/built-ins/Atomics/wait/waitlist-order-of-operations-is-fifo.js rename to test/built-ins/Atomics/wait/waiterlist-order-of-operations-is-fifo.js