diff --git a/harness/atomicsHelper.js b/harness/atomicsHelper.js index 52650617081a918281fa9bf2d764f0788862d8f5..81ed6d30d8c24769ff17dd59a531b39dfdf3da54 100644 --- a/harness/atomicsHelper.js +++ b/harness/atomicsHelper.js @@ -1,9 +1,50 @@ // Copyright (C) 2017 Ecma International. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- -description: | - The amount of slack allowed for testing time-related Atomics methods (i.e. - wait and wake). The absolute value of the difference of the observed time - and the expected time must be epsilon-close. +description: > + Collection of functions used to interact with Atomics.* operations across agent boundaries. ---*/ + +var helper = helper || {}; + +/** + * The amount of slack allowed for testing time-related Atomics methods (i.e. wait and wake). + * The absolute value of the difference of the observed time and the expected time must + * be epsilon-close. + */ var $ATOMICS_MAX_TIME_EPSILON = 100; + +/** + * + * @return {[type]} [description] + */ +function getReport() { + var r; + while ((r = $262.agent.getReport()) == null) { + $262.agent.sleep(10); + } + return r; +} +/** + * With a given Int32Array, wait until the expected number of agents have reported themselves by + * calling: + * + * Atomics.add(i32a, index, 1); + * + * @param {Int32Array} i32a An Int32Array with a SharedArrayBuffer + * @param {Number} index The index of which all agents will report. + * @param {Number} expected The number of agents that are expected to report as active. + */ +function waitUntil(i32a, index, expected ) { + var i = 0; + while (Atomics.load(i32a, index) !== expected && i < 15) { + $262.agent.sleep(10); + i++; + } + const agents = Atomics.load(i32a, index); + assert.sameValue(agents, expected , `'agents' equals the value of expected (${expected })`); +} + + +helper.getReport = getReport; +helper.waitUntil = waitUntil; diff --git a/harness/features.yml b/harness/features.yml index b48b15e08b95b5d09068a73d0c18db0c9a177430..0e4d950cd27dd9e0e046c7b8b6dc1dd9fffe3b1d 100644 --- a/harness/features.yml +++ b/harness/features.yml @@ -1,3 +1,4 @@ +atomicsHelper: [Atomics] typeCoercion.js: [Symbol.toPrimitive, BigInt] testAtomics.js: [ArrayBuffer, Atomics, DataView, SharedArrayBuffer, arrow-function, let, for-of] testBigIntTypedArray.js: [BigInt, TypedArray] diff --git a/harness/testAtomics.js b/harness/testAtomics.js index 81f6af3a60226e28a75abd43e02384e3cb13a6c6..790773e42bf6fffbb47c17a5b81f9d030669c942 100644 --- a/harness/testAtomics.js +++ b/harness/testAtomics.js @@ -17,7 +17,7 @@ function testWithAtomicsOutOfBoundsIndices(f) { var bad_indices = [ (view) => -1, (view) => view.length, - (view) => view.length*2, + (view) => view.length * 2, (view) => Number.POSITIVE_INFINITY, (view) => Number.NEGATIVE_INFINITY, (view) => ({ valueOf: () => 125 }), @@ -28,7 +28,7 @@ function testWithAtomicsOutOfBoundsIndices(f) { try { f(IdxGen); } catch (e) { - e.message += " (Testing with index gen " + IdxGen + ".)"; + e.message += ' (Testing with index gen ' + IdxGen + '.)'; throw e; } } @@ -52,7 +52,7 @@ function testWithAtomicsInBoundsIndices(f) { (view) => 0.5, (view) => '0.5', (view) => -0.9, - (view) => ({ password: "qumquat" }), + (view) => ({ password: 'qumquat' }), (view) => view.length - 1, (view) => ({ valueOf: () => 0 }), (view) => ({ toString: () => '0', valueOf: false }) // non-callable valueOf triggers invocation of toString @@ -62,7 +62,7 @@ function testWithAtomicsInBoundsIndices(f) { try { f(IdxGen); } catch (e) { - e.message += " (Testing with index gen " + IdxGen + ".)"; + e.message += ' (Testing with index gen ' + IdxGen + '.)'; throw e; } } @@ -85,21 +85,21 @@ function testWithAtomicsNonViewValues(f) { 10, 3.14, new Number(4), - "Hi there", + 'Hi there', new Date, /a*utomaton/g, - { password: "qumquat" }, + { password: 'qumquat' }, new DataView(new ArrayBuffer(10)), new ArrayBuffer(128), new SharedArrayBuffer(128), - new Error("Ouch"), + new Error('Ouch'), [1,1,2,3,5,8], ((x) => -x), new Map(), new Set(), new WeakMap(), new WeakSet(), - Symbol("halleluja"), + Symbol('halleluja'), // TODO: Proxy? Object, Int32Array, @@ -112,8 +112,9 @@ function testWithAtomicsNonViewValues(f) { try { f(nonView); } catch (e) { - e.message += " (Testing with non-view value " + nonView + ".)"; + e.message += ' (Testing with non-view value ' + nonView + '.)'; throw e; } } } + diff --git a/test/built-ins/Atomics/wait/bad-range.js b/test/built-ins/Atomics/wait/bad-range.js index b435060181c71f7f7a14a517ec73552fb11dfaf0..07373b8055778fc14080cc3e02626385b14da924 100644 --- a/test/built-ins/Atomics/wait/bad-range.js +++ b/test/built-ins/Atomics/wait/bad-range.js @@ -15,8 +15,9 @@ includes: [testAtomics.js] features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(8); -let i32a = new Int32Array(sab); +var i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); testWithAtomicsOutOfBoundsIndices(function(IdxGen) { assert.throws(RangeError, function() { diff --git a/test/built-ins/Atomics/wait/bigint/bad-range.js b/test/built-ins/Atomics/wait/bigint/bad-range.js index f40d76f01a7794bf1e95e2f6f3ae104774f73808..b9a8a2753ddb19ac36d673eb95a7d4bb9e841c6e 100644 --- a/test/built-ins/Atomics/wait/bigint/bad-range.js +++ b/test/built-ins/Atomics/wait/bigint/bad-range.js @@ -2,9 +2,9 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -esid: sec-atomics.wake +esid: sec-atomics.wait description: > - Test range checking of Atomics.wake on arrays that allow atomic operations + Test range checking of Atomics.wait on arrays that allow atomic operations info: | Atomics.wait( typedArray, index, value, timeout ) @@ -15,8 +15,9 @@ includes: [testAtomics.js] features: [ArrayBuffer, arrow-function, Atomics, BigInt, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(8); -let i64a = new BigInt64Array(sab); +const i64a = new BigInt64Array( + new SharedArrayBuffer(BigInt64Array.BYTES_PER_ELEMENT) +); testWithAtomicsOutOfBoundsIndices(function(IdxGen) { assert.throws(RangeError, function() { diff --git a/test/built-ins/Atomics/wait/bigint/cannot-suspend-throws.js b/test/built-ins/Atomics/wait/bigint/cannot-suspend-throws.js index f982fd14e7308904c5a443d082d86b76d130a027..aaa4b5e438f2f3f23025df98ca7cec98b7b0b1ae 100644 --- a/test/built-ins/Atomics/wait/bigint/cannot-suspend-throws.js +++ b/test/built-ins/Atomics/wait/bigint/cannot-suspend-throws.js @@ -18,8 +18,9 @@ features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] flags: [CanBlockIsFalse] ---*/ -var buffer = new SharedArrayBuffer(8); -var i64a = new BigInt64Array(buffer); +const i64a = new BigInt64Array( + new SharedArrayBuffer(BigInt64Array.BYTES_PER_ELEMENT) +); assert.throws(TypeError, function() { Atomics.wait(i64a, 0, 0, 0); diff --git a/test/built-ins/Atomics/wait/bigint/false-for-timeout-agent.js b/test/built-ins/Atomics/wait/bigint/false-for-timeout-agent.js index 8adec5ce05e181bf9b53edbad12265fe1165998b..d6f1a85d2ca63350e09a6bab70dac9c3c9838114 100644 --- a/test/built-ins/Atomics/wait/bigint/false-for-timeout-agent.js +++ b/test/built-ins/Atomics/wait/bigint/false-for-timeout-agent.js @@ -12,37 +12,30 @@ info: | Boolean -> If argument is true, return 1. If argument is false, return +0. +includes: [atomicsHelper.js] features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - $262.agent.start(` - var valueOf = { + const valueOf = { valueOf: function() { return false; } }; - var toPrimitive = { + const toPrimitive = { [Symbol.toPrimitive]: function() { return false; } }; $262.agent.receiveBroadcast(function(sab) { - var i64a = new BigInt64Array(sab); - var start = $262.agent.monotonicNow(); + const i64a = new BigInt64Array(sab); + const before = $262.agent.monotonicNow(); $262.agent.report(Atomics.wait(i64a, 0, 0, false)); $262.agent.report(Atomics.wait(i64a, 0, 0, valueOf)); $262.agent.report(Atomics.wait(i64a, 0, 0, toPrimitive)); - $262.agent.report($262.agent.monotonicNow() - start); + $262.agent.report($262.agent.monotonicNow() - before); $262.agent.leaving(); }); `); @@ -58,11 +51,14 @@ assert.sameValue(getReport(), 'timed-out'); assert.sameValue(getReport(), 'timed-out'); assert.sameValue(getReport(), 'timed-out'); -var lapse = getReport(); - -assert(lapse >= 0, 'timeout should be a min of 0ms'); - -assert(lapse <= $ATOMICS_MAX_TIME_EPSILON, 'timeout should be a max of $$ATOMICS_MAX_TIME_EPSILON'); - +const lapse = getReport(); +assert( + lapse >= 0, + `${lapse} should be greater than, or equal to 0` +); +assert( + lapse <= $ATOMICS_MAX_TIME_EPSILON, + `${lapse} should be less than ${$ATOMICS_MAX_TIME_EPSILON}` +); assert.sameValue(Atomics.wake(i64a, 0), 0); diff --git a/test/built-ins/Atomics/wait/bigint/false-for-timeout.js b/test/built-ins/Atomics/wait/bigint/false-for-timeout.js index 3d9b7f9bbf3af59f6da09082fd728becb244a462..80aab8022f38db67256913073ddce00ee44f461b 100644 --- a/test/built-ins/Atomics/wait/bigint/false-for-timeout.js +++ b/test/built-ins/Atomics/wait/bigint/false-for-timeout.js @@ -16,16 +16,17 @@ features: [Atomics, BigInt, SharedArrayBuffer, Symbol, Symbol.toPrimitive, Typed flags: [CanBlockIsFalse] ---*/ -var buffer = new SharedArrayBuffer(1024); -var i64a = new BigInt64Array(buffer); +const i64a = new BigInt64Array( + new SharedArrayBuffer(BigInt64Array.BYTES_PER_ELEMENT) +); -var valueOf = { +const valueOf = { valueOf: function() { return false; } }; -var toPrimitive = { +const toPrimitive = { [Symbol.toPrimitive]: function() { return false; } diff --git a/test/built-ins/Atomics/wait/bigint/good-views.js b/test/built-ins/Atomics/wait/bigint/good-views.js index eee639f78ca26b2d25591a610bfd9b0c77c41eb3..f478ab396a5759ec4d43d50b235a4538edffe9d4 100644 --- a/test/built-ins/Atomics/wait/bigint/good-views.js +++ b/test/built-ins/Atomics/wait/bigint/good-views.js @@ -6,6 +6,7 @@ esid: sec-atomics.wait description: > Test Atomics.wait on arrays that allow atomic operations, in an Agent that is allowed to wait. +includes: [atomicsHelper.js] features: [Atomics, BigInt] ---*/ @@ -13,17 +14,17 @@ features: [Atomics, BigInt] // even in the shell. $262.agent.start(` - var sab = new SharedArrayBuffer(1024); - var ab = new ArrayBuffer(16); + const sab = new SharedArrayBuffer(1024); + const ab = new ArrayBuffer(16); - var good_indices = [ (view) => 0/-1, // -0 + const good_indices = [ (view) => 0/-1, // -0 (view) => '-0', (view) => view.length - 1, (view) => ({ valueOf: () => 0 }), (view) => ({ toString: () => '0', valueOf: false }) // non-callable valueOf triggers invocation of toString ]; - var view = new BigInt64Array(sab, 32, 20); + const view = new BigInt64Array(sab, 32, 20); view[0] = 0; $262.agent.report("A " + Atomics.wait(view, 0, 0, 0)) @@ -45,15 +46,8 @@ $262.agent.start(` assert.sameValue(getReport(), "A timed-out"); assert.sameValue(getReport(), "B not-equal"); // Even with zero timeout + var r; while ((r = getReport()) != "done") { assert.sameValue(r, "C not-equal"); } - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} diff --git a/test/built-ins/Atomics/wait/bigint/nan-for-timeout.js b/test/built-ins/Atomics/wait/bigint/nan-for-timeout.js index 9543c6118ec5de192da99c00035950e0f26fb055..de856641646a88b4a68dfe34820e3cf912969ac4 100644 --- a/test/built-ins/Atomics/wait/bigint/nan-for-timeout.js +++ b/test/built-ins/Atomics/wait/bigint/nan-for-timeout.js @@ -13,20 +13,13 @@ info: | Undefined Return NaN. 5.If q is NaN, let t be +∞, else let t be max(q, 0) +includes: [atomicsHelper.js] features: [Atomics, BigInt, 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 i64a = new BigInt64Array(sab); + const i64a = new BigInt64Array(sab); $262.agent.report(Atomics.wait(i64a, 0, 0, NaN)); // NaN => +Infinity $262.agent.leaving(); }); @@ -39,4 +32,4 @@ const i64a = new BigInt64Array( $262.agent.broadcast(i64a.buffer); $262.agent.sleep(100); assert.sameValue(Atomics.wake(i64a, 0), 1); -assert.sameValue(getReport(), "ok"); +assert.sameValue(getReport(), 'ok'); diff --git a/test/built-ins/Atomics/wait/bigint/negative-index-throws.js b/test/built-ins/Atomics/wait/bigint/negative-index-throws.js index 8037e552954683cfc148770d876bf7f90b8e8f15..8da783be7d13ae2bf90c93daac40c7ce7ba0187a 100644 --- a/test/built-ins/Atomics/wait/bigint/negative-index-throws.js +++ b/test/built-ins/Atomics/wait/bigint/negative-index-throws.js @@ -21,7 +21,7 @@ const i64a = new BigInt64Array( ); const poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; diff --git a/test/built-ins/Atomics/wait/bigint/negative-timeout-agent.js b/test/built-ins/Atomics/wait/bigint/negative-timeout-agent.js index a3de63681a2d095b61e50be73295a9c4401841ff..f8324d04e39c620c0c7e6e803b8461c83417cd3a 100644 --- a/test/built-ins/Atomics/wait/bigint/negative-timeout-agent.js +++ b/test/built-ins/Atomics/wait/bigint/negative-timeout-agent.js @@ -5,21 +5,14 @@ esid: sec-atomics.wait description: > Test that Atomics.wait times out with a negative timeout +includes: [atomicsHelper.js] features: [Atomics, BigInt, 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, id) { - var ia = new BigInt64Array(sab); - $262.agent.report(Atomics.wait(ia, 0, 0, -5)); // -5 => 0 + const i64a = new BigInt64Array(sab); + $262.agent.report(Atomics.wait(i64a, 0, 0, -5)); // -5 => 0 $262.agent.leaving(); }); `); @@ -29,5 +22,6 @@ const i64a = new BigInt64Array( ); $262.agent.broadcast(i64a.buffer); -assert.sameValue(getReport(), "timed-out"); +$262.agent.sleep(10); +assert.sameValue(getReport(), 'timed-out'); assert.sameValue(Atomics.wake(i64a, 0), 0); diff --git a/test/built-ins/Atomics/wait/bigint/did-timeout.js b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-no-operation.js similarity index 59% rename from test/built-ins/Atomics/wait/bigint/did-timeout.js rename to test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-no-operation.js index e98c78ef5169dde687ee4f99f7b30404f5a93cdc..7e3486dbf6186daaa95012d317d70007d707655e 100644 --- a/test/built-ins/Atomics/wait/bigint/did-timeout.js +++ b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-no-operation.js @@ -1,4 +1,4 @@ -// Copyright (C) 2018 Rick Waldron. All rights reserved. +// Copyright (C) 2017 Mozilla Corporation. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- @@ -12,23 +12,18 @@ description: > a. Assert: W is not on the list of waiters in WL. 19. Else, a.Perform RemoveWaiter(WL, W). +includes: [atomicsHelper.js] features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - +const TIMEOUT = 500; $262.agent.start(` $262.agent.receiveBroadcast(function(sab, id) { const i64a = new BigInt64Array(sab); - const then = $262.agent.monotonicNow(); - $262.agent.report(Atomics.wait(i64a, 0, 0, 500)); // Timeout 500ms - $262.agent.report($262.agent.monotonicNow() - then); // Actual time can be more than 500ms + const before = $262.agent.monotonicNow(); + const unpark = Atomics.wait(i64a, 0, 0, ${TIMEOUT}); + $262.agent.report($262.agent.monotonicNow() - before); + $262.agent.report(unpark); $262.agent.leaving(); }); `); @@ -39,6 +34,13 @@ const i64a = new BigInt64Array( $262.agent.broadcast(i64a.buffer); $262.agent.sleep(100); -assert.sameValue(getReport(), "timed-out"); -assert.sameValue((getReport() | 0) >= 500 - $ATOMICS_MAX_TIME_EPSILON, true); +// NO OPERATION OCCURS HERE! + +const lapse = getReport(); +assert( + lapse >= TIMEOUT, + `${lapse} should be at least ${TIMEOUT}` +); +assert.sameValue(getReport(), 'timed-out'); +assert.sameValue(Atomics.wake(i64a, 0), 0); diff --git a/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-add.js b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-add.js index ee9a78e4ddcc6d4a93f0ceb087236bb90826424b..afb26a6728e4701226d7ae20e148925fcfea4b85 100644 --- a/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-add.js +++ b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-add.js @@ -4,16 +4,10 @@ /*--- esid: sec-atomics.wait description: > - Demonstrates that Atomics.store(...) is causing a waiting -features: [Atomics, SharedArrayBuffer, TypedArray] + Waiter does not spuriously wake on index which is subject to Add operation +includes: [atomicsHelper.js] +features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} const TIMEOUT = 2000; const i64a = new BigInt64Array( @@ -22,9 +16,9 @@ const i64a = new BigInt64Array( $262.agent.start(` $262.agent.receiveBroadcast(function(sab) { - var i64a = new BigInt64Array(sab); - var before = $262.agent.monotonicNow(); - var unpark = Atomics.wait(i64a, 0, 0, ${TIMEOUT}); + const i64a = new BigInt64Array(sab); + const before = $262.agent.monotonicNow(); + const unpark = Atomics.wait(i64a, 0, 0, ${TIMEOUT}); $262.agent.report($262.agent.monotonicNow() - before); $262.agent.report(unpark); $262.agent.leaving(); diff --git a/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-and.js b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-and.js index 1e056bb72b8b6830ba7485547d0f144c5b4d2b14..533bb27cf112dc1e69ae56d3dd4a2a221f1c0827 100644 --- a/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-and.js +++ b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-and.js @@ -5,16 +5,9 @@ esid: sec-atomics.wait description: > Waiter does not spuriously wake on index which is subject to And operation -features: [Atomics, SharedArrayBuffer, TypedArray] +includes: [testAtomics.js] +features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - const TIMEOUT = 2000; const i64a = new BigInt64Array( new SharedArrayBuffer(BigInt64Array.BYTES_PER_ELEMENT) diff --git a/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-compareExchange.js b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-compareExchange.js index ee07ce4edba928624c52aaa44d9886d78e805f3b..60a5b9a2e15c74eae615e08f841bc680b91ac427 100644 --- a/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-compareExchange.js +++ b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-compareExchange.js @@ -5,16 +5,9 @@ esid: sec-atomics.wait description: > Waiter does not spuriously wake on index which is subject to compareExchange operation -features: [Atomics, SharedArrayBuffer, TypedArray] +includes: [testAtomics.js] +features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - const TIMEOUT = 2000; const i64a = new BigInt64Array( new SharedArrayBuffer(BigInt64Array.BYTES_PER_ELEMENT) diff --git a/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-exchange.js b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-exchange.js index 7c1d11e91b9f9920c62369b6894d83a43719128a..fa3c7dc027501023459a429f60bc3bc210fb067b 100644 --- a/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-exchange.js +++ b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-exchange.js @@ -5,16 +5,9 @@ esid: sec-atomics.wait description: > Waiter does not spuriously wake on index which is subject to exchange operation -features: [Atomics, SharedArrayBuffer, TypedArray] +includes: [testAtomics.js] +features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - const TIMEOUT = 2000; const i64a = new BigInt64Array( new SharedArrayBuffer(BigInt64Array.BYTES_PER_ELEMENT) diff --git a/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-or.js b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-or.js index 03d05e02c61f1810e6295e1df1c5f65ed2531e8e..60f004ea216d84f03281b1e18244949775733fc3 100644 --- a/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-or.js +++ b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-or.js @@ -5,16 +5,9 @@ esid: sec-atomics.wait description: > Waiter does not spuriously wake on index which is subject to Or operation -features: [Atomics, SharedArrayBuffer, TypedArray] +includes: [testAtomics.js] +features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - const TIMEOUT = 2000; const i64a = new BigInt64Array( new SharedArrayBuffer(BigInt64Array.BYTES_PER_ELEMENT) diff --git a/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-store.js b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-store.js index b97b74ba993429711ec09a7409e8cb2e2cf966b4..9429f6ef75d3d9a58cd24fe92924f264199fea86 100644 --- a/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-store.js +++ b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-store.js @@ -5,16 +5,9 @@ esid: sec-atomics.wait description: > Demonstrates that Atomics.store(...) is causing a waiting +includes: [testAtomics.js] features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - const TIMEOUT = 2000; const i64a = new BigInt64Array( new SharedArrayBuffer(BigInt64Array.BYTES_PER_ELEMENT) diff --git a/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-sub.js b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-sub.js index 7412a9adcb4fa7576e983a80cd7257e31507dca4..050749ad9f387ace383b395306629e1073ec3727 100644 --- a/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-sub.js +++ b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-sub.js @@ -5,16 +5,9 @@ esid: sec-atomics.wait description: > Waiter does not spuriously wake on index which is subject to Sub operation -features: [Atomics, SharedArrayBuffer, TypedArray] +includes: [testAtomics.js] +features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - const TIMEOUT = 2000; const i64a = new BigInt64Array( new SharedArrayBuffer(BigInt64Array.BYTES_PER_ELEMENT) diff --git a/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-xor.js b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-xor.js index 20a711343636309a32927398b5f4413c250d8668..47a044c44c94417dc6b63ce0930e8a7d05abd38a 100644 --- a/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-xor.js +++ b/test/built-ins/Atomics/wait/bigint/no-spurious-wakeup-on-xor.js @@ -5,16 +5,9 @@ esid: sec-atomics.wait description: > Waiter does not spuriously wake on index which is subject to xor operation -features: [Atomics, SharedArrayBuffer, TypedArray] +includes: [testAtomics.js] +features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - const TIMEOUT = 2000; const i64a = new BigInt64Array( new SharedArrayBuffer(BigInt64Array.BYTES_PER_ELEMENT) diff --git a/test/built-ins/Atomics/wait/bigint/non-bigint64-typedarray-throws.js b/test/built-ins/Atomics/wait/bigint/non-bigint64-typedarray-throws.js index 81b22757fc572d186de42cb3400df0da589d02d1..8d8ebc0755f56294964a89febd57b40d7a12d3ce 100644 --- a/test/built-ins/Atomics/wait/bigint/non-bigint64-typedarray-throws.js +++ b/test/built-ins/Atomics/wait/bigint/non-bigint64-typedarray-throws.js @@ -2,27 +2,42 @@ // This code is governed by the BSD license found in the LICENSE file. /*--- -esid: sec-atomics.wait +esid: sec-validatesharedintegertypedarray description: > - Throws a TypeError if typedArray arg is not an BigInt64Array + Throws a TypeError if typedArray arg is not a BigInt64Array info: | Atomics.wait( typedArray, index, value, timeout ) 1.Let buffer be ? ValidateSharedIntegerTypedArray(typedArray, true). - ... - 5.If onlyBigInt64 is true, then - If typeName is not "BigInt64Array" or "BigInt64Array", throw a TypeError exception. -features: [Atomics, Float32Array, Float64Array, Int8Array, TypedArray, Uint16Array, Uint8Array, Uint8ClampedArray] + ... + + + ValidateSharedIntegerTypedArray(typedArray [ , waitable ] ) + + ... + 5. If waitable is true, then + a. If typeName is not "Int32Array" or "BigInt64Array", + throw a TypeError exception. + +features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] includes: [testAtomics.js, testBigIntTypedArray.js] ---*/ -var poisoned = { +const i64a = new BigUint64Array( + new SharedArrayBuffer(BigUint64Array.BYTES_PER_ELEMENT) +); + +const poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; assert.throws(TypeError, function() { - Atomics.wait(new BigUint64Array(), poisoned, poisoned, poisoned); + Atomics.wait(i64a, 0, 0, 0); +}, 'BigUint64Array'); + +assert.throws(TypeError, function() { + Atomics.wait(i64a, poisoned, poisoned, poisoned); }, 'BigUint64Array'); diff --git a/test/built-ins/Atomics/wait/bigint/non-shared-bufferdata-throws.js b/test/built-ins/Atomics/wait/bigint/non-shared-bufferdata-throws.js index 9bb706ff59c2c6f1b5a197171f0bf3d4d5bd7680..cbe7776b1d8156e3cd5fbb9ceb09665733a7649c 100644 --- a/test/built-ins/Atomics/wait/bigint/non-shared-bufferdata-throws.js +++ b/test/built-ins/Atomics/wait/bigint/non-shared-bufferdata-throws.js @@ -15,17 +15,20 @@ info: | features: [ArrayBuffer, Atomics, BigInt, TypedArray] ---*/ -var i64a = new BigInt64Array(new ArrayBuffer(4)); -var poisoned = { +const i64a = new BigInt64Array( + new ArrayBuffer(BigInt64Array.BYTES_PER_ELEMENT) +); + +const poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; assert.throws(TypeError, function() { Atomics.wait(i64a, 0, 0, 0); -}); +}, 'Atomics.wait(i64a, 0, 0, 0) on ArrayBuffer throws TypeError'); assert.throws(TypeError, function() { Atomics.wait(i64a, poisoned, poisoned, poisoned); -}); +}, 'Atomics.wait(i64a, poisoned, poisoned, poisoned) on ArrayBuffer throws TypeError'); diff --git a/test/built-ins/Atomics/wait/bigint/null-bufferdata-throws.js b/test/built-ins/Atomics/wait/bigint/null-bufferdata-throws.js index 3707ceafe1243de4bd1b46900b493f80a6262d8d..69d24c938eab044e32c3f6b4f4713a3bc4016ccd 100644 --- a/test/built-ins/Atomics/wait/bigint/null-bufferdata-throws.js +++ b/test/built-ins/Atomics/wait/bigint/null-bufferdata-throws.js @@ -8,23 +8,38 @@ info: | Atomics.wait( typedArray, index, value, timeout ) 1.Let buffer be ? ValidateSharedIntegerTypedArray(typedArray, true). - ... - 9.If IsSharedArrayBuffer(buffer) is false, throw a TypeError exception. - ... - 3.If bufferData is null, return false. + ... + + ValidateSharedIntegerTypedArray(typedArray [ , onlyInt32 ] ) + + ... + 9.If IsSharedArrayBuffer(buffer) is false, throw a TypeError exception. + + + IsSharedArrayBuffer( obj ) + + ... + 3.If bufferData is null, return false. + includes: [detachArrayBuffer.js] features: [ArrayBuffer, Atomics, BigInt, TypedArray] ---*/ -var i64a = new BigInt64Array(new ArrayBuffer(1024)); -var poisoned = { +const i64a = new BigInt64Array( + new SharedArrayBuffer(BigInt64Array.BYTES_PER_ELEMENT) +); +const poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; -$DETACHBUFFER(i64a.buffer); // Detaching a non-shared ArrayBuffer sets the [[ArrayBufferData]] value to null +try { + $DETACHBUFFER(i64a.buffer); // Detaching a non-shared ArrayBuffer sets the [[ArrayBufferData]] value to null +} catch (error) { + $ERROR(`An unexpected error occurred when detaching ArrayBuffer: ${error.message}`); +} assert.throws(TypeError, function() { Atomics.wait(i64a, poisoned, poisoned, poisoned); -}); +}, 'Atomics.wait(i64a, poisoned, poisoned, poisoned) on detached buffer throwes TypeError'); diff --git a/test/built-ins/Atomics/wait/bigint/out-of-range-index-throws.js b/test/built-ins/Atomics/wait/bigint/out-of-range-index-throws.js index d192847026dba57906410d99b6eaac0a17145f05..d8a6b420a172b909a6c5e7db6e9c7b402a0ceb9f 100644 --- a/test/built-ins/Atomics/wait/bigint/out-of-range-index-throws.js +++ b/test/built-ins/Atomics/wait/bigint/out-of-range-index-throws.js @@ -22,7 +22,7 @@ const i64a = new BigInt64Array( const poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; diff --git a/test/built-ins/Atomics/wait/bigint/value-not-equal.js b/test/built-ins/Atomics/wait/bigint/value-not-equal.js index b6e07e27e2f0673a10e51141e9d7dba0e13c5adf..6ed7eaa7735299abab9a6bf84e12e4404e2cd19e 100644 --- a/test/built-ins/Atomics/wait/bigint/value-not-equal.js +++ b/test/built-ins/Atomics/wait/bigint/value-not-equal.js @@ -14,22 +14,15 @@ info: | a.Perform LeaveCriticalSection(WL). b. Return the String "not-equal". +includes: [atomicsHelper.js] features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - var value = 42; $262.agent.start(` $262.agent.receiveBroadcast(function(sab) { - var i64a = new BigInt64Array(sab); + const i64a = new BigInt64Array(sab); $262.agent.report(Atomics.store(i64a, 0, ${value})); $262.agent.report(Atomics.wait(i64a, 0, 0)); diff --git a/test/built-ins/Atomics/wait/bigint/waiterlist-block-indexedposition-wake.js b/test/built-ins/Atomics/wait/bigint/waiterlist-block-indexedposition-wake.js index 8d4e994d78475a1e319f9f816581dd21f05cec6e..bedd9f0b288e78f67cb9fa7d1dbcb7240788d8de 100644 --- a/test/built-ins/Atomics/wait/bigint/waiterlist-block-indexedposition-wake.js +++ b/test/built-ins/Atomics/wait/bigint/waiterlist-block-indexedposition-wake.js @@ -18,19 +18,13 @@ info: | ... 4. Return the WaiterList that is referenced by the pair (block, i). +includes: [atomicsHelper.js] features: [Atomics, BigInt, 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 i64a = new BigInt64Array(sab); + const i64a = new BigInt64Array(sab); // Wait on index 0 Atomics.wait(i64a, 0, 0, 200); @@ -41,7 +35,7 @@ $262.agent.start(` $262.agent.start(` $262.agent.receiveBroadcast(function(sab) { - var i64a = new BigInt64Array(sab); + const i64a = new BigInt64Array(sab); // Wait on index 2 Atomics.wait(i64a, 2, 0, 200); @@ -59,9 +53,9 @@ $262.agent.sleep(10); // Wake index 2 Atomics.wake(i64a, 2, 1); -assert.sameValue(getReport(), "2"); +assert.sameValue(getReport(), '2'); // Wake index 0 -Atomics.wake(i64a, 2, 1); -assert.sameValue(getReport(), "0"); +Atomics.wake(i64a, 0, 1); +assert.sameValue(getReport(), '0'); diff --git a/test/built-ins/Atomics/wait/bigint/waiterlist-order-of-operations-is-fifo.js b/test/built-ins/Atomics/wait/bigint/waiterlist-order-of-operations-is-fifo.js index ae7b4fa1ffd6ad29372138fe2b2fb901361723ab..948eac8ce3d075b32db96bd71f98c0488557384d 100644 --- a/test/built-ins/Atomics/wait/bigint/waiterlist-order-of-operations-is-fifo.js +++ b/test/built-ins/Atomics/wait/bigint/waiterlist-order-of-operations-is-fifo.js @@ -12,78 +12,66 @@ info: | ... 3.Add W to the end of the list of waiters in WL. +includes: [atomicsHelper.js] features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] ---*/ - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - -var agent1 = '1'; -var agent2 = '2'; -var agent3 = '3'; +const agent1 = '1'; +const agent2 = '2'; +const agent3 = '3'; $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i64a = new BigInt64Array(sab); - - $262.agent.report(${agent1}); - Atomics.wait(i64a, 0, 0); - $262.agent.report(${agent1}); - - $262.agent.leaving(); -}) + $262.agent.receiveBroadcast(function(sab) { + const i64a = new BigInt64Array(sab); + + $262.agent.report(${agent1}); + $262.agent.report(Atomics.wait(i64a, 1, 0)); + $262.agent.report(${agent1}); + $262.agent.leaving(); + }); `); -$262.agent.start( - ` -$262.agent.receiveBroadcast(function(sab) { - var i64a = new BigInt64Array(sab); - - $262.agent.report(${agent2}); - - Atomics.wait(i64a, 0, 0); - $262.agent.report(${agent2}); - - $262.agent.leaving(); -}) +$262.agent.start(` + $262.agent.receiveBroadcast(function(sab) { + const i64a = new BigInt64Array(sab); + + $262.agent.report(${agent2}); + $262.agent.report(Atomics.wait(i64a, 2, 0)); + $262.agent.report(${agent2}); + $262.agent.leaving(); + }); `); -$262.agent.start( - ` -$262.agent.receiveBroadcast(function(sab) { - var i64a = new BigInt64Array(sab); - - $262.agent.report(${agent3}); - - Atomics.wait(i64a, 0, 0); - $262.agent.report(${agent3}); - - $262.agent.leaving(); -}) +$262.agent.start(` + $262.agent.receiveBroadcast(function(sab) { + const i64a = new BigInt64Array(sab); + + $262.agent.report(${agent3}); + $262.agent.report(Atomics.wait(i64a, 3, 0)); + $262.agent.report(${agent3}); + $262.agent.leaving(); + }); `); -var i64a = new BigInt64Array(new SharedArrayBuffer(4)); +const i64a = new BigInt64Array( + new SharedArrayBuffer(4 * BigInt64Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i64a.buffer); +$262.agent.sleep(500); -var orderWhichAgentsWereStarted = getReport() + getReport() + getReport(); // can be started in any order - -assert.sameValue(Atomics.wake(i64a, 0, 1), 1); - -var orderAgentsWereWoken = getReport(); - -assert.sameValue(Atomics.wake(i64a, 0, 1), 1); - -orderAgentsWereWoken += getReport(); +// Agents may be started in any order... +const started = [getReport(), getReport(), getReport()]; -assert.sameValue(Atomics.wake(i64a, 0, 1), 1); +// Agents must wake in the order they waited +assert.sameValue(Atomics.wake(i64a, 1, 1), 1); +assert.sameValue(getReport(), 'ok'); +assert.sameValue(getReport(), started[0]); -orderAgentsWereWoken += getReport(); +assert.sameValue(Atomics.wake(i64a, 2, 1), 1); +assert.sameValue(getReport(), 'ok'); +assert.sameValue(getReport(), started[1]); -assert.sameValue(orderWhichAgentsWereStarted, orderAgentsWereWoken); // agents should wake in the same order as they were started FIFO +assert.sameValue(Atomics.wake(i64a, 3, 1), 1); +assert.sameValue(getReport(), 'ok'); +assert.sameValue(getReport(), started[2]); diff --git a/test/built-ins/Atomics/wait/bigint/was-woken-before-timeout.js b/test/built-ins/Atomics/wait/bigint/was-woken-before-timeout.js index fd452d1bd85d82915d9c6e11a3ebc066705f65a4..0b975788ebef96fe89f514879b0cea3305add5c1 100644 --- a/test/built-ins/Atomics/wait/bigint/was-woken-before-timeout.js +++ b/test/built-ins/Atomics/wait/bigint/was-woken-before-timeout.js @@ -18,38 +18,39 @@ info: | If value is undefined, then Let index be 0. +includes: [atomicsHelper.js] features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] ---*/ var sleeping = 10; var timeout = 20000; -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - sleeping += 10; - $262.agent.sleep(10); - } - return r; -} - $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i64a = new BigInt64Array(sab); - $262.agent.report(Atomics.wait(i64a, 0, 0, ${timeout})); - $262.agent.leaving(); -}); + $262.agent.receiveBroadcast(function(sab) { + const i64a = new BigInt64Array(sab); + const before = $262.agent.monotonicNow(); + const unpark = Atomics.wait(i64a, 0, 0, ${timeout}); + $262.agent.report($262.agent.monotonicNow() - before); + $262.agent.report(unpark); + $262.agent.leaving(); + }); `); -var sab = new SharedArrayBuffer(4); -var i64a = new BigInt64Array(sab); - +const i64a = new BigInt64Array( + new SharedArrayBuffer(BigInt64Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i64a.buffer); $262.agent.sleep(sleeping); assert.sameValue(Atomics.wake(i64a, 0), 1); -assert.sameValue(getReport(), "ok"); -assert(sleeping < timeout, "this test assumes it won't last for more than 20 seconds"); +const lapse = getReport(); + +assert( + sleeping + lapse < timeout, + `${sleeping + lapse} should be less than ${timeout}` +); +assert.sameValue(getReport(), 'ok'); + diff --git a/test/built-ins/Atomics/wait/bigint/was-woken.js b/test/built-ins/Atomics/wait/bigint/was-woken.js deleted file mode 100644 index eedac503fbaa88193f10a43388bdbf28017fb696..0000000000000000000000000000000000000000 --- a/test/built-ins/Atomics/wait/bigint/was-woken.js +++ /dev/null @@ -1,32 +0,0 @@ -// 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: > - Test that Atomics.wait returns the right result when it was awoken. -features: [Atomics, BigInt, 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, id) { - var i64a = new BigInt64Array(sab); - $262.agent.report(Atomics.wait(i64a, 0, 0)); // No timeout => Infinity - $262.agent.leaving(); -}); -`); - -var i64a = new BigInt64Array(new SharedArrayBuffer(BigInt64Array.BYTES_PER_ELEMENT)); - -$262.agent.broadcast(i64a.buffer); -$262.agent.sleep(50); // Give the agent a chance to wait -Atomics.wake(i64a, 0); -assert.sameValue(getReport(), "ok"); diff --git a/test/built-ins/Atomics/wait/cannot-suspend-throws.js b/test/built-ins/Atomics/wait/cannot-suspend-throws.js index dc34bde85aecdf558f9ad547c634f777300fc140..d453b5ecda3499e01e491b371fa6b3f7cd75a857 100644 --- a/test/built-ins/Atomics/wait/cannot-suspend-throws.js +++ b/test/built-ins/Atomics/wait/cannot-suspend-throws.js @@ -18,8 +18,9 @@ features: [Atomics, SharedArrayBuffer, TypedArray] flags: [CanBlockIsFalse] ---*/ -var buffer = new SharedArrayBuffer(4); -var i32a = new Int32Array(buffer); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); assert.throws(TypeError, function() { Atomics.wait(i32a, 0, 0, 0); diff --git a/test/built-ins/Atomics/wait/did-timeout.js b/test/built-ins/Atomics/wait/did-timeout.js deleted file mode 100644 index c3fe8a8270f7ad91fae59facc570ba0416ff27a2..0000000000000000000000000000000000000000 --- a/test/built-ins/Atomics/wait/did-timeout.js +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (C) 2017 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: sec-atomics.wait -description: > - Test that Atomics.wait returns the right result when it timed out and that - the time to time out is reasonable. - info: | - 17. Let awoken be Suspend(WL, W, t). - 18. If awoken is true, then - a. Assert: W is not on the list of waiters in WL. - 19. Else, - a.Perform RemoveWaiter(WL, W). -includes: [atomicsHelper.js] -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, id) { - var i32a = new Int32Array(sab); - var before = $262.agent.monotonicNow(); - $262.agent.report(Atomics.wait(i32a, 0, 0, 500)); // Timeout 500ms - $262.agent.report($262.agent.monotonicNow() - before); // Actual time can be more than 500ms - $262.agent.leaving(); -}); -`); - -var i32a = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); - -$262.agent.broadcast(i32a.buffer); -assert.sameValue(getReport(), "timed-out"); -assert.sameValue((getReport() | 0) >= 500 - $ATOMICS_MAX_TIME_EPSILON, true); - diff --git a/test/built-ins/Atomics/wait/false-for-timeout-agent.js b/test/built-ins/Atomics/wait/false-for-timeout-agent.js index 3322d669b70e7383c47f759b36b29fbec3644ade..609f5657b9b23a0d9b5c9c453e20063d5b5167c4 100644 --- a/test/built-ins/Atomics/wait/false-for-timeout-agent.js +++ b/test/built-ins/Atomics/wait/false-for-timeout-agent.js @@ -12,40 +12,32 @@ info: | Boolean -> If argument is true, return 1. If argument is false, return +0. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] -includes: [ atomicsHelper.js ] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - $262.agent.start(` -var valueOf = { - valueOf: function() { - return false; - } -}; - -var toPrimitive = { - [Symbol.toPrimitive]: function() { - return false; - } -}; - -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - var before = $262.agent.monotonicNow(); - $262.agent.report(Atomics.wait(i32a, 0, 0, false)); - $262.agent.report(Atomics.wait(i32a, 0, 0, valueOf)); - $262.agent.report(Atomics.wait(i32a, 0, 0, toPrimitive)); - $262.agent.report($262.agent.monotonicNow() - before); - $262.agent.leaving(); -}); + const valueOf = { + valueOf: function() { + return false; + } + }; + + const toPrimitive = { + [Symbol.toPrimitive]: function() { + return false; + } + }; + + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + const before = $262.agent.monotonicNow(); + $262.agent.report(Atomics.wait(i32a, 0, 0, false)); + $262.agent.report(Atomics.wait(i32a, 0, 0, valueOf)); + $262.agent.report(Atomics.wait(i32a, 0, 0, toPrimitive)); + $262.agent.report($262.agent.monotonicNow() - before); + $262.agent.leaving(); + }); `); const i32a = new Int32Array( diff --git a/test/built-ins/Atomics/wait/false-for-timeout.js b/test/built-ins/Atomics/wait/false-for-timeout.js index 86463f3d619ce3fb76ab84fca5a723a747991b26..fca789f8c3c088f29229ddcfee548de32702f97a 100644 --- a/test/built-ins/Atomics/wait/false-for-timeout.js +++ b/test/built-ins/Atomics/wait/false-for-timeout.js @@ -32,7 +32,7 @@ const toPrimitive = { } }; -assert.sameValue(Atomics.wait(i32a, 0, 0, false), "timed-out"); -assert.sameValue(Atomics.wait(i32a, 0, 0, valueOf), "timed-out"); -assert.sameValue(Atomics.wait(i32a, 0, 0, toPrimitive), "timed-out"); +assert.sameValue(Atomics.wait(i32a, 0, 0, false), 'timed-out'); +assert.sameValue(Atomics.wait(i32a, 0, 0, valueOf), 'timed-out'); +assert.sameValue(Atomics.wait(i32a, 0, 0, toPrimitive), 'timed-out'); diff --git a/test/built-ins/Atomics/wait/good-views.js b/test/built-ins/Atomics/wait/good-views.js index efbaa86950605c3992079ec6824afc7918baf385..9b6b253de8c232c32f3eb38c56e4f0c4bfc7b899 100644 --- a/test/built-ins/Atomics/wait/good-views.js +++ b/test/built-ins/Atomics/wait/good-views.js @@ -6,6 +6,7 @@ esid: sec-atomics.wait description: > Test Atomics.wait on arrays that allow atomic operations, in an Agent that is allowed to wait. +includes: [atomicsHelper.js] features: [Atomics] ---*/ @@ -13,47 +14,40 @@ features: [Atomics] // even in the shell. $262.agent.start(` -var sab = new SharedArrayBuffer(1024); -var ab = new ArrayBuffer(16); - -var good_indices = [ (view) => 0/-1, // -0 - (view) => '-0', - (view) => view.length - 1, - (view) => ({ valueOf: () => 0 }), - (view) => ({ toString: () => '0', valueOf: false }) // non-callable valueOf triggers invocation of toString - ]; - -var view = new Int32Array(sab, 32, 20); - -view[0] = 0; -$262.agent.report("A " + Atomics.wait(view, 0, 0, 0)) -$262.agent.report("B " + Atomics.wait(view, 0, 37, 0)); - -// In-bounds boundary cases for indexing -for ( let IdxGen of good_indices ) { - let Idx = IdxGen(view); - view.fill(0); - // Atomics.store() computes an index from Idx in the same way as other - // Atomics operations, not quite like view[Idx]. - Atomics.store(view, Idx, 37); - $262.agent.report("C " + Atomics.wait(view, Idx, 0)); -} + var sab = new SharedArrayBuffer(1024); + var ab = new ArrayBuffer(16); + + var good_indices = [ (view) => 0/-1, // -0 + (view) => '-0', + (view) => view.length - 1, + (view) => ({ valueOf: () => 0 }), + (view) => ({ toString: () => '0', valueOf: false }) // non-callable valueOf triggers invocation of toString + ]; + + var view = new Int32Array(sab, 32, 20); + + view[0] = 0; + $262.agent.report("A " + Atomics.wait(view, 0, 0, 0)) + $262.agent.report("B " + Atomics.wait(view, 0, 37, 0)); + + // In-bounds boundary cases for indexing + for ( let IdxGen of good_indices ) { + let Idx = IdxGen(view); + view.fill(0); + // Atomics.store() computes an index from Idx in the same way as other + // Atomics operations, not quite like view[Idx]. + Atomics.store(view, Idx, 37); + $262.agent.report("C " + Atomics.wait(view, Idx, 0)); + } -$262.agent.report("done"); -$262.agent.leaving(); + $262.agent.report("done"); + $262.agent.leaving(); `); -assert.sameValue(getReport(), "A timed-out"); -assert.sameValue(getReport(), "B not-equal"); // Even with zero timeout +assert.sameValue(getReport(), 'A timed-out'); +assert.sameValue(getReport(), 'B not-equal'); // Even with zero timeout + var r; while ((r = getReport()) != "done") { assert.sameValue(r, "C not-equal"); } - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} diff --git a/test/built-ins/Atomics/wait/nan-for-timeout.js b/test/built-ins/Atomics/wait/nan-for-timeout.js index 3a7c2756d41dc0765c853f97d17a15226a957478..fd181765bb40f109de994ba96994474b3e53e253 100644 --- a/test/built-ins/Atomics/wait/nan-for-timeout.js +++ b/test/built-ins/Atomics/wait/nan-for-timeout.js @@ -13,26 +13,21 @@ info: | Undefined Return NaN. 5.If q is NaN, let t be +∞, else let t be max(q, 0) +includes: [atomicsHelper.js] 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 i32a = new Int32Array(sab); - $262.agent.report(Atomics.wait(i32a, 0, 0, NaN)); // NaN => +Infinity - $262.agent.leaving(); -}); + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + $262.agent.report(Atomics.wait(i32a, 0, 0, NaN)); // NaN => +Infinity + $262.agent.leaving(); + }); `); -var i32a = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); $262.agent.sleep(500); // Ample time diff --git a/test/built-ins/Atomics/wait/negative-index-throws.js b/test/built-ins/Atomics/wait/negative-index-throws.js index 6b72e73417cc3f19671caf835401edfb1bdbbc89..c2685605622dfcf8aa8fc6aeea5c826a0ede49a8 100644 --- a/test/built-ins/Atomics/wait/negative-index-throws.js +++ b/test/built-ins/Atomics/wait/negative-index-throws.js @@ -13,14 +13,18 @@ info: | 2.Let accessIndex be ? ToIndex(requestIndex). ... 2.b If integerIndex < 0, throw a RangeError exception + +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(1024); -var i32a = new Int32Array(sab); -var poisoned = { +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); + +const poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; diff --git a/test/built-ins/Atomics/wait/negative-timeout-agent.js b/test/built-ins/Atomics/wait/negative-timeout-agent.js index 92199fad5aa3792956630687330072e1a67d89f6..c8ca7e5d7fec397f00c6998fe5e5adfbae4ace23 100644 --- a/test/built-ins/Atomics/wait/negative-timeout-agent.js +++ b/test/built-ins/Atomics/wait/negative-timeout-agent.js @@ -5,28 +5,24 @@ esid: sec-atomics.wait description: > Test that Atomics.wait times out with a negative timeout +includes: [atomicsHelper.js] 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, id) { - var ia = new Int32Array(sab); - $262.agent.report(Atomics.wait(ia, 0, 0, -5)); // -5 => 0 - $262.agent.leaving(); -}) + $262.agent.receiveBroadcast(function(sab, id) { + var i32a = new Int32Array(sab); + $262.agent.report(Atomics.wait(i32a, 0, 0, -5)); // -5 => 0 + $262.agent.leaving(); + }); `); -var buffer = new SharedArrayBuffer(1024); -var i32a = new Int32Array(buffer); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); -assert.sameValue(getReport(), "timed-out"); +$262.agent.sleep(100); + +assert.sameValue(getReport(), 'timed-out'); assert.sameValue(Atomics.wake(i32a, 0), 0); diff --git a/test/built-ins/Atomics/wait/negative-timeout.js b/test/built-ins/Atomics/wait/negative-timeout.js index 019ca1db9631eebd50c8d4abedaa44e5f267f1fe..9fadae677913950fcd2bbc1f678da7c5337be17c 100644 --- a/test/built-ins/Atomics/wait/negative-timeout.js +++ b/test/built-ins/Atomics/wait/negative-timeout.js @@ -9,7 +9,8 @@ features: [Atomics, SharedArrayBuffer, TypedArray] flags: [CanBlockIsFalse] ---*/ -var buffer = new SharedArrayBuffer(1024); -var i32a = new Int32Array(buffer); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); assert.sameValue(Atomics.wait(i32a, 0, 0, -1), "timed-out"); diff --git a/test/built-ins/Atomics/wait/no-spurious-wakeup-on-add.js b/test/built-ins/Atomics/wait/no-spurious-wakeup-on-add.js index 1e70eeecbeeb3434ad5c152bab2ee7672b946fdf..33de28b41fb4b6fc235ebc086f83a9b1221d716f 100644 --- a/test/built-ins/Atomics/wait/no-spurious-wakeup-on-add.js +++ b/test/built-ins/Atomics/wait/no-spurious-wakeup-on-add.js @@ -5,15 +5,9 @@ esid: sec-atomics.wait description: > Waiter does not spuriously wake on index which is subject to Add operation +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} const TIMEOUT = 2000; const i32a = new Int32Array( @@ -22,9 +16,9 @@ const i32a = new Int32Array( $262.agent.start(` $262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - var before = $262.agent.monotonicNow(); - var unpark = Atomics.wait(i32a, 0, 0, ${TIMEOUT}); + const i32a = new Int32Array(sab); + const before = $262.agent.monotonicNow(); + const unpark = Atomics.wait(i32a, 0, 0, ${TIMEOUT}); $262.agent.report($262.agent.monotonicNow() - before); $262.agent.report(unpark); $262.agent.leaving(); diff --git a/test/built-ins/Atomics/wait/no-spurious-wakeup-on-and.js b/test/built-ins/Atomics/wait/no-spurious-wakeup-on-and.js index 345fe9a5b96783a50029d83577961683277b77c2..bda0a701fb2931b5a8e0fdf4dd246368aa70e1c4 100644 --- a/test/built-ins/Atomics/wait/no-spurious-wakeup-on-and.js +++ b/test/built-ins/Atomics/wait/no-spurious-wakeup-on-and.js @@ -5,15 +5,9 @@ esid: sec-atomics.wait description: > Waiter does not spuriously wake on index which is subject to And operation +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} const TIMEOUT = 2000; const i32a = new Int32Array( diff --git a/test/built-ins/Atomics/wait/no-spurious-wakeup-on-compareExchange.js b/test/built-ins/Atomics/wait/no-spurious-wakeup-on-compareExchange.js index 16aedd6aa1a774d2ca46dd7e6209bc6bd989e498..5219c79acf6f16c3d97f67377b255ec143633e01 100644 --- a/test/built-ins/Atomics/wait/no-spurious-wakeup-on-compareExchange.js +++ b/test/built-ins/Atomics/wait/no-spurious-wakeup-on-compareExchange.js @@ -5,15 +5,9 @@ esid: sec-atomics.wait description: > Waiter does not spuriously wake on index which is subject to compareExchange operation +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} const TIMEOUT = 2000; const i32a = new Int32Array( diff --git a/test/built-ins/Atomics/wait/no-spurious-wakeup-on-exchange.js b/test/built-ins/Atomics/wait/no-spurious-wakeup-on-exchange.js index f9d0aa3d29e8132a14d823689a1071641545c0ee..c985129ff68a57feb9e97320a8b1a1dc219b705b 100644 --- a/test/built-ins/Atomics/wait/no-spurious-wakeup-on-exchange.js +++ b/test/built-ins/Atomics/wait/no-spurious-wakeup-on-exchange.js @@ -5,15 +5,9 @@ esid: sec-atomics.wait description: > Waiter does not spuriously wake on index which is subject to exchange operation +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} const TIMEOUT = 2000; const i32a = new Int32Array( diff --git a/test/built-ins/Atomics/wait/no-spurious-wakeup-on-or.js b/test/built-ins/Atomics/wait/no-spurious-wakeup-on-or.js index 04c9f819af47aa6ecaf9849e2660180bada57796..64d3114a143f06f2c101516db68c74d5d273d60d 100644 --- a/test/built-ins/Atomics/wait/no-spurious-wakeup-on-or.js +++ b/test/built-ins/Atomics/wait/no-spurious-wakeup-on-or.js @@ -5,15 +5,9 @@ esid: sec-atomics.wait description: > Waiter does not spuriously wake on index which is subject to Or operation +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} const TIMEOUT = 2000; const i32a = new Int32Array( diff --git a/test/built-ins/Atomics/wait/no-spurious-wakeup-on-store.js b/test/built-ins/Atomics/wait/no-spurious-wakeup-on-store.js index bc4e3158472309f1b63e43ccfe4e52021f2d050e..bc59c6c57164490615f53bac62e3829babe9e69b 100644 --- a/test/built-ins/Atomics/wait/no-spurious-wakeup-on-store.js +++ b/test/built-ins/Atomics/wait/no-spurious-wakeup-on-store.js @@ -5,15 +5,9 @@ esid: sec-atomics.wait description: > Waiter does not spuriously wake on index which is subject to Store operation +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} const TIMEOUT = 2000; const i32a = new Int32Array( diff --git a/test/built-ins/Atomics/wait/no-spurious-wakeup-on-sub.js b/test/built-ins/Atomics/wait/no-spurious-wakeup-on-sub.js index 1de7591ad423034cc1a1d74ecb99b5bf479d398d..725dc57e356fdbb8fff56e988f440ffbdd1f49c5 100644 --- a/test/built-ins/Atomics/wait/no-spurious-wakeup-on-sub.js +++ b/test/built-ins/Atomics/wait/no-spurious-wakeup-on-sub.js @@ -5,15 +5,9 @@ esid: sec-atomics.wait description: > Waiter does not spuriously wake on index which is subject to Sub operation +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} const TIMEOUT = 2000; const i32a = new Int32Array( diff --git a/test/built-ins/Atomics/wait/no-spurious-wakeup-on-xor.js b/test/built-ins/Atomics/wait/no-spurious-wakeup-on-xor.js index 10d3d581444c8f4516f2c96d856af8f918248543..c79dad793813ffa3c62ddcad49b43451cd84224e 100644 --- a/test/built-ins/Atomics/wait/no-spurious-wakeup-on-xor.js +++ b/test/built-ins/Atomics/wait/no-spurious-wakeup-on-xor.js @@ -5,15 +5,9 @@ esid: sec-atomics.wait description: > Waiter does not spuriously wake on index which is subject to xor operation +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} const TIMEOUT = 2000; const i32a = new Int32Array( diff --git a/test/built-ins/Atomics/wait/non-int32-typedarray-throws.js b/test/built-ins/Atomics/wait/non-int32-typedarray-throws.js index ea2ce1f1bf34711ffe8eb25ec56fed4ab650d105..b85963ef59119359ccbf3c1856223aa0a9d804e5 100644 --- a/test/built-ins/Atomics/wait/non-int32-typedarray-throws.js +++ b/test/built-ins/Atomics/wait/non-int32-typedarray-throws.js @@ -15,40 +15,64 @@ info: | features: [Atomics, Float32Array, Float64Array, Int8Array, TypedArray, Uint16Array, Uint8Array, Uint8ClampedArray] ---*/ -var poisoned = { +const poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; assert.throws(TypeError, function() { - Atomics.wait(new Float64Array(), poisoned, poisoned, poisoned); + const view = new Float64Array( + new SharedArrayBuffer(Float64Array.BYTES_PER_ELEMENT) + ); + Atomics.wait(view, poisoned, poisoned, poisoned); }, 'Float64Array'); assert.throws(TypeError, function() { - Atomics.wait(new Float32Array(), poisoned, poisoned, poisoned); + const view = new Float32Array( + new SharedArrayBuffer(Float32Array.BYTES_PER_ELEMENT) + ); + Atomics.wait(view, poisoned, poisoned, poisoned); }, 'Float32Array'); assert.throws(TypeError, function() { - Atomics.wait(new Int16Array(), poisoned, poisoned, poisoned); + const view = new Int16Array( + new SharedArrayBuffer(Int16Array.BYTES_PER_ELEMENT) + ); + Atomics.wait(view, poisoned, poisoned, poisoned); }, 'Int16Array'); assert.throws(TypeError, function() { - Atomics.wait(new Int8Array(), poisoned, poisoned, poisoned); + const view = new Int8Array( + new SharedArrayBuffer(Int8Array.BYTES_PER_ELEMENT) + ); + Atomics.wait(view, poisoned, poisoned, poisoned); }, 'Int8Array'); assert.throws(TypeError, function() { - Atomics.wait(new Uint32Array(), poisoned, poisoned, poisoned); + const view = new Uint32Array( + new SharedArrayBuffer(Uint32Array.BYTES_PER_ELEMENT) + ); + Atomics.wait(view, poisoned, poisoned, poisoned); }, 'Uint32Array'); assert.throws(TypeError, function() { - Atomics.wait(new Uint16Array(), poisoned, poisoned, poisoned); + const view = new Uint16Array( + new SharedArrayBuffer(Uint16Array.BYTES_PER_ELEMENT) + ); + Atomics.wait(view, poisoned, poisoned, poisoned); }, 'Uint16Array'); assert.throws(TypeError, function() { - Atomics.wait(new Uint8Array(), poisoned, poisoned, poisoned); + const view = new Uint8Array( + new SharedArrayBuffer(Uint8Array.BYTES_PER_ELEMENT) + ); + Atomics.wait(view, poisoned, poisoned, poisoned); }, 'Uint8Array'); assert.throws(TypeError, function() { - Atomics.wait(new Uint8ClampedArray(), poisoned, poisoned, poisoned); + const view = new Uint8ClampedArray( + new SharedArrayBuffer(Uint8ClampedArray.BYTES_PER_ELEMENT) + ); + Atomics.wait(view, poisoned, poisoned, poisoned); }, 'Uint8ClampedArray'); diff --git a/test/built-ins/Atomics/wait/non-shared-bufferdata-throws.js b/test/built-ins/Atomics/wait/non-shared-bufferdata-throws.js index 3db334f89584622b6301ac839f37738f2bb43633..4e11f0728728da7747868ed558f539ee136de142 100644 --- a/test/built-ins/Atomics/wait/non-shared-bufferdata-throws.js +++ b/test/built-ins/Atomics/wait/non-shared-bufferdata-throws.js @@ -15,10 +15,13 @@ info: | features: [ArrayBuffer, Atomics, TypedArray] ---*/ -var i32a = new Int32Array(new ArrayBuffer(4)); -var poisoned = { +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); + +const poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; diff --git a/test/built-ins/Atomics/wait/not-a-typedarray-throws.js b/test/built-ins/Atomics/wait/not-a-typedarray-throws.js index 0fc66993aa8652fb589064a46b735022b672285d..108f235397426d9f5380d098425075034fc167a6 100644 --- a/test/built-ins/Atomics/wait/not-a-typedarray-throws.js +++ b/test/built-ins/Atomics/wait/not-a-typedarray-throws.js @@ -16,7 +16,7 @@ features: [Atomics] var poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; diff --git a/test/built-ins/Atomics/wait/not-an-object-throws.js b/test/built-ins/Atomics/wait/not-an-object-throws.js index e60165ffed168dc4c61cfe5f4866552298486766..bcd44c9a3a49405966d949d9d1e95563d5c982ce 100644 --- a/test/built-ins/Atomics/wait/not-an-object-throws.js +++ b/test/built-ins/Atomics/wait/not-an-object-throws.js @@ -15,7 +15,7 @@ features: [Atomics, Symbol] var poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; @@ -41,7 +41,7 @@ assert.throws(TypeError, function() { assert.throws(TypeError, function() { Atomics.wait(Number.NEGATIVE_INFINITY, poisoned, poisoned, poisoned); -}, '-Infinity'); +}, 'Number.NEGATIVE_INFINITY'); assert.throws(TypeError, function() { Atomics.wait(Symbol('***symbol***'), poisoned, poisoned, poisoned); diff --git a/test/built-ins/Atomics/wait/null-bufferdata-throws.js b/test/built-ins/Atomics/wait/null-bufferdata-throws.js index 511ba811aef1e2e09918f9aee977597e80c02d11..e9f5e0e7523aee25a491acffa9b6adbae359ab63 100644 --- a/test/built-ins/Atomics/wait/null-bufferdata-throws.js +++ b/test/built-ins/Atomics/wait/null-bufferdata-throws.js @@ -16,14 +16,21 @@ includes: [detachArrayBuffer.js] features: [ArrayBuffer, Atomics, TypedArray] ---*/ -var i32a = new Int32Array(new ArrayBuffer(1024)); -var poisoned = { +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); + +const poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; -$DETACHBUFFER(i32a.buffer); // Detaching a non-shared ArrayBuffer sets the [[ArrayBufferData]] value to null +try { + $DETACHBUFFER(i64a.buffer); // Detaching a non-shared ArrayBuffer sets the [[ArrayBufferData]] value to null +} catch (error) { + $ERROR(`An unexpected error occurred when detaching ArrayBuffer: ${error.message}`); +} assert.throws(TypeError, function() { Atomics.wait(i32a, poisoned, poisoned, poisoned); diff --git a/test/built-ins/Atomics/wait/null-for-timeout-agent.js b/test/built-ins/Atomics/wait/null-for-timeout-agent.js index 64850f1c0efd0d93aecdefbf9afc0873829a8d10..b6b3bb90662d5d2af596572310f65e822458c468 100644 --- a/test/built-ins/Atomics/wait/null-for-timeout-agent.js +++ b/test/built-ins/Atomics/wait/null-for-timeout-agent.js @@ -12,44 +12,37 @@ info: | Null -> Return +0. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] -includes: [ atomicsHelper.js ] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - -$262.agent.start( - ` -var valueOf = { - valueOf: function() { - return null; - } -}; - -var toPrimitive = { - [Symbol.toPrimitive]: function() { - return null; - } -}; - -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - var before = $262.agent.monotonicNow(); - $262.agent.report(Atomics.wait(i32a, 0, 0, null)); - $262.agent.report(Atomics.wait(i32a, 0, 0, valueOf)); - $262.agent.report(Atomics.wait(i32a, 0, 0, toPrimitive)); - $262.agent.report($262.agent.monotonicNow() - before); - $262.agent.leaving(); -}); +$262.agent.start(` + const valueOf = { + valueOf: function() { + return null; + } + }; + + const toPrimitive = { + [Symbol.toPrimitive]: function() { + return null; + } + }; + + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + const before = $262.agent.monotonicNow(); + $262.agent.report(Atomics.wait(i32a, 0, 0, null)); + $262.agent.report(Atomics.wait(i32a, 0, 0, valueOf)); + $262.agent.report(Atomics.wait(i32a, 0, 0, toPrimitive)); + $262.agent.report($262.agent.monotonicNow() - before); + $262.agent.leaving(); + }); `); -var i32a = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); $262.agent.sleep(150); @@ -58,11 +51,11 @@ assert.sameValue(getReport(), 'timed-out'); assert.sameValue(getReport(), 'timed-out'); assert.sameValue(getReport(), 'timed-out'); -var timeDiffReport = getReport(); +const lapse = getReport(); -assert(timeDiffReport >= 0, 'timeout should be a min of 0ms'); +assert(lapse >= 0, 'timeout should be a min of 0ms'); -assert(timeDiffReport <= $ATOMICS_MAX_TIME_EPSILON, 'timeout should be a max of $ATOMICS_MAX_TIME_EPSILON'); +assert(lapse <= $ATOMICS_MAX_TIME_EPSILON, 'timeout should be a max of $ATOMICS_MAX_TIME_EPSILON'); assert.sameValue(Atomics.wake(i32a, 0), 0); diff --git a/test/built-ins/Atomics/wait/null-for-timeout.js b/test/built-ins/Atomics/wait/null-for-timeout.js index 354d29cc425dc8484b9ba55290e9d4ff36a4d4d4..8bae175c7d8dfcedb676489a8b2e248b050dcf6b 100644 --- a/test/built-ins/Atomics/wait/null-for-timeout.js +++ b/test/built-ins/Atomics/wait/null-for-timeout.js @@ -16,16 +16,17 @@ features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] flags: [CanBlockIsFalse] ---*/ -var buffer = new SharedArrayBuffer(1024); -var i32a = new Int32Array(buffer); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); -var valueOf = { +const valueOf = { valueOf: function() { return null; } }; -var toPrimitive = { +const toPrimitive = { [Symbol.toPrimitive]: function() { return null; } diff --git a/test/built-ins/Atomics/wait/object-for-timeout-agent.js b/test/built-ins/Atomics/wait/object-for-timeout-agent.js index 11b7aee594978a31e47536bb4c33a1bb0758a063..caac5dc689767438452f9e5fdac7219f57b62722 100644 --- a/test/built-ins/Atomics/wait/object-for-timeout-agent.js +++ b/test/built-ins/Atomics/wait/object-for-timeout-agent.js @@ -12,51 +12,42 @@ info: | Null -> Return +0. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] -includes: [ atomicsHelper.js ] ---*/ - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - -$262.agent.start( - ` -var valueOf = { - valueOf: function() { - return 0; - } -}; - -var toString = { - toString: function() { - return "0"; - } -}; - -var toPrimitive = { - [Symbol.toPrimitive]: function() { - return 0; - } -}; - - -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - var start = $262.agent.monotonicNow(); - $262.agent.report(Atomics.wait(i32a, 0, 0, valueOf)); - $262.agent.report(Atomics.wait(i32a, 0, 0, toString)); - $262.agent.report(Atomics.wait(i32a, 0, 0, toPrimitive)); - $262.agent.report($262.agent.monotonicNow() - start); - $262.agent.leaving(); -}); +$262.agent.start(` + const valueOf = { + valueOf: function() { + return 0; + } + }; + + const toString = { + toString: function() { + return "0"; + } + }; + + const toPrimitive = { + [Symbol.toPrimitive]: function() { + return 0; + } + }; + + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + const before = $262.agent.monotonicNow(); + $262.agent.report(Atomics.wait(i32a, 0, 0, valueOf)); + $262.agent.report(Atomics.wait(i32a, 0, 0, toString)); + $262.agent.report(Atomics.wait(i32a, 0, 0, toPrimitive)); + $262.agent.report($262.agent.monotonicNow() - before); + $262.agent.leaving(); + }); `); -var i32a = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); $262.agent.sleep(150); @@ -65,11 +56,11 @@ assert.sameValue(getReport(), 'timed-out'); assert.sameValue(getReport(), 'timed-out'); assert.sameValue(getReport(), 'timed-out'); -var timeDiffReport = getReport(); +var lapse = getReport(); -assert(timeDiffReport >= 0, 'timeout should be a min of 0ms'); +assert(lapse >= 0, 'timeout should be a min of 0ms'); -assert(timeDiffReport <= $ATOMICS_MAX_TIME_EPSILON, 'timeout should be a max of $$ATOMICS_MAX_TIME_EPSILON'); +assert(lapse <= $ATOMICS_MAX_TIME_EPSILON, 'timeout should be a max of $$ATOMICS_MAX_TIME_EPSILON'); assert.sameValue(Atomics.wake(i32a, 0), 0); diff --git a/test/built-ins/Atomics/wait/object-for-timeout.js b/test/built-ins/Atomics/wait/object-for-timeout.js index f2374ce09660031a806f720775ce452f4b191880..43af65dae2ae44279e06943fc88a3f35681e9959 100644 --- a/test/built-ins/Atomics/wait/object-for-timeout.js +++ b/test/built-ins/Atomics/wait/object-for-timeout.js @@ -15,31 +15,33 @@ info: | Let primValue be ? ToPrimitive(argument, hint Number). Return ? ToNumber(primValue). +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] flags: [CanBlockIsFalse] ---*/ -var buffer = new SharedArrayBuffer(1024); -var i32a = new Int32Array(buffer); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); -var valueOf = { +const valueOf = { valueOf: function() { return 0; } }; -var toString = { +const toString = { toString: function() { return "0"; } }; -var toPrimitive = { +const toPrimitive = { [Symbol.toPrimitive]: function() { return 0; } }; -assert.sameValue(Atomics.wait(i32a, 0, 0, valueOf), "timed-out"); -assert.sameValue(Atomics.wait(i32a, 0, 0, toString), "timed-out"); -assert.sameValue(Atomics.wait(i32a, 0, 0, toPrimitive), "timed-out"); +assert.sameValue(Atomics.wait(i32a, 0, 0, valueOf), 'timed-out'); +assert.sameValue(Atomics.wait(i32a, 0, 0, toString), 'timed-out'); +assert.sameValue(Atomics.wait(i32a, 0, 0, toPrimitive), 'timed-out'); diff --git a/test/built-ins/Atomics/wait/out-of-range-index-throws.js b/test/built-ins/Atomics/wait/out-of-range-index-throws.js index 7d467a218fea43301e81961fd8912139e0442cc1..fc09d1ae7d2a7e5750a359ac01fce00711404d55 100644 --- a/test/built-ins/Atomics/wait/out-of-range-index-throws.js +++ b/test/built-ins/Atomics/wait/out-of-range-index-throws.js @@ -16,11 +16,13 @@ info: | features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var i32a = new Int32Array(new SharedArrayBuffer(4)); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); -var poisoned = { +const poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; diff --git a/test/built-ins/Atomics/wait/poisoned-object-for-timeout-throws-agent.js b/test/built-ins/Atomics/wait/poisoned-object-for-timeout-throws-agent.js index f4a068881ff5e96f280b5272cc12a0d17c7fe83b..247021679365f6ae0a1b8d253af8a55354b25b32 100644 --- a/test/built-ins/Atomics/wait/poisoned-object-for-timeout-throws-agent.js +++ b/test/built-ins/Atomics/wait/poisoned-object-for-timeout-throws-agent.js @@ -12,63 +12,56 @@ info: | Null -> Return +0. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] -includes: [ atomicsHelper.js ] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - -$262.agent.start( - ` -var poisonedValueOf = { - valueOf: function() { - throw new Error("should not evaluate this code"); - } -}; - -var poisonedToPrimitive = { - [Symbol.toPrimitive]: function() { - throw new Error("passing a poisoned object using @@ToPrimitive"); - } -}; - -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - var start = $262.agent.monotonicNow(); - try { - Atomics.wait(i32a, 0, 0, poisonedValueOf); - } catch (error) { - $262.agent.report("poisonedValueOf"); - } - try { - Atomics.wait(i32a, 0, 0, poisonedToPrimitive); - } catch (error) { - $262.agent.report("poisonedToPrimitive"); - } - $262.agent.report($262.agent.monotonicNow() - start); - $262.agent.leaving(); -}); +$262.agent.start(` + const poisonedValueOf = { + valueOf: function() { + throw new Error("should not evaluate this code"); + } + }; + + const poisonedToPrimitive = { + [Symbol.toPrimitive]: function() { + throw new Error("passing a poisoned object using @@ToPrimitive"); + } + }; + + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + const start = $262.agent.monotonicNow(); + try { + Atomics.wait(i32a, 0, 0, poisonedValueOf); + } catch (error) { + $262.agent.report("poisonedValueOf"); + } + try { + Atomics.wait(i32a, 0, 0, poisonedToPrimitive); + } catch (error) { + $262.agent.report("poisonedToPrimitive"); + } + $262.agent.report($262.agent.monotonicNow() - start); + $262.agent.leaving(); + }); `); -var i32a = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); $262.agent.sleep(150); -assert.sameValue(getReport(), "poisonedValueOf"); -assert.sameValue(getReport(), "poisonedToPrimitive"); +assert.sameValue(getReport(), 'poisonedValueOf'); +assert.sameValue(getReport(), 'poisonedToPrimitive'); -var timeDiffReport = getReport(); +const lapse = getReport(); -assert(timeDiffReport >= 0, "timeout should be a min of 0ms"); +assert(lapse >= 0, 'timeout should be a min of 0ms'); -assert(timeDiffReport <= $ATOMICS_MAX_TIME_EPSILON, "timeout should be a max of $$ATOMICS_MAX_TIME_EPSILON"); +assert(lapse <= $ATOMICS_MAX_TIME_EPSILON, 'timeout should be a max of $$ATOMICS_MAX_TIME_EPSILON'); assert.sameValue(Atomics.wake(i32a, 0), 0); diff --git a/test/built-ins/Atomics/wait/poisoned-object-for-timeout-throws.js b/test/built-ins/Atomics/wait/poisoned-object-for-timeout-throws.js index 70c5ef495c315325218c6a6c5a7d0279d1a6cef9..73bd54b0ef0201ca8eb04746cf00f12469fe5c5c 100644 --- a/test/built-ins/Atomics/wait/poisoned-object-for-timeout-throws.js +++ b/test/built-ins/Atomics/wait/poisoned-object-for-timeout-throws.js @@ -18,16 +18,17 @@ info: | features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] ---*/ -var buffer = new SharedArrayBuffer(1024); -var i32a = new Int32Array(buffer); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); -var poisonedValueOf = { +const poisonedValueOf = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; -var poisonedToPrimitive = { +const poisonedToPrimitive = { [Symbol.toPrimitive]: function() { throw new Test262Error("passing a poisoned object using @@ToPrimitive"); } diff --git a/test/built-ins/Atomics/wait/symbol-for-index-throws-agent.js b/test/built-ins/Atomics/wait/symbol-for-index-throws-agent.js index 997ad79246754c69a4a8045df86cb2b214c423b5..0fff08b9c442c646be52335d0126aa895b7d5848 100644 --- a/test/built-ins/Atomics/wait/symbol-for-index-throws-agent.js +++ b/test/built-ins/Atomics/wait/symbol-for-index-throws-agent.js @@ -25,51 +25,44 @@ info: | Symbol --> Throw a TypeError exception. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] -includes: [ atomicsHelper.js ] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - -$262.agent.start( - ` -var poisonedValueOf = { - valueOf: function() { - throw new Test262Error("should not evaluate this code"); - } -}; - -var poisonedToPrimitive = { - [Symbol.toPrimitive]: function() { - throw new Test262Error("passing a poisoned object using @@ToPrimitive"); - } -}; - -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - var start = $262.agent.monotonicNow(); - try { - Atomics.wait(i32a, Symbol("1"), poisonedValueOf, poisonedValueOf); - } catch (error) { - $262.agent.report('Symbol("1")'); - } - try { - Atomics.wait(i32a, Symbol("2"), poisonedToPrimitive, poisonedToPrimitive); - } catch (error) { - $262.agent.report('Symbol("2")'); - } - $262.agent.report($262.agent.monotonicNow() - start); - $262.agent.leaving(); -}); +$262.agent.start(` + const poisonedValueOf = { + valueOf: function() { + throw new Test262Error('should not evaluate this code'); + } + }; + + const poisonedToPrimitive = { + [Symbol.toPrimitive]: function() { + throw new Test262Error("passing a poisoned object using @@ToPrimitive"); + } + }; + + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + const start = $262.agent.monotonicNow(); + try { + Atomics.wait(i32a, Symbol("1"), poisonedValueOf, poisonedValueOf); + } catch (error) { + $262.agent.report('Symbol("1")'); + } + try { + Atomics.wait(i32a, Symbol("2"), poisonedToPrimitive, poisonedToPrimitive); + } catch (error) { + $262.agent.report('Symbol("2")'); + } + $262.agent.report($262.agent.monotonicNow() - start); + $262.agent.leaving(); + }); `); -var i32a = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); $262.agent.sleep(150); @@ -77,10 +70,10 @@ $262.agent.sleep(150); assert.sameValue(getReport(), 'Symbol("1")'); assert.sameValue(getReport(), 'Symbol("2")'); -var timeDiffReport = getReport(); +const lapse = getReport(); -assert(timeDiffReport >= 0, "timeout should be a min of 0ms"); -assert(timeDiffReport <= $ATOMICS_MAX_TIME_EPSILON, "timeout should be a max of $$ATOMICS_MAX_TIME_EPSILON"); +assert(lapse >= 0, 'timeout should be a min of 0ms'); +assert(lapse <= $ATOMICS_MAX_TIME_EPSILON, 'timeout should be a max of $$ATOMICS_MAX_TIME_EPSILON'); assert.sameValue(Atomics.wake(i32a, 0), 0); diff --git a/test/built-ins/Atomics/wait/symbol-for-index-throws.js b/test/built-ins/Atomics/wait/symbol-for-index-throws.js index 8b630f4c77b4adbce80c3203967988e8d364f5ec..a84f54ac6cb873cb26017d614fc1d5f5acf3d728 100644 --- a/test/built-ins/Atomics/wait/symbol-for-index-throws.js +++ b/test/built-ins/Atomics/wait/symbol-for-index-throws.js @@ -28,18 +28,19 @@ info: | features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] ---*/ -var buffer = new SharedArrayBuffer(1024); -var i32a = new Int32Array(buffer); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); -var poisonedValueOf = { +const poisonedValueOf = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; -var poisonedToPrimitive = { +const poisonedToPrimitive = { [Symbol.toPrimitive]: function() { - throw new Test262Error("passing a poisoned object using @@ToPrimitive"); + throw new Test262Error('should not evaluate this code'); } }; @@ -52,9 +53,9 @@ assert.throws(Test262Error, function() { }); assert.throws(TypeError, function() { - Atomics.wait(i32a, Symbol("foo"), poisonedValueOf, poisonedValueOf); + Atomics.wait(i32a, Symbol('foo'), poisonedValueOf, poisonedValueOf); }); assert.throws(TypeError, function() { - Atomics.wait(i32a, Symbol("foo"), poisonedToPrimitive, poisonedToPrimitive); + Atomics.wait(i32a, Symbol('foo'), poisonedToPrimitive, poisonedToPrimitive); }); diff --git a/test/built-ins/Atomics/wait/symbol-for-timeout-throws-agent.js b/test/built-ins/Atomics/wait/symbol-for-timeout-throws-agent.js index 9c23685c7c5051ea000e857d9434206cb0357c88..20a75c9e64b6e32f39b993153b5f113137be7dfa 100644 --- a/test/built-ins/Atomics/wait/symbol-for-timeout-throws-agent.js +++ b/test/built-ins/Atomics/wait/symbol-for-timeout-throws-agent.js @@ -12,37 +12,34 @@ info: | Symbol --> Throw a TypeError exception. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] -includes: [ atomicsHelper.js ] ---*/ -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 i32a = new Int32Array(sab); - var start = $262.agent.monotonicNow(); - try { - Atomics.wait(i32a, 0, 0, Symbol("1")); - } catch (error) { - $262.agent.report('Symbol("1")'); - } - try { - Atomics.wait(i32a, 0, 0, Symbol("2")); - } catch (error) { - $262.agent.report('Symbol("2")'); - } - $262.agent.report($262.agent.monotonicNow() - start); - $262.agent.leaving(); -}); + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + const start = $262.agent.monotonicNow(); + try { + Atomics.wait(i32a, 0, 0, Symbol("1")); + } catch (error) { + $262.agent.report('Symbol("1")'); + } + try { + Atomics.wait(i32a, 0, 0, Symbol("2")); + } catch (error) { + $262.agent.report('Symbol("2")'); + } + $262.agent.report($262.agent.monotonicNow() - start); + $262.agent.leaving(); + }); `); -var i32a = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); + + +const i32a = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); $262.agent.broadcast(i32a.buffer); $262.agent.sleep(150); @@ -50,9 +47,9 @@ $262.agent.sleep(150); assert.sameValue(getReport(), 'Symbol("1")'); assert.sameValue(getReport(), 'Symbol("2")'); -var timeDiffReport = getReport(); +const lapse = getReport(); -assert(timeDiffReport >= 0, "timeout should be a min of 0ms"); -assert(timeDiffReport <= $ATOMICS_MAX_TIME_EPSILON, "timeout should be a max of $$ATOMICS_MAX_TIME_EPSILON"); +assert(lapse >= 0, 'timeout should be a min of 0ms'); +assert(lapse <= $ATOMICS_MAX_TIME_EPSILON, 'timeout should be a max of $$ATOMICS_MAX_TIME_EPSILON'); assert.sameValue(Atomics.wake(i32a, 0), 0); diff --git a/test/built-ins/Atomics/wait/symbol-for-timeout-throws.js b/test/built-ins/Atomics/wait/symbol-for-timeout-throws.js index b0cc8a7c31d6c63b3f0496986d6698fba4fb9228..6030e0fd1322f0dc0280b84bee8cd0effe90fd28 100644 --- a/test/built-ins/Atomics/wait/symbol-for-timeout-throws.js +++ b/test/built-ins/Atomics/wait/symbol-for-timeout-throws.js @@ -20,13 +20,13 @@ var i32a = new Int32Array(buffer); var poisonedValueOf = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; var poisonedToPrimitive = { [Symbol.toPrimitive]: function() { - throw new Test262Error("passing a poisoned object using @@ToPrimitive"); + throw new Test262Error('passing a poisoned object using @@ToPrimitive'); } }; diff --git a/test/built-ins/Atomics/wait/symbol-for-value-throws-agent.js b/test/built-ins/Atomics/wait/symbol-for-value-throws-agent.js index b3f582db00d601c6f22073fc415428f855c03932..02b31acb578b22a180ef1fa05518af69c614d247 100644 --- a/test/built-ins/Atomics/wait/symbol-for-value-throws-agent.js +++ b/test/built-ins/Atomics/wait/symbol-for-value-throws-agent.js @@ -16,50 +16,44 @@ info: | Symbol --> Throw a TypeError exception. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] -includes: [ atomicsHelper.js ] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - $262.agent.start(` -var poisonedValueOf = { - valueOf: function() { - throw new Test262Error("should not evaluate this code"); - } -}; - -var poisonedToPrimitive = { - [Symbol.toPrimitive]: function() { - throw new Test262Error("passing a poisoned object using @@ToPrimitive"); - } -}; - -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - var start = $262.agent.monotonicNow(); - try { - Atomics.wait(i32a, 0, Symbol("1"), poisonedValueOf); - } catch (error) { - $262.agent.report('Symbol("1")'); - } - try { - Atomics.wait(i32a, 0, Symbol("2"), poisonedToPrimitive); - } catch (error) { - $262.agent.report('Symbol("2")'); - } - $262.agent.report($262.agent.monotonicNow() - start); - $262.agent.leaving(); -}); + const poisonedValueOf = { + valueOf: function() { + throw new Test262Error('should not evaluate this code'); + } + }; + + const poisonedToPrimitive = { + [Symbol.toPrimitive]: function() { + throw new Test262Error("passing a poisoned object using @@ToPrimitive"); + } + }; + + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + const before = $262.agent.monotonicNow(); + try { + Atomics.wait(i32a, 0, Symbol("1"), poisonedValueOf); + } catch (error) { + $262.agent.report('Symbol("1")'); + } + try { + Atomics.wait(i32a, 0, Symbol("2"), poisonedToPrimitive); + } catch (error) { + $262.agent.report('Symbol("2")'); + } + $262.agent.report($262.agent.monotonicNow() - before); + $262.agent.leaving(); + }); `); -var i32a = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); $262.agent.sleep(150); @@ -67,9 +61,9 @@ $262.agent.sleep(150); assert.sameValue(getReport(), 'Symbol("1")'); assert.sameValue(getReport(), 'Symbol("2")'); -var timeDiffReport = getReport(); +const lapse = getReport(); -assert(timeDiffReport >= 0, "timeout should be a min of 0ms"); -assert(timeDiffReport <= $ATOMICS_MAX_TIME_EPSILON, "timeout should be a max of $$ATOMICS_MAX_TIME_EPSILON"); +assert(lapse >= 0, 'timeout should be a min of 0ms'); +assert(lapse <= $ATOMICS_MAX_TIME_EPSILON, 'timeout should be a max of $$ATOMICS_MAX_TIME_EPSILON'); assert.sameValue(Atomics.wake(i32a, 0), 0); diff --git a/test/built-ins/Atomics/wait/symbol-for-value-throws.js b/test/built-ins/Atomics/wait/symbol-for-value-throws.js index 232195055f791f9ffeec759ec04d035a18efa05a..86e06e1d7d29f4d3cfe100aa2e8e527b1c771249 100644 --- a/test/built-ins/Atomics/wait/symbol-for-value-throws.js +++ b/test/built-ins/Atomics/wait/symbol-for-value-throws.js @@ -19,16 +19,17 @@ info: | features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] ---*/ -var buffer = new SharedArrayBuffer(1024); -var i32a = new Int32Array(buffer); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); -var poisonedValueOf = { +const poisonedValueOf = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; -var poisonedToPrimitive = { +const poisonedToPrimitive = { [Symbol.toPrimitive]: function() { throw new Test262Error("passing a poisoned object using @@ToPrimitive"); } diff --git a/test/built-ins/Atomics/wait/true-for-timeout-agent.js b/test/built-ins/Atomics/wait/true-for-timeout-agent.js index 7e3b1fb0c3991772779d5863c32ab5864ae4d1a1..bd95c1c5254f36a8817a40f4961ff45438f79b17 100644 --- a/test/built-ins/Atomics/wait/true-for-timeout-agent.js +++ b/test/built-ins/Atomics/wait/true-for-timeout-agent.js @@ -12,44 +12,37 @@ info: | Boolean -> If argument is true, return 1. If argument is false, return +0. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] -includes: [ atomicsHelper.js ] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - -$262.agent.start( - ` -var valueOf = { - valueOf: function() { - return true; - } -}; - -var toPrimitive = { - [Symbol.toPrimitive]: function() { - return true; - } -}; - -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - var start = $262.agent.monotonicNow(); - $262.agent.report(Atomics.wait(i32a, 0, 0, true)); - $262.agent.report(Atomics.wait(i32a, 0, 0, valueOf)); - $262.agent.report(Atomics.wait(i32a, 0, 0, toPrimitive)); - $262.agent.report($262.agent.monotonicNow() - start); - $262.agent.leaving(); -}) +$262.agent.start(` + const valueOf = { + valueOf: function() { + return true; + } + }; + + const toPrimitive = { + [Symbol.toPrimitive]: function() { + return true; + } + }; + + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + const start = $262.agent.monotonicNow(); + $262.agent.report(Atomics.wait(i32a, 0, 0, true)); + $262.agent.report(Atomics.wait(i32a, 0, 0, valueOf)); + $262.agent.report(Atomics.wait(i32a, 0, 0, toPrimitive)); + $262.agent.report($262.agent.monotonicNow() - start); + $262.agent.leaving(); + }); `); -var i32a = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); $262.agent.sleep(150); @@ -58,11 +51,11 @@ assert.sameValue(getReport(), 'timed-out'); assert.sameValue(getReport(), 'timed-out'); assert.sameValue(getReport(), 'timed-out'); -var timeDiffReport = getReport(); +const lapse = getReport(); -assert(timeDiffReport >= 0, 'timeout should be a min of 0ms'); +assert(lapse >= 0, 'timeout should be a min of 0ms'); -assert(timeDiffReport <= $ATOMICS_MAX_TIME_EPSILON, 'timeout should be a max of $$ATOMICS_MAX_TIME_EPSILON'); +assert(lapse <= $ATOMICS_MAX_TIME_EPSILON, 'timeout should be a max of $$ATOMICS_MAX_TIME_EPSILON'); assert.sameValue(Atomics.wake(i32a, 0), 0); diff --git a/test/built-ins/Atomics/wait/true-for-timeout.js b/test/built-ins/Atomics/wait/true-for-timeout.js index 9e9bea15ddfa89284ec2271861e3866c5e30b5e7..ee4a808bee0e95decae212db72ca5633e8aa1626 100644 --- a/test/built-ins/Atomics/wait/true-for-timeout.js +++ b/test/built-ins/Atomics/wait/true-for-timeout.js @@ -16,22 +16,23 @@ features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] flags: [CanBlockIsFalse] ---*/ -var buffer = new SharedArrayBuffer(1024); -var i32a = new Int32Array(buffer); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); -var valueOf = { +const valueOf = { valueOf: function() { return true; } }; -var toPrimitive = { +const toPrimitive = { [Symbol.toPrimitive]: function() { return true; } }; -assert.sameValue(Atomics.wait(i32a, 0, 0, true), "timed-out"); -assert.sameValue(Atomics.wait(i32a, 0, 0, valueOf), "timed-out"); -assert.sameValue(Atomics.wait(i32a, 0, 0, toPrimitive), "timed-out"); +assert.sameValue(Atomics.wait(i32a, 0, 0, true), 'timed-out'); +assert.sameValue(Atomics.wait(i32a, 0, 0, valueOf), 'timed-out'); +assert.sameValue(Atomics.wait(i32a, 0, 0, toPrimitive), 'timed-out'); diff --git a/test/built-ins/Atomics/wait/undefined-for-timeout.js b/test/built-ins/Atomics/wait/undefined-for-timeout.js index 8a8fd19461af36f9568eecc84536e50c54c3918f..2ea65ef5cca39c7e07316a2b49ae6a25ea8c2bc0 100644 --- a/test/built-ins/Atomics/wait/undefined-for-timeout.js +++ b/test/built-ins/Atomics/wait/undefined-for-timeout.js @@ -12,53 +12,49 @@ info: | ... Undefined Return NaN. 5.If q is NaN, let t be +∞, else let t be max(q, 0) + +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var NUMAGENT = 2; // Total number of agents started -var WAKEUP = 0; // Index all agents are waiting on -var WAKECOUNT = 2; // Total number of agents to wake up - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} +const NUMAGENT = 2; // Total number of agents started +const WAKEUP = 0; // Index all agents are waiting on +const WAKECOUNT = 2; // Total number of agents to wake up $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - $262.agent.report("A " + Atomics.wait(i32a, 0, 0, undefined)); // undefined => NaN => +Infinity - $262.agent.leaving(); -}) + $262.agent.receiveBroadcast(function(sab) { + var i32a = new Int32Array(sab); + $262.agent.report("A " + Atomics.wait(i32a, 0, 0, undefined)); // undefined => NaN => +Infinity + $262.agent.leaving(); + }); `); $262.agent.start( ` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - $262.agent.report("B " + Atomics.wait(i32a, 0, 0)); // undefined timeout arg => NaN => +Infinity - $262.agent.leaving(); -}) + $262.agent.receiveBroadcast(function(sab) { + var i32a = new Int32Array(sab); + $262.agent.report("B " + Atomics.wait(i32a, 0, 0)); // undefined timeout arg => NaN => +Infinity + $262.agent.leaving(); + }); `); -var i32a = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); - $262.agent.sleep(500); // Ample time -assert.sameValue($262.agent.getReport(), null); +// No Reports made before wait +assert.sameValue(getReport(), null); assert.sameValue(Atomics.wake(i32a, WAKEUP, WAKECOUNT), WAKECOUNT); -var sortedReports = []; +const sortedReports = []; for (var i = 0; i < NUMAGENT; i++) { sortedReports.push(getReport()); } sortedReports.sort(); -assert.sameValue(sortedReports[0], "A ok"); -assert.sameValue(sortedReports[1], "B ok"); +assert.sameValue(sortedReports[0], 'A ok'); +assert.sameValue(sortedReports[1], 'B ok'); diff --git a/test/built-ins/Atomics/wait/undefined-index-defaults-to-zero.js b/test/built-ins/Atomics/wait/undefined-index-defaults-to-zero.js index ac3bda6bb65d83a1c4d28aea41619cd48d38072b..ca25def3703dfa9835c508fcb80017589670637b 100644 --- a/test/built-ins/Atomics/wait/undefined-index-defaults-to-zero.js +++ b/test/built-ins/Atomics/wait/undefined-index-defaults-to-zero.js @@ -17,33 +17,26 @@ info: | If value is undefined, then Let index be 0. + +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - $262.agent.report(Atomics.wait(i32a, undefined, 0, 1000)); // undefined index => 0 - $262.agent.leaving(); -}) + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + $262.agent.report(Atomics.wait(i32a, undefined, 0, 1000)); // undefined index => 0 + $262.agent.leaving(); + }); `); -var sab = new SharedArrayBuffer(4); -var i32a = new Int32Array(sab); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); - $262.agent.sleep(150); assert.sameValue(Atomics.wake(i32a, 0), 1); // wake at index 0 assert.sameValue(Atomics.wake(i32a, 0), 0); // wake again at index 0, and 0 agents should be woken - -assert.sameValue(getReport(), "ok"); - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} +assert.sameValue(getReport(), 'ok'); diff --git a/test/built-ins/Atomics/wait/value-not-equal.js b/test/built-ins/Atomics/wait/value-not-equal.js index 8240a3271a3a77a2fe65f9631e3b16c5c9279590..9dce875fa6b2d7869cab44ced065263625517c30 100644 --- a/test/built-ins/Atomics/wait/value-not-equal.js +++ b/test/built-ins/Atomics/wait/value-not-equal.js @@ -14,34 +14,28 @@ info: | a.Perform LeaveCriticalSection(WL). b. Return the String "not-equal". -features: [Atomics, SharedArrayBuffer, TypedArray] includes: [atomicsHelper.js] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - var value = 42; $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); - $262.agent.report(Atomics.store(i32a, 0, ${value})); - $262.agent.report(Atomics.wait(i32a, 0, 0)); - $262.agent.leaving(); -}); + $262.agent.report(Atomics.store(i32a, 0, ${value})); + $262.agent.report(Atomics.wait(i32a, 0, 0)); + $262.agent.leaving(); + }); `); -var i32a = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); - +$262.agent.sleep(100); assert.sameValue(getReport(), value.toString()); -assert.sameValue(getReport(), "not-equal"); +assert.sameValue(getReport(), 'not-equal'); diff --git a/test/built-ins/Atomics/wait/wait-index-value-not-equal.js b/test/built-ins/Atomics/wait/wait-index-value-not-equal.js index 94b6d4eabe6c268b5ffbcaa2214c8e0d9c291082..53db6ae85cfa1d1cdf8789a74612a9fd84c63ceb 100644 --- a/test/built-ins/Atomics/wait/wait-index-value-not-equal.js +++ b/test/built-ins/Atomics/wait/wait-index-value-not-equal.js @@ -12,35 +12,27 @@ info: | a.Perform LeaveCriticalSection(WL). b. Return the String "not-equal". +includes: [atomicsHelper.js] 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 i32a = new Int32Array(sab); + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); - $262.agent.report(Atomics.wait(i32a, 0, 44, 1000)); - $262.agent.report(Atomics.wait(i32a, 0, 251.4, 1000)); - $262.agent.leaving(); -}); + $262.agent.report(Atomics.wait(i32a, 0, 44, 1000)); + $262.agent.report(Atomics.wait(i32a, 0, 251.4, 1000)); + $262.agent.leaving(); + }); `); -var i32a = new Int32Array(new SharedArrayBuffer(1024)); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); +$262.agent.sleep(100); -$262.agent.sleep(200); - - -assert.sameValue(getReport(), "not-equal"); -assert.sameValue(getReport(), "not-equal"); - +assert.sameValue(getReport(), 'not-equal'); +assert.sameValue(getReport(), 'not-equal'); assert.sameValue(Atomics.wake(i32a, 0), 0); diff --git a/test/built-ins/Atomics/wait/waiterlist-block-indexedposition-wake.js b/test/built-ins/Atomics/wait/waiterlist-block-indexedposition-wake.js index 6c800db52588155cca96cd485b629d3981d0fba1..20fc23f99997e1f0531fa55b767057a4caa85894 100644 --- a/test/built-ins/Atomics/wait/waiterlist-block-indexedposition-wake.js +++ b/test/built-ins/Atomics/wait/waiterlist-block-indexedposition-wake.js @@ -18,19 +18,13 @@ info: | ... 4. Return the WaiterList that is referenced by the pair (block, i). +includes: [atomicsHelper.js] 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 i32a = new Int32Array(sab); + const i32a = new Int32Array(sab); // Wait on index 0 Atomics.wait(i32a, 0, 0, 200); @@ -41,17 +35,18 @@ $262.agent.start(` $262.agent.start(` $262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); + const i32a = new Int32Array(sab); // Wait on index 2 Atomics.wait(i32a, 2, 0, 200); - $262.agent.report(0); + $262.agent.report(2); $262.agent.leaving(); }); `); -var length = 4 * Int32Array.BYTES_PER_ELEMENT; -var i32a = new Int32Array(new SharedArrayBuffer(length)); +const i32a = new Int32Array( + new SharedArrayBuffer(4 * Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); $262.agent.sleep(10); @@ -61,5 +56,5 @@ Atomics.wake(i32a, 2, 1); assert.sameValue(getReport(), '2'); // Wake index 0 -Atomics.wake(i32a, 2, 1); +Atomics.wake(i32a, 0, 1); assert.sameValue(getReport(), '0'); diff --git a/test/built-ins/Atomics/wait/waiterlist-order-of-operations-is-fifo.js b/test/built-ins/Atomics/wait/waiterlist-order-of-operations-is-fifo.js index d049f9676baef30690ffae993c6971932b142078..1890a2828efbb67a8af99b958a65ae8a8ce6e677 100644 --- a/test/built-ins/Atomics/wait/waiterlist-order-of-operations-is-fifo.js +++ b/test/built-ins/Atomics/wait/waiterlist-order-of-operations-is-fifo.js @@ -12,27 +12,20 @@ info: | ... 3.Add W to the end of the list of waiters in WL. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - -const agent1 = '1'; -const agent2 = '2'; -const agent3 = '3'; +var agent1 = '1'; +var agent2 = '2'; +var agent3 = '3'; $262.agent.start(` $262.agent.receiveBroadcast(function(sab) { const i32a = new Int32Array(sab); $262.agent.report(${agent1}); - Atomics.wait(i32a, 0, 0); + $262.agent.report(Atomics.wait(i32a, 1, 0)); $262.agent.report(${agent1}); $262.agent.leaving(); }); @@ -43,7 +36,7 @@ $262.agent.start(` const i32a = new Int32Array(sab); $262.agent.report(${agent2}); - Atomics.wait(i32a, 0, 0); + $262.agent.report(Atomics.wait(i32a, 2, 0)); $262.agent.report(${agent2}); $262.agent.leaving(); }); @@ -54,29 +47,32 @@ $262.agent.start(` const i32a = new Int32Array(sab); $262.agent.report(${agent3}); - Atomics.wait(i32a, 0, 0); + $262.agent.report(Atomics.wait(i32a, 3, 0)); $262.agent.report(${agent3}); $262.agent.leaving(); }); `); -var i32a = new Int32Array(new SharedArrayBuffer(4)); +const i32a = new Int32Array( + new SharedArrayBuffer(4 * Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); +$262.agent.sleep(500); -var orderAgentsStarted = getReport() + getReport() + getReport(); // can be started in any order - -assert.sameValue(Atomics.wake(i32a, 0, 1), 1); - -var orderAgentsWereWoken = getReport(); - -assert.sameValue(Atomics.wake(i32a, 0, 1), 1); - -orderAgentsWereWoken += getReport(); +// Agents may be started in any order... +const started = [getReport(), getReport(), getReport()]; -assert.sameValue(Atomics.wake(i32a, 0, 1), 1); +// Agents must wake in the order they waited +assert.sameValue(Atomics.wake(i32a, 1, 1), 1); +assert.sameValue(getReport(), 'ok'); +assert.sameValue(getReport(), started[0]); -orderAgentsWereWoken += getReport(); +assert.sameValue(Atomics.wake(i32a, 2, 1), 1); +assert.sameValue(getReport(), 'ok'); +assert.sameValue(getReport(), started[1]); -assert.sameValue(orderAgentsStarted, orderAgentsWereWoken); // agents should wake in the same order as they were started FIFO +assert.sameValue(Atomics.wake(i32a, 3, 1), 1); +assert.sameValue(getReport(), 'ok'); +assert.sameValue(getReport(), started[2]); diff --git a/test/built-ins/Atomics/wait/was-woken-before-timeout.js b/test/built-ins/Atomics/wait/was-woken-before-timeout.js index b0efbcb149eba4d1c9a69acc85797ed06eece0e4..008955b57faa2b29c2a85ca25e6139f10f35819d 100644 --- a/test/built-ins/Atomics/wait/was-woken-before-timeout.js +++ b/test/built-ins/Atomics/wait/was-woken-before-timeout.js @@ -18,38 +18,39 @@ info: | If value is undefined, then Let index be 0. -features: [Atomics, SharedArrayBuffer, TypedArray] +includes: [atomicsHelper.js] +features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] ---*/ -var sleeping = 100; +var sleeping = 10; var timeout = 20000; -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - sleeping += 100; - $262.agent.sleep(100); - } - return r; -} - $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - $262.agent.report(Atomics.wait(i32a, 0, 0, ${timeout})); - $262.agent.leaving(); -}); + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + const before = $262.agent.monotonicNow(); + const unpark = Atomics.wait(i32a, 0, 0, ${timeout}); + $262.agent.report($262.agent.monotonicNow() - before); + $262.agent.report(unpark); + $262.agent.leaving(); + }); `); -var sab = new SharedArrayBuffer(4); -var i32a = new Int32Array(sab); - +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); $262.agent.sleep(sleeping); assert.sameValue(Atomics.wake(i32a, 0), 1); -assert.sameValue(getReport(), "ok"); -assert(sleeping < timeout, "this test assumes it won't last for more than 20 seconds"); +const lapse = getReport(); + +assert( + sleeping + lapse < timeout, + `${sleeping + lapse} should be less than ${timeout}` +); +assert.sameValue(getReport(), 'ok'); + diff --git a/test/built-ins/Atomics/wait/was-woken.js b/test/built-ins/Atomics/wait/was-woken.js deleted file mode 100644 index 9bba4693f0e2d805cdb12e805e7925dab7e996d5..0000000000000000000000000000000000000000 --- a/test/built-ins/Atomics/wait/was-woken.js +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (C) 2017 Mozilla Corporation. All rights reserved. -// This code is governed by the BSD license found in the LICENSE file. - -/*--- -esid: sec-atomics.wait -description: > - Test that Atomics.wait returns the right result when it was awoken. -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, id) { - var i32a = new Int32Array(sab); - $262.agent.report(Atomics.wait(i32a, 0, 0)); // No timeout => Infinity - $262.agent.leaving(); -}); -`); - -var i32a = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); - -$262.agent.broadcast(i32a.buffer); -$262.agent.sleep(500); // Give the agent a chance to wait -Atomics.wake(i32a, 0); -assert.sameValue(getReport(), "ok"); diff --git a/test/built-ins/Atomics/wake/bad-range.js b/test/built-ins/Atomics/wake/bad-range.js index ab3ab03bb35f86f90087309ce905f3b34e63f28c..247550a7c1165bb66ba4caa0fa9dd2a766e5f367 100644 --- a/test/built-ins/Atomics/wake/bad-range.js +++ b/test/built-ins/Atomics/wake/bad-range.js @@ -23,6 +23,6 @@ testWithTypedArrayConstructors(function(TA) { testWithAtomicsOutOfBoundsIndices(function(IdxGen) { assert.throws(RangeError, function() { Atomics.wake(view, IdxGen(view), 0); - }, 'Atomics.wake(view, IdxGen(view), 0) throws RangeError'); // Even with waking zero + }, '`Atomics.wake(view, IdxGen(view), 0)` throws RangeError'); // Even with waking zero }); }, views); diff --git a/test/built-ins/Atomics/wake/bigint/bad-range.js b/test/built-ins/Atomics/wake/bigint/bad-range.js index 78a378668046fe477ec2087501800b7769911dbe..e35b19ba84b64549e3aea0e1747472148449cb50 100644 --- a/test/built-ins/Atomics/wake/bigint/bad-range.js +++ b/test/built-ins/Atomics/wake/bigint/bad-range.js @@ -21,5 +21,5 @@ let i64a = new BigInt64Array(sab); testWithAtomicsOutOfBoundsIndices(function(IdxGen) { assert.throws(RangeError, function() { Atomics.wake(view, IdxGen(i64a), 0); - }, 'Atomics.wake(view, IdxGen(i64a), 0) throws RangeError'); + }, '`Atomics.wake(view, IdxGen(i64a), 0)` throws RangeError'); }); diff --git a/test/built-ins/Atomics/wake/bigint/non-bigint64-typedarray-throws.js b/test/built-ins/Atomics/wake/bigint/non-bigint64-typedarray-throws.js index 6b9b760d7c6157a78ae29a3f1d423ddf1adfb37e..b056597318f56daa1011585b8008c4ced3df5c4e 100644 --- a/test/built-ins/Atomics/wake/bigint/non-bigint64-typedarray-throws.js +++ b/test/built-ins/Atomics/wake/bigint/non-bigint64-typedarray-throws.js @@ -17,10 +17,10 @@ features: [Atomics, BigInt, TypedArray] var poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; assert.throws(TypeError, function() { Atomics.wake(new BigUint64Array(), poisoned, poisoned); -}, 'BigUint64Array'); +}, '`Atomics.wake(new BigUint64Array(), poisoned, poisoned)` throws TypeError'); diff --git a/test/built-ins/Atomics/wake/bigint/non-shared-bufferdata-throws.js b/test/built-ins/Atomics/wake/bigint/non-shared-bufferdata-throws.js index 042f66707f12b154fd6074a72c76a4181b177eff..30cfc76bcc49873ae259323d2e41a05891ff459c 100644 --- a/test/built-ins/Atomics/wake/bigint/non-shared-bufferdata-throws.js +++ b/test/built-ins/Atomics/wake/bigint/non-shared-bufferdata-throws.js @@ -18,14 +18,14 @@ features: [ArrayBuffer, Atomics, BigInt, TypedArray] var i64a = new BigInt64Array(new ArrayBuffer(4)); var poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; assert.throws(TypeError, function() { Atomics.wake(i64a, 0, 0); -}); +}, '`Atomics.wake(i64a, 0, 0)` throws TypeError'); assert.throws(TypeError, function() { Atomics.wake(i64a, poisoned, poisoned); -}); +}, '`Atomics.wake(i64a, poisoned, poisoned)` throws TypeError'); diff --git a/test/built-ins/Atomics/wake/bigint/null-bufferdata-throws.js b/test/built-ins/Atomics/wake/bigint/null-bufferdata-throws.js index 3981e9200ec7c83451c8127dedd9de8f56402e34..d237accfa697cc0b29bd55d325afc920d94fc97b 100644 --- a/test/built-ins/Atomics/wake/bigint/null-bufferdata-throws.js +++ b/test/built-ins/Atomics/wake/bigint/null-bufferdata-throws.js @@ -19,7 +19,7 @@ features: [ArrayBuffer, Atomics, BigInt, TypedArray] var i64a = new BigInt64Array(new ArrayBuffer(1024)); var poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; @@ -28,4 +28,4 @@ $DETACHBUFFER(i64a.buffer); assert.throws(TypeError, function() { Atomics.wake(i64a, poisoned, poisoned); -}); +}, '`Atomics.wake(i64a, poisoned, poisoned)` throws TypeError'); diff --git a/test/built-ins/Atomics/wake/bigint/wake-all-on-loc.js b/test/built-ins/Atomics/wake/bigint/wake-all-on-loc.js index 6494b0117afa47a9c81880cdff52d561007102ac..9fa496496145c5b4309bcabdc989ca7abd6cc377 100644 --- a/test/built-ins/Atomics/wake/bigint/wake-all-on-loc.js +++ b/test/built-ins/Atomics/wake/bigint/wake-all-on-loc.js @@ -6,29 +6,30 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes all waiters on a location, but does not wake waiters on other locations. +includes: [atomicsHelper.js] features: [Atomics, BigInt, SharedArrayBuffer, TypedArray] ---*/ -var WAKEUP = 0; // Waiters on this will be woken -var DUMMY = 1; // Waiters on this will not be woken -var RUNNING = 2; // Accounting of live agents -var NUMELEM = 3; -var NUMAGENT = 3; +const WAKEUP = 0; // Waiters on this will be woken +const DUMMY = 1; // Waiters on this will not be woken +const RUNNING = 2; // Accounting of live agents +const NUMELEM = 3; +const NUMAGENT = 3; for (var i = 0; i < NUMAGENT; i++) { -$262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i64a = new BigInt64Array(sab); - Atomics.add(i64a, ${RUNNING}, 1); - $262.agent.report("A " + Atomics.wait(i64a, ${WAKEUP}, 0)); - $262.agent.leaving(); -}); -`); + $262.agent.start(` + $262.agent.receiveBroadcast(function(sab) { + const i64a = new BigInt64Array(sab); + Atomics.add(i64a, ${RUNNING}, 1); + $262.agent.report("A " + Atomics.wait(i64a, ${WAKEUP}, 0)); + $262.agent.leaving(); + }); + `); } $262.agent.start(` $262.agent.receiveBroadcast(function(sab) { - var i64a = new BigInt64Array(sab); + const i64a = new BigInt64Array(sab); Atomics.add(i64a, ${RUNNING}, 1); // This will always time out. $262.agent.report("B " + Atomics.wait(i64a, ${DUMMY}, 0, 10)); @@ -36,7 +37,9 @@ $262.agent.receiveBroadcast(function(sab) { }); `); -var i64a = new BigInt64Array(new SharedArrayBuffer(NUMELEM * BigInt64Array.BYTES_PER_ELEMENT)); +const i64a = new BigInt64Array( + new SharedArrayBuffer(NUMELEM * BigInt64Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i64a.buffer); // Wait for agents to be running. @@ -47,7 +50,11 @@ waitUntil(i64a, RUNNING, NUMAGENT + 1); $262.agent.sleep(50); // Wake all waiting on WAKEUP, should be 3 always, they won't time out. -assert.sameValue(Atomics.wake(i64a, WAKEUP), NUMAGENT); +assert.sameValue( + Atomics.wake(i64a, WAKEUP), + NUMAGENT, + 'Atomics.wake(i64a, WAKEUP) equals the value of `NUMAGENT` (3)' +); var rs = []; for (var i = 0; i < NUMAGENT + 1; i++) { @@ -56,23 +63,7 @@ for (var i = 0; i < NUMAGENT + 1; i++) { rs.sort(); for (var i = 0; i < NUMAGENT; i++) { - assert.sameValue(rs[i], "A ok"); -} -assert.sameValue(rs[NUMAGENT], "B timed-out"); - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; + assert.sameValue(rs[i], "A ok", 'The value of rs[i] is "A ok"'); } +assert.sameValue(rs[NUMAGENT], "B timed-out", 'The value of rs[NUMAGENT] is "B timed-out"'); -function waitUntil(i64a, k, value) { - var i = 0; - while (Atomics.load(i64a, k) !== value && i < 15) { - $262.agent.sleep(10); - i++; - } - assert.sameValue(Atomics.load(i64a, k), value, "All agents are running"); -} diff --git a/test/built-ins/Atomics/wake/count-boundary-cases.js b/test/built-ins/Atomics/wake/count-boundary-cases.js index 23c32180d3c32b593595b56058788a2ed22abfe2..1ffb865ef3c21ab666285e5fe3d63c820a1ae8bc 100644 --- a/test/built-ins/Atomics/wake/count-boundary-cases.js +++ b/test/built-ins/Atomics/wake/count-boundary-cases.js @@ -28,9 +28,21 @@ features: [Atomics, SharedArrayBuffer, TypedArray] var sab = new SharedArrayBuffer(4); var view = new Int32Array(sab); -assert.sameValue(Atomics.wake(view, 0, -3), 0); -assert.sameValue(Atomics.wake(view, 0, Number.POSITIVE_INFINITY), 0); -assert.sameValue(Atomics.wake(view, 0, undefined), 0); -assert.sameValue(Atomics.wake(view, 0, "33"), 0); -assert.sameValue(Atomics.wake(view, 0, { valueOf: 8 }), 0); -assert.sameValue(Atomics.wake(view, 0), 0); +assert.sameValue(Atomics.wake(view, 0, -3), 0, 'Atomics.wake(view, 0, -3) returns 0'); +assert.sameValue( + Atomics.wake(view, 0, Number.POSITIVE_INFINITY), + 0, + 'Atomics.wake(view, 0, Number.POSITIVE_INFINITY) returns 0' +); +assert.sameValue( + Atomics.wake(view, 0, undefined), + 0, + 'Atomics.wake(view, 0, undefined) returns 0' +); +assert.sameValue(Atomics.wake(view, 0, "33"), 0, 'Atomics.wake(view, 0, "33") returns 0'); +assert.sameValue( + Atomics.wake(view, 0, { valueOf: 8 }), + 0, + 'Atomics.wake(view, 0, {valueOf: 8}) returns 0' +); +assert.sameValue(Atomics.wake(view, 0), 0, 'Atomics.wake(view, 0) returns 0'); diff --git a/test/built-ins/Atomics/wake/count-defaults-to-infinity-missing.js b/test/built-ins/Atomics/wake/count-defaults-to-infinity-missing.js index d85adb770960882f8ae7ed4b487439d30a7eb90c..9a3ed079fd6af7b269420747869bb43523220f86 100644 --- a/test/built-ins/Atomics/wake/count-defaults-to-infinity-missing.js +++ b/test/built-ins/Atomics/wake/count-defaults-to-infinity-missing.js @@ -12,6 +12,7 @@ info: | 3. If count is undefined, let c be +∞. ... +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ @@ -27,44 +28,49 @@ function getReport() { } $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - $262.agent.report("A " + Atomics.wait(i32a, ${WAKEUP}, 0, 50)); - $262.agent.leaving(); -}); + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + $262.agent.report("A " + Atomics.wait(i32a, ${WAKEUP}, 0, 50)); + $262.agent.leaving(); + }); `); $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - $262.agent.report("B " + Atomics.wait(i32a, ${WAKEUP}, 0, 50)); - $262.agent.leaving(); -}); + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + $262.agent.report("B " + Atomics.wait(i32a, ${WAKEUP}, 0, 50)); + $262.agent.leaving(); + }); `); $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - $262.agent.report("C " + Atomics.wait(i32a, ${WAKEUP}, 0, 50)); - $262.agent.leaving(); -}); + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + $262.agent.report("C " + Atomics.wait(i32a, ${WAKEUP}, 0, 50)); + $262.agent.leaving(); + }); `); $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - $262.agent.report("D " + Atomics.wait(i32a, ${WAKEUP}, 0, 50)); - $262.agent.leaving(); -}); + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + $262.agent.report("D " + Atomics.wait(i32a, ${WAKEUP}, 0, 50)); + $262.agent.leaving(); + }); `); -var i32a = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); - $262.agent.sleep(20); -assert.sameValue(Atomics.wake(i32a, WAKEUP /*, count missing */), NUMAGENT); +assert.sameValue( + Atomics.wake(i32a, WAKEUP /*, count missing */), + NUMAGENT, + 'Atomics.wake(i32a, WAKEUP /*, count missing */) equals the value of `NUMAGENT` (4)' +); var sortedReports = []; for (var i = 0; i < NUMAGENT; i++) { @@ -72,7 +78,7 @@ for (var i = 0; i < NUMAGENT; i++) { } sortedReports.sort(); -assert.sameValue(sortedReports[0], "A ok"); -assert.sameValue(sortedReports[1], "B ok"); -assert.sameValue(sortedReports[2], "C ok"); -assert.sameValue(sortedReports[3], "D ok"); +assert.sameValue(sortedReports[0], "A ok", 'The value of sortedReports[0] is "A ok"'); +assert.sameValue(sortedReports[1], "B ok", 'The value of sortedReports[1] is "B ok"'); +assert.sameValue(sortedReports[2], "C ok", 'The value of sortedReports[2] is "C ok"'); +assert.sameValue(sortedReports[3], "D ok", 'The value of sortedReports[3] is "D ok"'); diff --git a/test/built-ins/Atomics/wake/count-defaults-to-infinity-undefined.js b/test/built-ins/Atomics/wake/count-defaults-to-infinity-undefined.js index b6f26bb05feb72a0dbfc4a0065c525a3887e5183..0d8b569b50472fb8f3527a6b09c2dabd9ba7e86a 100644 --- a/test/built-ins/Atomics/wake/count-defaults-to-infinity-undefined.js +++ b/test/built-ins/Atomics/wake/count-defaults-to-infinity-undefined.js @@ -10,61 +10,60 @@ info: | 3.If count is undefined, let c be +∞. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var NUMAGENT = 4; // Total number of agents started -var WAKEUP = 0; // Index all agents are waiting on - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} +const NUMAGENT = 4; // Total number of agents started +const WAKEUP = 0; // Index all agents are waiting on $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - $262.agent.report("A " + Atomics.wait(i32a, ${WAKEUP}, 0, 50)); - $262.agent.leaving(); -}); + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + $262.agent.report("A " + Atomics.wait(i32a, ${WAKEUP}, 0, 50)); + $262.agent.leaving(); + }); `); $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - $262.agent.report("B " + Atomics.wait(i32a, ${WAKEUP}, 0, 50)); - $262.agent.leaving(); -}); + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + $262.agent.report("B " + Atomics.wait(i32a, ${WAKEUP}, 0, 50)); + $262.agent.leaving(); + }); `); $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - $262.agent.report("C " + Atomics.wait(i32a, ${WAKEUP}, 0, 50)); - $262.agent.leaving(); -}); + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + $262.agent.report("C " + Atomics.wait(i32a, ${WAKEUP}, 0, 50)); + $262.agent.leaving(); + }); `); $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - $262.agent.report("D " + Atomics.wait(i32a, ${WAKEUP}, 0, 50)); - $262.agent.leaving(); -}); + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + $262.agent.report("D " + Atomics.wait(i32a, ${WAKEUP}, 0, 50)); + $262.agent.leaving(); + }); `); -var i32a = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); $262.agent.sleep(20); // half of timeout -assert.sameValue(Atomics.wake(i32a, WAKEUP, undefined), NUMAGENT); +assert.sameValue( + Atomics.wake(i32a, WAKEUP, undefined), + NUMAGENT, + 'Atomics.wake(i32a, WAKEUP, undefined) equals the value of `NUMAGENT` (4)' +); var sortedReports = []; for (var i = 0; i < NUMAGENT; i++) { @@ -72,7 +71,7 @@ for (var i = 0; i < NUMAGENT; i++) { } sortedReports.sort(); -assert.sameValue(sortedReports[0], "A ok"); -assert.sameValue(sortedReports[1], "B ok"); -assert.sameValue(sortedReports[2], "C ok"); -assert.sameValue(sortedReports[3], "D ok"); +assert.sameValue(sortedReports[0], "A ok", 'The value of sortedReports[0] is "A ok"'); +assert.sameValue(sortedReports[1], "B ok", 'The value of sortedReports[1] is "B ok"'); +assert.sameValue(sortedReports[2], "C ok", 'The value of sortedReports[2] is "C ok"'); +assert.sameValue(sortedReports[3], "D ok", 'The value of sortedReports[3] is "D ok"'); diff --git a/test/built-ins/Atomics/wake/count-from-nans.js b/test/built-ins/Atomics/wake/count-from-nans.js index 21e234bf943898a01457a4204f983442fbb4a5ba..fc425cee64e0eab57e2242b8df1a3becb5f9f6c9 100644 --- a/test/built-ins/Atomics/wake/count-from-nans.js +++ b/test/built-ins/Atomics/wake/count-from-nans.js @@ -28,5 +28,5 @@ var sab = new SharedArrayBuffer(4); var view = new Int32Array(sab); NaNs.forEach(nan => { - assert.sameValue(Atomics.wake(view, 0, nan), 0); + assert.sameValue(Atomics.wake(view, 0, nan), 0, 'Atomics.wake(view, 0, nan) returns 0'); }); diff --git a/test/built-ins/Atomics/wake/count-symbol-throws.js b/test/built-ins/Atomics/wake/count-symbol-throws.js index 4edad8c342b65c633bf1d73d42eb9ec06717b428..585434c58f9c5881acdc5468fcae673791948d9f 100644 --- a/test/built-ins/Atomics/wake/count-symbol-throws.js +++ b/test/built-ins/Atomics/wake/count-symbol-throws.js @@ -22,4 +22,4 @@ var view = new Int32Array(sab); assert.throws(TypeError, function() { Atomics.wake(view, 0, Symbol()); -}); +}, '`Atomics.wake(view, 0, Symbol())` throws TypeError'); diff --git a/test/built-ins/Atomics/wake/count-tointeger-throws-then-wake-throws.js b/test/built-ins/Atomics/wake/count-tointeger-throws-then-wake-throws.js index 83ed31f958927596aacd309ebb9717c6b5fd3337..77967165004c98e5280c2f46b9f7472548964787 100644 --- a/test/built-ins/Atomics/wake/count-tointeger-throws-then-wake-throws.js +++ b/test/built-ins/Atomics/wake/count-tointeger-throws-then-wake-throws.js @@ -21,10 +21,10 @@ var sab = new SharedArrayBuffer(4); var view = new Int32Array(sab); var poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; assert.throws(Test262Error, function() { Atomics.wake(view, 0, poisoned); -}); +}, '`Atomics.wake(view, 0, poisoned)` throws Test262Error'); diff --git a/test/built-ins/Atomics/wake/good-views.js b/test/built-ins/Atomics/wake/good-views.js index 72ace0788aedcacc8bfe85a7328c95cdd75e6ed1..7fbc763a80469dcea6fa8aa83ccc6ab0b25591a4 100644 --- a/test/built-ins/Atomics/wake/good-views.js +++ b/test/built-ins/Atomics/wake/good-views.js @@ -14,7 +14,7 @@ var sab = new SharedArrayBuffer(1024); var view = new Int32Array(sab, 32, 20); view[0] = 0; -assert.sameValue(Atomics.wake(view, 0, 1), 0); +assert.sameValue(Atomics.wake(view, 0, 1), 0, 'Atomics.wake(view, 0, 1) returns 0'); // In-bounds boundary cases for indexing testWithAtomicsInBoundsIndices(function(IdxGen) { @@ -23,5 +23,5 @@ testWithAtomicsInBoundsIndices(function(IdxGen) { // Atomics.store() computes an index from Idx in the same way as other // Atomics operations, not quite like view[Idx]. Atomics.store(view, Idx, 37); - assert.sameValue(Atomics.wake(view, Idx, 1), 0); + assert.sameValue(Atomics.wake(view, Idx, 1), 0, 'Atomics.wake(view, Idx, 1) returns 0'); }); diff --git a/test/built-ins/Atomics/wake/negative-count.js b/test/built-ins/Atomics/wake/negative-count.js index 917f0d76ec7268491204c5fa95e738f147a3c0bc..df172ff2e1a985b23318d0e3e99606ea9aaff306 100644 --- a/test/built-ins/Atomics/wake/negative-count.js +++ b/test/built-ins/Atomics/wake/negative-count.js @@ -5,28 +5,24 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes zero waiters if the count is negative +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var ia = new Int32Array(sab); - $262.agent.report(Atomics.wait(ia, 0, 0, 1000)); // Timeout after 1 second - $262.agent.leaving(); -}) + $262.agent.receiveBroadcast(function(sab) { + var i32a = new Int32Array(sab); + $262.agent.report(Atomics.wait(i32a, 0, 0, 1000)); // Timeout after 1 second + $262.agent.leaving(); + }); `); -var ia = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); -$262.agent.broadcast(ia.buffer); +$262.agent.broadcast(i32a.buffer); $262.agent.sleep(500); // Give the agent a chance to wait -assert.sameValue(Atomics.wake(ia, 0, -1), 0); // Don't actually wake it -assert.sameValue(getReport(), "timed-out"); +assert.sameValue(Atomics.wake(i32a, 0, -1), 0, 'Atomics.wake(i32a, 0, -1) returns 0'); // Don't actually wake it +assert.sameValue(getReport(), 'timed-out', 'getReport() returns "timed-out"'); -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} diff --git a/test/built-ins/Atomics/wake/negative-index-throws.js b/test/built-ins/Atomics/wake/negative-index-throws.js index c092f2207480ef74307644cc41d0a4072e2c42e8..68637f66346b5b93d67aa50e1d0a878b53dd0ca5 100644 --- a/test/built-ins/Atomics/wake/negative-index-throws.js +++ b/test/built-ins/Atomics/wake/negative-index-throws.js @@ -20,19 +20,19 @@ var sab = new SharedArrayBuffer(1024); var i32a = new Int32Array(sab); var poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; assert.throws(RangeError, function() { Atomics.wake(i32a, -Infinity, poisoned); -}, 'Atomics.wake(i32a, -Infinity, poisoned) throws RangeError'); +}, '`Atomics.wake(i32a, -Infinity, poisoned)` throws RangeError'); assert.throws(RangeError, function() { Atomics.wake(i32a, -7.999, poisoned); -}, 'Atomics.wake(i32a, -7.999, poisoned) throws RangeError'); +}, '`Atomics.wake(i32a, -7.999, poisoned)` throws RangeError'); assert.throws(RangeError, function() { Atomics.wake(i32a, -1, poisoned); -}, 'Atomics.wake(i32a, -1, poisoned) throws RangeError'); +}, '`Atomics.wake(i32a, -1, poisoned)` throws RangeError'); assert.throws(RangeError, function() { Atomics.wake(i32a, -300, poisoned); -}, 'Atomics.wake(i32a, -300, poisoned) throws RangeError'); +}, '`Atomics.wake(i32a, -300, poisoned)` throws RangeError'); diff --git a/test/built-ins/Atomics/wake/non-int32-typedarray-throws.js b/test/built-ins/Atomics/wake/non-int32-typedarray-throws.js index d7b9e547aed6953e809e1e50332ce702604ebeb5..60f6103068cd0064d595a94089db498185497220 100644 --- a/test/built-ins/Atomics/wake/non-int32-typedarray-throws.js +++ b/test/built-ins/Atomics/wake/non-int32-typedarray-throws.js @@ -17,38 +17,38 @@ features: [Atomics, Float32Array, Float64Array, Int8Array, TypedArray, Uint16Arr var poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; assert.throws(TypeError, function() { Atomics.wake(new Float64Array(), poisoned, poisoned); -}, 'Float64Array'); +}, '`Atomics.wake(new Float64Array(), poisoned, poisoned)` throws TypeError'); assert.throws(TypeError, function() { Atomics.wake(new Float32Array(), poisoned, poisoned); -}, 'Float32Array'); +}, '`Atomics.wake(new Float32Array(), poisoned, poisoned)` throws TypeError'); assert.throws(TypeError, function() { Atomics.wake(new Int16Array(), poisoned, poisoned); -}, 'Int16Array'); +}, '`Atomics.wake(new Int16Array(), poisoned, poisoned)` throws TypeError'); assert.throws(TypeError, function() { Atomics.wake(new Int8Array(), poisoned, poisoned); -}, 'Int8Array'); +}, '`Atomics.wake(new Int8Array(), poisoned, poisoned)` throws TypeError'); assert.throws(TypeError, function() { Atomics.wake(new Uint32Array(), poisoned, poisoned); -}, 'Uint32Array'); +}, '`Atomics.wake(new Uint32Array(), poisoned, poisoned)` throws TypeError'); assert.throws(TypeError, function() { Atomics.wake(new Uint16Array(), poisoned, poisoned); -}, 'Uint16Array'); +}, '`Atomics.wake(new Uint16Array(), poisoned, poisoned)` throws TypeError'); assert.throws(TypeError, function() { Atomics.wait(new Uint8Array(), poisoned, poisoned); -}, 'Uint8Array'); +}, '`Atomics.wait(new Uint8Array(), poisoned, poisoned)` throws TypeError'); assert.throws(TypeError, function() { Atomics.wake(new Uint8ClampedArray(), poisoned, poisoned); -}, 'Uint8ClampedArray'); +}, '`Atomics.wake(new Uint8ClampedArray(), poisoned, poisoned)` throws TypeError'); diff --git a/test/built-ins/Atomics/wake/non-shared-bufferdata-throws.js b/test/built-ins/Atomics/wake/non-shared-bufferdata-throws.js index bd783ab62a09511ae11b330d399112d3f56b7669..b31d39aa4dbd4d1072e6f4a4826c6a40938d778f 100644 --- a/test/built-ins/Atomics/wake/non-shared-bufferdata-throws.js +++ b/test/built-ins/Atomics/wake/non-shared-bufferdata-throws.js @@ -18,14 +18,14 @@ features: [ArrayBuffer, Atomics, TypedArray] var i32a = new Int32Array(new ArrayBuffer(4)); var poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; assert.throws(TypeError, function() { Atomics.wake(i32a, 0, 0); -}); +}, '`Atomics.wake(i32a, 0, 0)` throws TypeError'); assert.throws(TypeError, function() { Atomics.wake(i32a, poisoned, poisoned); -}); +}, '`Atomics.wake(i32a, poisoned, poisoned)` throws TypeError'); diff --git a/test/built-ins/Atomics/wake/non-views.js b/test/built-ins/Atomics/wake/non-views.js index 711d69039230e1de504b9d2f670c7b3eca4afafc..032a4891620c0d3fd06f66ad768ec5c1f720f8df 100644 --- a/test/built-ins/Atomics/wake/non-views.js +++ b/test/built-ins/Atomics/wake/non-views.js @@ -12,5 +12,5 @@ features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedAr testWithAtomicsNonViewValues(function(view) { assert.throws(TypeError, function() { Atomics.wake(view, 0, 0); - }, 'Atomics.wake(view, 0, 0) throws TypeError'); // Even with count == 0 + }, '`Atomics.wake(view, 0, 0)` throws TypeError'); // Even with count == 0 }); diff --git a/test/built-ins/Atomics/wake/nonshared-int-views.js b/test/built-ins/Atomics/wake/nonshared-int-views.js index e8cfc624814d799bfb07b058b571ddbb9ac65146..ca3f198c6ae16ea35d1d5e7845a87af7883d9510 100644 --- a/test/built-ins/Atomics/wake/nonshared-int-views.js +++ b/test/built-ins/Atomics/wake/nonshared-int-views.js @@ -16,5 +16,5 @@ testWithTypedArrayConstructors(function(TA) { // Should fail even if waking zero waiters assert.throws(TypeError, function() { Atomics.wake(new TA(buffer), 0, 0); - }, 'Atomics.wake(new TA(buffer), 0, 0) throws TypeError'); + }, '`Atomics.wake(new TA(buffer), 0, 0)` throws TypeError'); }, views); diff --git a/test/built-ins/Atomics/wake/not-a-typedarray-throws.js b/test/built-ins/Atomics/wake/not-a-typedarray-throws.js index 7acf27e8c02c790a7e04bcc71caeae0d7ae2ecbe..2e0203e290b6158445580ace17d6fe95de23385f 100644 --- a/test/built-ins/Atomics/wake/not-a-typedarray-throws.js +++ b/test/built-ins/Atomics/wake/not-a-typedarray-throws.js @@ -16,14 +16,14 @@ features: [Atomics] var poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; assert.throws(TypeError, function() { Atomics.wait({}, 0, 0, 0); -}); +}, '`Atomics.wait({}, 0, 0, 0)` throws TypeError'); assert.throws(TypeError, function () { Atomics.wait({}, poisoned, poisoned, poisoned); -}); +}, '`Atomics.wait({}, poisoned, poisoned, poisoned)` throws TypeError'); diff --git a/test/built-ins/Atomics/wake/not-an-object-throws.js b/test/built-ins/Atomics/wake/not-an-object-throws.js index b8ca158b4fad03d57bf5424552e94dfbfccce6a6..cf8cc3e5d6c525cb020e51dec7020de082130422 100644 --- a/test/built-ins/Atomics/wake/not-an-object-throws.js +++ b/test/built-ins/Atomics/wake/not-an-object-throws.js @@ -15,34 +15,34 @@ features: [Atomics, Symbol] var poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; assert.throws(TypeError, function() { Atomics.wake(null, poisoned, poisoned); -}, 'null'); +}, '`Atomics.wake(null, poisoned, poisoned)` throws TypeError'); assert.throws(TypeError, function() { Atomics.wake(undefined, poisoned, poisoned); -}, 'undefined'); +}, '`Atomics.wake(undefined, poisoned, poisoned)` throws TypeError'); assert.throws(TypeError, function() { Atomics.wake(true, poisoned, poisoned); -}, 'true'); +}, '`Atomics.wake(true, poisoned, poisoned)` throws TypeError'); assert.throws(TypeError, function() { Atomics.wake(false, poisoned, poisoned); -}, 'false'); +}, '`Atomics.wake(false, poisoned, poisoned)` throws TypeError'); assert.throws(TypeError, function() { Atomics.wake('***string***', poisoned, poisoned); -}, 'String'); +}, '`Atomics.wake(\'***string***\', poisoned, poisoned)` throws TypeError'); assert.throws(TypeError, function() { Atomics.wake(Number.NEGATIVE_INFINITY, poisoned, poisoned); -}, '-Infinity'); +}, '`Atomics.wake(Number.NEGATIVE_INFINITY, poisoned, poisoned)` throws TypeError'); assert.throws(TypeError, function() { Atomics.wake(Symbol('***symbol***'), poisoned, poisoned); -}, 'Symbol'); +}, '`Atomics.wake(Symbol(\'***symbol***\'), poisoned, poisoned)` throws TypeError'); diff --git a/test/built-ins/Atomics/wake/null-bufferdata-throws.js b/test/built-ins/Atomics/wake/null-bufferdata-throws.js index fb3cf8ee4e2185e0f95b14c467875f914320fe20..4d2300fd98cf0c0ebbce1a6b82ef948ee8406a56 100644 --- a/test/built-ins/Atomics/wake/null-bufferdata-throws.js +++ b/test/built-ins/Atomics/wake/null-bufferdata-throws.js @@ -19,7 +19,7 @@ features: [ArrayBuffer, Atomics, TypedArray] var i32a = new Int32Array(new ArrayBuffer(1024)); var poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; @@ -27,4 +27,4 @@ $DETACHBUFFER(i32a.buffer); // Detaching a non-shared ArrayBuffer sets the [[Arr assert.throws(TypeError, function() { Atomics.wake(i32a, poisoned, poisoned); -}); +}, '`Atomics.wake(i32a, poisoned, poisoned)` throws TypeError'); diff --git a/test/built-ins/Atomics/wake/out-of-range-index-throws.js b/test/built-ins/Atomics/wake/out-of-range-index-throws.js index a07c2bdeb4f79d58524d217be3a77219b84a1526..bbc9f08387d334ad8e876f5774d9b2f4610fbeb5 100644 --- a/test/built-ins/Atomics/wake/out-of-range-index-throws.js +++ b/test/built-ins/Atomics/wake/out-of-range-index-throws.js @@ -19,16 +19,16 @@ features: [Atomics, SharedArrayBuffer, TypedArray] var i32a = new Int32Array(new SharedArrayBuffer(4)); var poisoned = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; assert.throws(RangeError, function() { Atomics.wake(i32a, Infinity, poisoned); -}); +}, '`Atomics.wake(i32a, Infinity, poisoned)` throws RangeError'); assert.throws(RangeError, function() { Atomics.wake(i32a, 2, poisoned); -}); +}, '`Atomics.wake(i32a, 2, poisoned)` throws RangeError'); assert.throws(RangeError, function() { Atomics.wake(i32a, 200, poisoned); -}); +}, '`Atomics.wake(i32a, 200, poisoned)` throws RangeError'); diff --git a/test/built-ins/Atomics/wake/shared-nonint-views.js b/test/built-ins/Atomics/wake/shared-nonint-views.js index 4259c3a7a15805e0926021205bc1b2c667d408b8..911ff3c00b379cf01ef85d61032b30cbb7cb8178 100644 --- a/test/built-ins/Atomics/wake/shared-nonint-views.js +++ b/test/built-ins/Atomics/wake/shared-nonint-views.js @@ -14,7 +14,7 @@ var buffer = new SharedArrayBuffer(1024); testWithTypedArrayConstructors(function(TA) { assert.throws(TypeError, function() { Atomics.wake(new TA(buffer), 0, 0); - }, 'Atomics.wake(new TA(buffer), 0, 0) throws TypeError'); + }, '`Atomics.wake(new TA(buffer), 0, 0)` throws TypeError'); }, floatArrayConstructors); diff --git a/test/built-ins/Atomics/wake/symbol-for-index-throws.js b/test/built-ins/Atomics/wake/symbol-for-index-throws.js index 2fb0b470f0cd87517992443f1ca584844b8c0cf5..723753f685546a43e14759cc263c62118b46e45e 100644 --- a/test/built-ins/Atomics/wake/symbol-for-index-throws.js +++ b/test/built-ins/Atomics/wake/symbol-for-index-throws.js @@ -33,7 +33,7 @@ var i32a = new Int32Array(buffer); var poisonedValueOf = { valueOf: function() { - throw new Test262Error("should not evaluate this code"); + throw new Test262Error('should not evaluate this code'); } }; @@ -45,16 +45,16 @@ var poisonedToPrimitive = { assert.throws(Test262Error, function() { Atomics.wake(i32a, poisonedValueOf, poisonedValueOf); -}); +}, '`Atomics.wake(i32a, poisonedValueOf, poisonedValueOf)` throws Test262Error'); assert.throws(Test262Error, function() { Atomics.wake(i32a, poisonedToPrimitive, poisonedToPrimitive); -}); +}, '`Atomics.wake(i32a, poisonedToPrimitive, poisonedToPrimitive)` throws Test262Error'); assert.throws(TypeError, function() { Atomics.wake(i32a, Symbol("foo"), poisonedValueOf); -}); +}, '`Atomics.wake(i32a, Symbol("foo"), poisonedValueOf)` throws TypeError'); assert.throws(TypeError, function() { Atomics.wake(i32a, Symbol("foo"), poisonedToPrimitive); -}); +}, '`Atomics.wake(i32a, Symbol("foo"), poisonedToPrimitive)` throws TypeError'); diff --git a/test/built-ins/Atomics/wake/undefined-index-defaults-to-zero.js b/test/built-ins/Atomics/wake/undefined-index-defaults-to-zero.js index a6a3e68d024f76879d4ac3b5fe48937722da083f..3faf97b4dd00a30366e0a1df13a972ef51bb4e7f 100644 --- a/test/built-ins/Atomics/wake/undefined-index-defaults-to-zero.js +++ b/test/built-ins/Atomics/wake/undefined-index-defaults-to-zero.js @@ -18,46 +18,46 @@ info: | If value is undefined, then Let index be 0. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -$262.agent.start( - ` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - $262.agent.report(Atomics.wait(i32a, 0, 0, 200)); - $262.agent.leaving(); -}) - - -`) +$262.agent.start(` + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + $262.agent.report(Atomics.wait(i32a, 0, 0, 200)); + $262.agent.leaving(); + }); +`); -;$262.agent.start( - ` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - $262.agent.report(Atomics.wait(i32a, 0, 0, 200)); - $262.agent.leaving(); -}) +$262.agent.start(` + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + $262.agent.report(Atomics.wait(i32a, 0, 0, 200)); + $262.agent.leaving(); + }); `); -var sab = new SharedArrayBuffer(4); -var i32a = new Int32Array(sab); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT); +); $262.agent.broadcast(i32a.buffer); - $262.agent.sleep(100); // halfway through timeout -assert.sameValue(Atomics.wake(i32a, undefined, 1), 1); // wake at index 0 -assert.sameValue(getReport(), "ok"); - -assert.sameValue(Atomics.wake(i32a), 1); // wake again at index 0 -assert.sameValue(getReport(), "ok"); - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} +// wake at index 0 +assert.sameValue( + Atomics.wake(i32a, undefined, 1), + 1, + 'Atomics.wake(i32a, undefined, 1) returns 1' +); +assert.sameValue(getReport(), "ok", 'getReport() returns "ok"'); + + +// wake again at index 0 +assert.sameValue( + Atomics.wake(i32a /* default values used */), + 1, + 'Atomics.wake(i32a) returns 1' +); +assert.sameValue(getReport(), "ok", 'getReport() returns "ok"'); diff --git a/test/built-ins/Atomics/wake/wake-all-on-loc.js b/test/built-ins/Atomics/wake/wake-all-on-loc.js index 3c94b89201873c7d6de550ed92332ec60eea0057..f319ef5f8f66d7a9a447bd84974ebb7cdd78357e 100644 --- a/test/built-ins/Atomics/wake/wake-all-on-loc.js +++ b/test/built-ins/Atomics/wake/wake-all-on-loc.js @@ -6,38 +6,41 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes all waiters on a location, but does not wake waiters on other locations. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var WAKEUP = 0; // Waiters on this will be woken -var DUMMY = 1; // Waiters on this will not be woken -var RUNNING = 2; // Accounting of live agents -var NUMELEM = 3; +const WAKEUP = 0; // Waiters on this will be woken +const DUMMY = 1; // Waiters on this will not be woken +const RUNNING = 2; // Accounting of live agents +const NUMELEM = 3; -var NUMAGENT = 3; +const NUMAGENT = 3; for (var i=0; i < NUMAGENT; i++) { -$262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - Atomics.add(i32a, ${RUNNING}, 1); - $262.agent.report("A " + Atomics.wait(i32a, ${WAKEUP}, 0)); - $262.agent.leaving(); -}) -`); + $262.agent.start(` + $262.agent.receiveBroadcast(function(sab) { + var i32a = new Int32Array(sab); + Atomics.add(i32a, ${RUNNING}, 1); + $262.agent.report("A " + Atomics.wait(i32a, ${WAKEUP}, 0)); + $262.agent.leaving(); + }); + `); } $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - Atomics.add(i32a, ${RUNNING}, 1); - // This will always time out. - $262.agent.report("B " + Atomics.wait(i32a, ${DUMMY}, 0, 10)); - $262.agent.leaving(); -}) + $262.agent.receiveBroadcast(function(sab) { + var i32a = new Int32Array(sab); + Atomics.add(i32a, ${RUNNING}, 1); + // This will always time out. + $262.agent.report("B " + Atomics.wait(i32a, ${DUMMY}, 0, 10)); + $262.agent.leaving(); + }); `); -var i32a = new Int32Array(new SharedArrayBuffer(NUMELEM * Int32Array.BYTES_PER_ELEMENT)); +const i32a = new Int32Array( + new SharedArrayBuffer(NUMELEM * Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); // Wait for agents to be running. @@ -48,32 +51,19 @@ waitUntil(i32a, RUNNING, NUMAGENT + 1); $262.agent.sleep(50); // Wake all waiting on WAKEUP, should be 3 always, they won't time out. -assert.sameValue(Atomics.wake(i32a, WAKEUP), NUMAGENT); +assert.sameValue( + Atomics.wake(i32a, WAKEUP), + NUMAGENT, + 'Atomics.wake(i32a, WAKEUP) equals the value of `NUMAGENT` (3)' +); -var rs = []; +const rs = []; for (var i = 0; i < NUMAGENT + 1; i++) { rs.push(getReport()); } rs.sort(); for (var i = 0; i < NUMAGENT; i++) { - assert.sameValue(rs[i], "A ok"); -} -assert.sameValue(rs[NUMAGENT], "B timed-out"); - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - -function waitUntil(i32a, k, value) { - var i = 0; - while (Atomics.load(i32a, k) !== value && i < 15) { - $262.agent.sleep(10); - i++; - } - assert.sameValue(Atomics.load(i32a, k), value, "All agents are running"); + assert.sameValue(rs[i], "A ok", 'The value of rs[i] is "A ok"'); } +assert.sameValue(rs[NUMAGENT], "B timed-out", 'The value of rs[NUMAGENT] is "B timed-out"'); diff --git a/test/built-ins/Atomics/wake/wake-all.js b/test/built-ins/Atomics/wake/wake-all.js index 25ef337015fb01354b17a7ce81ddf8ceef3c2ffa..ca6ebbacfdb38081cafca42ba0ffcc8bdc28785c 100644 --- a/test/built-ins/Atomics/wake/wake-all.js +++ b/test/built-ins/Atomics/wake/wake-all.js @@ -5,35 +5,35 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes all waiters if that's what the count is. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var WAKEUP = 0; // Waiters on this will be woken -var DUMMY = 1; // Waiters on this will not be woken -var RUNNING = 2; // Accounting of live agents -var NUMELEM = 3; - -var NUMAGENT = 3; +const WAKEUP = 0; // Waiters on this will be woken +const DUMMY = 1; // Waiters on this will not be woken +const RUNNING = 2; // Accounting of live agents +const NUMELEM = 3; +const NUMAGENT = 3; for (var i=0; i < NUMAGENT; i++) { -$262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - Atomics.add(i32a, ${RUNNING}, 1); - $262.agent.report("A " + Atomics.wait(i32a, ${WAKEUP}, 0)); - $262.agent.leaving(); -}) -`); + $262.agent.start(` + $262.agent.receiveBroadcast(function(sab) { + var i32a = new Int32Array(sab); + Atomics.add(i32a, ${RUNNING}, 1); + $262.agent.report("A " + Atomics.wait(i32a, ${WAKEUP}, 0)); + $262.agent.leaving(); + }); + `); } $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - Atomics.add(i32a, ${RUNNING}, 1); - // This will always time out. - $262.agent.report("B " + Atomics.wait(i32a, ${DUMMY}, 0, 10)); - $262.agent.leaving(); -}) + $262.agent.receiveBroadcast(function(sab) { + var i32a = new Int32Array(sab); + Atomics.add(i32a, ${RUNNING}, 1); + // This will always time out. + $262.agent.report("B " + Atomics.wait(i32a, ${DUMMY}, 0, 10)); + $262.agent.leaving(); + }); `); var i32a = new Int32Array(new SharedArrayBuffer(NUMELEM * Int32Array.BYTES_PER_ELEMENT)); @@ -47,32 +47,19 @@ waitUntil(i32a, RUNNING, NUMAGENT + 1); $262.agent.sleep(50); // Wake all waiting on WAKEUP, should be 3 always, they won't time out. -assert.sameValue(Atomics.wake(i32a, WAKEUP), NUMAGENT); +assert.sameValue( + Atomics.wake(i32a, WAKEUP), + NUMAGENT, + 'Atomics.wake(i32a, WAKEUP) equals the value of `NUMAGENT` (3)' +); -var rs = []; +const rs = []; for (var i = 0; i < NUMAGENT + 1; i++) { rs.push(getReport()); } rs.sort(); for (var i = 0; i < NUMAGENT; i++) { - assert.sameValue(rs[i], "A ok"); -} -assert.sameValue(rs[NUMAGENT], "B timed-out"); - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - -function waitUntil(i32a, k, value) { - var i = 0; - while (Atomics.load(i32a, k) !== value && i < 15) { - $262.agent.sleep(10); - i++; - } - assert.sameValue(Atomics.load(i32a, k), value, "All agents are running"); + assert.sameValue(rs[i], "A ok", 'The value of rs[i] is "A ok"'); } +assert.sameValue(rs[NUMAGENT], "B timed-out", 'The value of rs[NUMAGENT] is "B timed-out"'); diff --git a/test/built-ins/Atomics/wake/wake-in-order.js b/test/built-ins/Atomics/wake/wake-in-order.js index 60d00dc9d2ff762816929b52091c12bf72a481d5..36174a310e96a626f102b8812d3641f0e3468ea9 100644 --- a/test/built-ins/Atomics/wake/wake-in-order.js +++ b/test/built-ins/Atomics/wake/wake-in-order.js @@ -5,34 +5,36 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes agents in the order they are waiting. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var NUMAGENT = 3; - -var WAKEUP = 0; // Waiters on this will be woken -var SPIN = 1; // Worker i (zero-based) spins on location SPIN+i -var RUNNING = SPIN + NUMAGENT; // Accounting of live agents -var NUMELEM = RUNNING + 1; +const NUMAGENT = 3; +const WAKEUP = 0; // Waiters on this will be woken +const SPIN = 1; // Worker i (zero-based) spins on location SPIN+i +const RUNNING = SPIN + NUMAGENT; // Accounting of live agents +const NUMELEM = RUNNING + 1; // Create workers and start them all spinning. We set atomic slots to make // them go into a wait, thus controlling the waiting order. Then we wake them // one by one and observe the wakeup order. for (var i = 0; i < NUMAGENT; i++) { -$262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - Atomics.add(i32a, ${RUNNING}, 1); - while (Atomics.load(i32a, ${SPIN + i}) === 0) - /* nothing */ ; - $262.agent.report(${i} + Atomics.wait(i32a, ${WAKEUP}, 0)); - $262.agent.leaving(); -}); -`); + $262.agent.start(` + $262.agent.receiveBroadcast(function(sab) { + var i32a = new Int32Array(sab); + Atomics.add(i32a, ${RUNNING}, 1); + while (Atomics.load(i32a, ${SPIN + i}) === 0) + /* nothing */ ; + $262.agent.report(${i} + Atomics.wait(i32a, ${WAKEUP}, 0)); + $262.agent.leaving(); + }); + `); } -var i32a = new Int32Array(new SharedArrayBuffer(NUMELEM * Int32Array.BYTES_PER_ELEMENT)); +const i32a = new Int32Array( + new SharedArrayBuffer(NUMELEM * Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); // Wait for agents to be running. @@ -50,23 +52,6 @@ for (var i = 0; i < NUMAGENT; i++) { // Wake them up one at a time and check the order is 0 1 2 for (var i = 0; i < NUMAGENT; i++) { - assert.sameValue(Atomics.wake(i32a, WAKEUP, 1), 1); - assert.sameValue(getReport(), i + "ok"); -} - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - -function waitUntil(i32a, k, value) { - var i = 0; - while (Atomics.load(i32a, k) !== value && i < 15) { - $262.agent.sleep(10); - i++; - } - assert.sameValue(Atomics.load(i32a, k), value, 'All agents are running'); + assert.sameValue(Atomics.wake(i32a, WAKEUP, 1), 1, 'Atomics.wake(i32a, WAKEUP, 1) returns 1'); + assert.sameValue(getReport(), i + "ok", 'getReport() returns i + "ok"'); } diff --git a/test/built-ins/Atomics/wake/wake-nan.js b/test/built-ins/Atomics/wake/wake-nan.js index 14c47d69ce91b7723e190a743497752bcc013f15..3625ef5c8f6e9093c22e16289decc50a588aead9 100644 --- a/test/built-ins/Atomics/wake/wake-nan.js +++ b/test/built-ins/Atomics/wake/wake-nan.js @@ -5,28 +5,23 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes zero waiters if the count is NaN +includes: [testAtomics.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var i32a = new Int32Array(sab); - $262.agent.report(Atomics.wait(i32a, 0, 0, 1000)); // We will timeout eventually - $262.agent.leaving(); -}) + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + $262.agent.report(Atomics.wait(i32a, 0, 0, 1000)); // We will timeout eventually + $262.agent.leaving(); + }); `); -var i32a = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +const i32a = new Int32Array( + new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT) +); $262.agent.broadcast(i32a.buffer); $262.agent.sleep(500); // Give the agent a chance to wait -assert.sameValue(Atomics.wake(i32a, 0, NaN), 0); // Don't actually wake it -assert.sameValue(getReport(), "timed-out"); - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} +assert.sameValue(Atomics.wake(i32a, 0, NaN), 0, 'Atomics.wake(i32a, 0, NaN) returns 0'); // Don't actually wake it +assert.sameValue(getReport(), "timed-out", 'getReport() returns "timed-out"'); diff --git a/test/built-ins/Atomics/wake/wake-one.js b/test/built-ins/Atomics/wake/wake-one.js index 844546ff57bdd05da6b9e4607a4b1c6caa07ed84..49fea9399e44701174544d93373ac6fbd74c0ebb 100644 --- a/test/built-ins/Atomics/wake/wake-one.js +++ b/test/built-ins/Atomics/wake/wake-one.js @@ -5,34 +5,35 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes one waiter if that's what the count is. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var NUMAGENT = 3; - -var WAKEUP = 0; // Agents wait here -var RUNNING = 1; // Accounting of live agents here -var NUMELEM = 2; - -var WAKECOUNT = 1; - -for ( var i=0 ; i < NUMAGENT ; i++ ) { -$262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var ia = new Int32Array(sab); - Atomics.add(ia, ${RUNNING}, 1); - // Waiters that are not woken will time out eventually. - $262.agent.report(Atomics.wait(ia, ${WAKEUP}, 0, 2000)); - $262.agent.leaving(); -}) -`); +const NUMAGENT = 3; +const WAKEUP = 0; // Agents wait here +const RUNNING = 1; // Accounting of live agents here +const NUMELEM = 2; +const WAKECOUNT = 1; + +for (var i = 0; i < NUMAGENT; i++ ) { + $262.agent.start(` + $262.agent.receiveBroadcast(function(sab) { + var i32a = new Int32Array(sab); + Atomics.add(i32a, ${RUNNING}, 1); + // Waiters that are not woken will time out eventually. + $262.agent.report(Atomics.wait(i32a, ${WAKEUP}, 0, 2000)); + $262.agent.leaving(); + }); + `); } -var ia = new Int32Array(new SharedArrayBuffer(NUMELEM * Int32Array.BYTES_PER_ELEMENT)); -$262.agent.broadcast(ia.buffer); +const i32a = new Int32Array( + new SharedArrayBuffer(NUMELEM * Int32Array.BYTES_PER_ELEMENT) +); +$262.agent.broadcast(i32a.buffer); // Wait for agents to be running. -waitUntil(ia, RUNNING, NUMAGENT); +waitUntil(i32a, RUNNING, NUMAGENT); // Then wait some more to give the agents a fair chance to wait. If we don't, // we risk sending the wakeup before agents are sleeping, and we hang. @@ -41,35 +42,22 @@ $262.agent.sleep(50); // There's a slight risk we'll fail to wake the desired count, if the preceding // sleep() took much longer than anticipated and workers have started timing // out. -assert.sameValue(Atomics.wake(ia, 0, WAKECOUNT), WAKECOUNT); +assert.sameValue( + Atomics.wake(i32a, 0, WAKECOUNT), + WAKECOUNT, + 'Atomics.wake(i32a, 0, WAKECOUNT) equals the value of `WAKECOUNT` (1)' +); // Collect and check results -var rs = []; +const rs = []; for (var i = 0; i < NUMAGENT; i++) { rs.push(getReport()); } rs.sort(); for (var i = 0; i < WAKECOUNT; i++) { - assert.sameValue(rs[i], "ok"); + assert.sameValue(rs[i], 'ok', 'The value of rs[i] is "ok"'); } for (var i = WAKECOUNT; i < NUMAGENT; i++) { - assert.sameValue(rs[i], "timed-out"); -} - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - -function waitUntil(ia, k, value) { - var i = 0; - while (Atomics.load(ia, k) !== value && i < 15) { - $262.agent.sleep(10); - i++; - } - assert.sameValue(Atomics.load(ia, k), value, "All agents are running"); + assert.sameValue(rs[i], 'timed-out', 'The value of rs[i] is "timed-out"'); } diff --git a/test/built-ins/Atomics/wake/wake-rewake-noop.js b/test/built-ins/Atomics/wake/wake-rewake-noop.js index 9c6362e34aee45d5ef44e1d7d4de953741d75b72..3f5e6cbc0fefbfa4f1dd606c2c50a4d260f7cde6 100644 --- a/test/built-ins/Atomics/wake/wake-rewake-noop.js +++ b/test/built-ins/Atomics/wake/wake-rewake-noop.js @@ -5,49 +5,36 @@ esid: sec-atomics.wake description: > Test that Atomics.wake on awoken waiter is a noop. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - -function waitUntil(ia, k, value) { - var i = 0; - while (Atomics.load(ia, k) !== value && i < 15) { - $262.agent.sleep(10); - i++; - } - assert.sameValue(Atomics.load(ia, k), value, "All agents are running"); -} - $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var ia = new Int32Array(sab); - Atomics.add(ia, 1, 1); - $262.agent.report(Atomics.wait(ia, 0, 0, 2000)); - $262.agent.leaving(); -}) + $262.agent.receiveBroadcast(function(sab) { + var i32a = new Int32Array(sab); + Atomics.add(i32a, 1, 1); + $262.agent.report(Atomics.wait(i32a, 0, 0, 2000)); + $262.agent.leaving(); + }); `); -var ia = new Int32Array(new SharedArrayBuffer(2 * Int32Array.BYTES_PER_ELEMENT)); -$262.agent.broadcast(ia.buffer); +var i32a = new Int32Array( + new SharedArrayBuffer(2 * Int32Array.BYTES_PER_ELEMENT) +); + +$262.agent.broadcast(i32a.buffer); -waitUntil(ia, 1, 1); +waitUntil(i32a, 1, 1); -assert.sameValue(Atomics.wake(ia, 0, 1), 1); +assert.sameValue(Atomics.wake(i32a, 0, 1), 1, 'Atomics.wake(i32a, 0, 1) returns 1'); $262.agent.sleep(10); // Collect and check results var report = getReport(); -assert.sameValue(report, "ok"); +assert.sameValue(report, 'ok', 'The value of `report` is "ok"'); // Already awake, this should be a noop -assert.sameValue(Atomics.wake(ia, 0, 1), 0); +assert.sameValue(Atomics.wake(i32a, 0, 1), 0, 'Atomics.wake(i32a, 0, 1) returns 0'); diff --git a/test/built-ins/Atomics/wake/wake-two.js b/test/built-ins/Atomics/wake/wake-two.js index b76c5f69335bdbf88b1297e62d1e8ab6d870a40c..a8544684d34c3727fcaa1fdceb161ad2e1ddcdba 100644 --- a/test/built-ins/Atomics/wake/wake-two.js +++ b/test/built-ins/Atomics/wake/wake-two.js @@ -5,35 +5,36 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes two waiters if that's what the count is. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ var NUMAGENT = 3; - var WAKEUP = 0; // Agents wait here var RUNNING = 1; // Accounting of live agents here var NUMELEM = 2; - var WAKECOUNT = 2; for ( var i=0 ; i < NUMAGENT ; i++ ) { -$262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var ia = new Int32Array(sab); - Atomics.add(ia, ${RUNNING}, 1); - // Waiters that are not woken will time out eventually. - $262.agent.report(Atomics.wait(ia, ${WAKEUP}, 0, 2000)); - $262.agent.leaving(); -}) -`); + $262.agent.start(` + $262.agent.receiveBroadcast(function(sab) { + var i32a = new Int32Array(sab); + Atomics.add(i32a, ${RUNNING}, 1); + // Waiters that are not woken will time out eventually. + $262.agent.report(Atomics.wait(i32a, ${WAKEUP}, 0, 2000)); + $262.agent.leaving(); + }) + `); } -var ia = new Int32Array(new SharedArrayBuffer(NUMELEM * Int32Array.BYTES_PER_ELEMENT)); -$262.agent.broadcast(ia.buffer); +var i32a = new Int32Array( + new SharedArrayBuffer(NUMELEM * Int32Array.BYTES_PER_ELEMENT) +); +$262.agent.broadcast(i32a.buffer); // Wait for agents to be running. -waitUntil(ia, RUNNING, NUMAGENT); +waitUntil(i32a, RUNNING, NUMAGENT); // Then wait some more to give the agents a fair chance to wait. If we don't, // we risk sending the wakeup before agents are sleeping, and we hang. @@ -42,7 +43,11 @@ $262.agent.sleep(500); // There's a slight risk we'll fail to wake the desired count, if the preceding // sleep() took much longer than anticipated and workers have started timing // out. -assert.sameValue(Atomics.wake(ia, 0, WAKECOUNT), WAKECOUNT); +assert.sameValue( + Atomics.wake(i32a, 0, WAKECOUNT), + WAKECOUNT, + 'Atomics.wake(i32a, 0, WAKECOUNT) equals the value of `WAKECOUNT` (2)' +); // Collect and check results var rs = []; @@ -52,25 +57,9 @@ for (var i = 0; i < NUMAGENT; i++) { rs.sort(); for (var i = 0; i < WAKECOUNT; i++) { - assert.sameValue(rs[i], "ok"); + assert.sameValue(rs[i], 'ok', 'The value of rs[i] is "ok"'); } for (var i = WAKECOUNT; i < NUMAGENT; i++) { - assert.sameValue(rs[i], "timed-out"); + assert.sameValue(rs[i], 'timed-out', 'The value of rs[i] is "timed-out"'); } -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - -function waitUntil(ia, k, value) { - var i = 0; - while (Atomics.load(ia, k) !== value && i < 15) { - $262.agent.sleep(100); - i++; - } - assert.sameValue(Atomics.load(ia, k), value, "All agents are running"); -} diff --git a/test/built-ins/Atomics/wake/wake-with-no-agents-waiting.js b/test/built-ins/Atomics/wake/wake-with-no-agents-waiting.js index b791ef7b264c577eae5373de1b1e0702da130f9d..55357c68876eda0edf039fe60967e28115988bcd 100644 --- a/test/built-ins/Atomics/wake/wake-with-no-agents-waiting.js +++ b/test/built-ins/Atomics/wake/wake-with-no-agents-waiting.js @@ -5,31 +5,25 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes zero waiters if there are no agents waiting. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var ia = new Int32Array(sab); - Atomics.add(ia, 1, 1); - $262.agent.leaving(); -}) + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + Atomics.add(i32a, 1, 1); + $262.agent.leaving(); + }); `); -var ia = new Int32Array(new SharedArrayBuffer(2 * Int32Array.BYTES_PER_ELEMENT)); -$262.agent.broadcast(ia.buffer); +var i32a = new Int32Array( + new SharedArrayBuffer(2 * Int32Array.BYTES_PER_ELEMENT) +); +$262.agent.broadcast(i32a.buffer); -waitUntil(ia, 1); +waitUntil(i32a, 1, 1); // There are ZERO agents waiting to wake... -assert.sameValue(Atomics.wake(ia, 0, 1), 0); - -function waitUntil(ia, k) { - var i = 0; - while (Atomics.load(ia, k) !== 1 && i < 15) { - $262.agent.sleep(100); - i++; - } - assert.sameValue(Atomics.load(ia, k), 1, "All agents are running"); -} +assert.sameValue(Atomics.wake(i32a, 0, 1), 0, 'Atomics.wake(i32a, 0, 1) returns 0'); diff --git a/test/built-ins/Atomics/wake/wake-with-no-matching-agents-waiting.js b/test/built-ins/Atomics/wake/wake-with-no-matching-agents-waiting.js index 9622bb67a2c3de02585616afadfaaa915f30dc5e..b9e68f6225057d7089faa052c6e7813b447e2046 100644 --- a/test/built-ins/Atomics/wake/wake-with-no-matching-agents-waiting.js +++ b/test/built-ins/Atomics/wake/wake-with-no-matching-agents-waiting.js @@ -6,31 +6,33 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes zero waiters if there are no agents that match its arguments waiting. +includes: [testAtomics.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var ia = new Int32Array(sab); - Atomics.add(ia, 1, 1); - $262.agent.leaving(); -}) + $262.agent.receiveBroadcast(function(sab) { + const i32a = new Int32Array(sab); + Atomics.add(i32a, 1, 1); + $262.agent.leaving(); + }); `); -var ia = new Int32Array(new SharedArrayBuffer(2 * Int32Array.BYTES_PER_ELEMENT)); -$262.agent.broadcast(ia.buffer); +var i32a = new Int32Array(new SharedArrayBuffer(2 * Int32Array.BYTES_PER_ELEMENT)); +$262.agent.broadcast(i32a.buffer); -waitUntil(ia, 1); +waitUntil(i32a, 1, 1); // There are ZERO matching agents... -assert.sameValue(Atomics.wake(ia, 1, 1), 0); +assert.sameValue(Atomics.wake(i32a, 1, 1), 0, 'Atomics.wake(i32a, 1, 1) returns 0'); -function waitUntil(ia, k) { +function waitUntil(i32a, index, numberOfAgentsExpected) { var i = 0; - while (Atomics.load(ia, k) !== 1 && i < 15) { - $262.agent.sleep(100); + while (Atomics.load(i32a, index) !== numberOfAgentsExpected && i < 15) { + $262.agent.sleep(10); i++; } - assert.sameValue(Atomics.load(ia, k), 1, "All agents are running"); + const numberOfAgentsReady = Atomics.load(i32a, index); + assert.sameValue(numberOfAgentsReady, numberOfAgentsExpected, `'numberOfAgentsReady' equals the value of numberOfAgentsExpected (${numberOfAgentsExpected})`); } diff --git a/test/built-ins/Atomics/wake/wake-zero.js b/test/built-ins/Atomics/wake/wake-zero.js index b32134ba64ac14061af9064984fb9151d1fd8a5f..7e6d85bf04ddf3d40348be3d9c89cd0d942ac86b 100644 --- a/test/built-ins/Atomics/wake/wake-zero.js +++ b/test/built-ins/Atomics/wake/wake-zero.js @@ -5,6 +5,7 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes zero waiters if that's what the count is. +includes: [atomicsHelper.js] features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ @@ -12,26 +13,29 @@ var NUMAGENT = 3; var WAKEUP = 0; // Agents wait here var RUNNING = 1; // Accounting of live agents here var NUMELEM = 2; - var WAKECOUNT = 0; -for ( var i=0 ; i < NUMAGENT ; i++ ) { +for (var i = 0; i < NUMAGENT; i++) { $262.agent.start(` -$262.agent.receiveBroadcast(function(sab) { - var ia = new Int32Array(sab); - Atomics.add(ia, ${RUNNING}, 1); - // Waiters that are not woken will time out eventually. - $262.agent.report(Atomics.wait(ia, ${WAKEUP}, 0, 200)); - $262.agent.leaving(); -}) + $262.agent.receiveBroadcast(function(sab) { + var i32a = new Int32Array(sab); + Atomics.add(i32a, ${RUNNING}, 1); + // Waiters that are not woken will time out eventually. + $262.agent.report(Atomics.wait(i32a, ${WAKEUP}, 0, 200)); + $262.agent.leaving(); + }); `); } -var ia = new Int32Array(new SharedArrayBuffer(NUMELEM * Int32Array.BYTES_PER_ELEMENT)); -$262.agent.broadcast(ia.buffer); +const i32a = new Int32Array( + new SharedArrayBuffer(NUMELEM * Int32Array.BYTES_PER_ELEMENT) +); + +$262.agent.broadcast(i32a.buffer); + // Wait for agents to be running. -waitUntil(ia, RUNNING, NUMAGENT); +waitUntil(i32a, RUNNING, NUMAGENT); // Then wait some more to give the agents a fair chance to wait. If we don't, // we risk sending the wakeup before agents are sleeping, and we hang. @@ -40,7 +44,11 @@ $262.agent.sleep(50); // There's a slight risk we'll fail to wake the desired count, if the preceding // sleep() took much longer than anticipated and workers have started timing // out. -assert.sameValue(Atomics.wake(ia, 0, WAKECOUNT), WAKECOUNT); +assert.sameValue( + Atomics.wake(i32a, 0, WAKECOUNT), + WAKECOUNT, + 'Atomics.wake(i32a, 0, WAKECOUNT) equals the value of `WAKECOUNT` (0)' +); // Collect and check results var rs = []; @@ -50,25 +58,9 @@ for (var i = 0; i < NUMAGENT; i++) { rs.sort(); for (var i = 0; i < WAKECOUNT; i++) { - assert.sameValue(rs[i], "ok", "The value of rs[i] is ok"); + assert.sameValue(rs[i], 'ok', 'The value of rs[i] is "ok"'); } for (var i = WAKECOUNT; i < NUMAGENT; i++) { - assert.sameValue(rs[i], "timed-out", "The value of rs[i] is timed-out"); + assert.sameValue(rs[i], 'timed-out', 'The value of rs[i] is "timed-out"'); } -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - -function waitUntil(ia, k, value) { - var i = 0; - while (Atomics.load(ia, k) !== value && i < 15) { - $262.agent.sleep(10); - i++; - } - assert.sameValue(Atomics.load(ia, k), value, "Atomics.load(ia, k) returns value (All agents are running)"); -}