diff --git a/harness/atomicsHelper.js b/harness/atomicsHelper.js index 5265061708..81ed6d30d8 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 b48b15e08b..0e4d950cd2 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 81f6af3a60..790773e42b 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 b435060181..07373b8055 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 f40d76f01a..b9a8a2753d 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 f982fd14e7..aaa4b5e438 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 8adec5ce05..d6f1a85d2c 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 3d9b7f9bbf..80aab8022f 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 eee639f78c..f478ab396a 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 9543c6118e..de85664164 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 8037e55295..8da783be7d 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 a3de63681a..f8324d04e3 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 e98c78ef51..7e3486dbf6 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 ee9a78e4dd..afb26a6728 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 1e056bb72b..533bb27cf1 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 ee07ce4edb..60a5b9a2e1 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 7c1d11e91b..fa3c7dc027 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 03d05e02c6..60f004ea21 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 b97b74ba99..9429f6ef75 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 7412a9adcb..050749ad9f 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 20a7113436..47a044c44c 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 81b22757fc..8d8ebc0755 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 9bb706ff59..cbe7776b1d 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 3707ceafe1..69d24c938e 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 d192847026..d8a6b420a1 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 b6e07e27e2..6ed7eaa773 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 8d4e994d78..bedd9f0b28 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 ae7b4fa1ff..948eac8ce3 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.receiveBroadcast(function(sab) { + const i64a = new BigInt64Array(sab); - $262.agent.report(${agent1}); - Atomics.wait(i64a, 0, 0); - $262.agent.report(${agent1}); - - $262.agent.leaving(); -}) + $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.start(` + $262.agent.receiveBroadcast(function(sab) { + const i64a = new BigInt64Array(sab); - $262.agent.report(${agent2}); - - Atomics.wait(i64a, 0, 0); - $262.agent.report(${agent2}); - - $262.agent.leaving(); -}) + $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.start(` + $262.agent.receiveBroadcast(function(sab) { + const i64a = new BigInt64Array(sab); - $262.agent.report(${agent3}); - - Atomics.wait(i64a, 0, 0); - $262.agent.report(${agent3}); - - $262.agent.leaving(); -}) + $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 +// 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]); -var orderAgentsWereWoken = getReport(); +assert.sameValue(Atomics.wake(i64a, 2, 1), 1); +assert.sameValue(getReport(), 'ok'); +assert.sameValue(getReport(), started[1]); -assert.sameValue(Atomics.wake(i64a, 0, 1), 1); - -orderAgentsWereWoken += getReport(); - -assert.sameValue(Atomics.wake(i64a, 0, 1), 1); - -orderAgentsWereWoken += getReport(); - -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 fd452d1bd8..0b975788eb 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 eedac503fb..0000000000 --- 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 dc34bde85a..d453b5ecda 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 c3fe8a8270..0000000000 --- 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 3322d669b7..609f5657b9 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; - } -}; + const valueOf = { + valueOf: function() { + return false; + } + }; -var toPrimitive = { - [Symbol.toPrimitive]: function() { - return false; - } -}; + const 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(); -}); + $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 86463f3d61..fca789f8c3 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 efbaa86950..9b6b253de8 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 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 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); + 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)); + 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)); -} + // 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 3a7c2756d4..fd181765bb 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 6b72e73417..c268560562 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 92199fad5a..c8ca7e5d7f 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 019ca1db96..9fadae6779 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 1e70eeecbe..33de28b41f 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 345fe9a5b9..bda0a701fb 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 16aedd6aa1..5219c79acf 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 f9d0aa3d29..c985129ff6 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 04c9f819af..64d3114a14 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 bc4e315847..bc59c6c571 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 1de7591ad4..725dc57e35 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 10d3d58144..c79dad7938 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 ea2ce1f1bf..b85963ef59 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 3db334f895..4e11f07287 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 0fc66993aa..108f235397 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 e60165ffed..bcd44c9a3a 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 511ba811ae..e9f5e0e752 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 64850f1c0e..b6b3bb9066 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(` + const valueOf = { + valueOf: function() { + return null; + } + }; -$262.agent.start( - ` -var valueOf = { - valueOf: function() { - return null; - } -}; + const toPrimitive = { + [Symbol.toPrimitive]: 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.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 354d29cc42..8bae175c7d 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 11b7aee594..caac5dc689 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 ] ---*/ +$262.agent.start(` + const valueOf = { + valueOf: function() { + return 0; + } + }; -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} + const toString = { + toString: function() { + return "0"; + } + }; -$262.agent.start( - ` -var valueOf = { - valueOf: function() { - return 0; - } -}; + const toPrimitive = { + [Symbol.toPrimitive]: 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.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 f2374ce096..43af65dae2 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 7d467a218f..fc09d1ae7d 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 f4a068881f..2470216793 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(` + const poisonedValueOf = { + valueOf: function() { + throw new Error("should not evaluate this code"); + } + }; -$262.agent.start( - ` -var 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"); + } + }; -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.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 70c5ef495c..73bd54b0ef 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 997ad79246..0fff08b9c4 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(` + const poisonedValueOf = { + valueOf: function() { + throw new Test262Error('should not evaluate this code'); + } + }; -$262.agent.start( - ` -var 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"); + } + }; -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.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 8b630f4c77..a84f54ac6c 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 9c23685c7c..20a75c9e64 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 b0cc8a7c31..6030e0fd13 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 b3f582db00..02b31acb57 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"); - } -}; + const 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"); - } -}; + const 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(); -}); + $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 232195055f..86e06e1d7d 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 7e3b1fb0c3..bd95c1c525 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(` + const valueOf = { + valueOf: function() { + return true; + } + }; -$262.agent.start( - ` -var valueOf = { - valueOf: function() { - return true; - } -}; + const toPrimitive = { + [Symbol.toPrimitive]: 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.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 9e9bea15dd..ee4a808bee 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 8a8fd19461..2ea65ef5cc 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 ac3bda6bb6..ca25def370 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 8240a3271a..9dce875fa6 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 94b6d4eabe..53db6ae85c 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 6c800db525..20fc23f999 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 d049f9676b..1890a2828e 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 +// 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]); -var orderAgentsWereWoken = getReport(); +assert.sameValue(Atomics.wake(i32a, 2, 1), 1); +assert.sameValue(getReport(), 'ok'); +assert.sameValue(getReport(), started[1]); -assert.sameValue(Atomics.wake(i32a, 0, 1), 1); - -orderAgentsWereWoken += getReport(); - -assert.sameValue(Atomics.wake(i32a, 0, 1), 1); - -orderAgentsWereWoken += getReport(); - -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 b0efbcb149..008955b57f 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 9bba4693f0..0000000000 --- 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 ab3ab03bb3..247550a7c1 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 78a3786680..e35b19ba84 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 6b9b760d7c..b056597318 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 042f66707f..30cfc76bcc 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 3981e9200e..d237accfa6 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 6494b0117a..9fa4964961 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[i], "A ok", 'The value of rs[i] is "A ok"'); } -assert.sameValue(rs[NUMAGENT], "B timed-out"); +assert.sameValue(rs[NUMAGENT], "B timed-out", 'The value of rs[NUMAGENT] is "B timed-out"'); -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(10); - } - return r; -} - -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 23c32180d3..1ffb865ef3 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 d85adb7709..9a3ed079fd 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 b6f26bb05f..0d8b569b50 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 21e234bf94..fc425cee64 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 4edad8c342..585434c58f 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 83ed31f958..7796716500 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 72ace0788a..7fbc763a80 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 917f0d76ec..df172ff2e1 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 c092f22074..68637f6634 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 d7b9e547ae..60f6103068 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 bd783ab62a..b31d39aa4d 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 711d690392..032a489162 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 e8cfc62481..ca3f198c6a 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 7acf27e8c0..2e0203e290 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 b8ca158b4f..cf8cc3e5d6 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 fb3cf8ee4e..4d2300fd98 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 a07c2bdeb4..bbc9f08387 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 4259c3a7a1..911ff3c00b 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 2fb0b470f0..723753f685 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 a6a3e68d02..3faf97b4dd 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) { - 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); +$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(); + }); +`); + +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"); +// 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"'); -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 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 3c94b89201..f319ef5f8f 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 25ef337015..ca6ebbacfd 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 60d00dc9d2..36174a310e 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 14c47d69ce..3625ef5c8f 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 844546ff57..49fea9399e 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; +const NUMAGENT = 3; +const WAKEUP = 0; // Agents wait here +const RUNNING = 1; // Accounting of live agents here +const NUMELEM = 2; +const WAKECOUNT = 1; -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(); -}) -`); +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 9c6362e34a..3f5e6cbc0f 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) +); -waitUntil(ia, 1, 1); +$262.agent.broadcast(i32a.buffer); -assert.sameValue(Atomics.wake(ia, 0, 1), 1); +waitUntil(i32a, 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 b76c5f6933..a8544684d3 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 b791ef7b26..55357c6887 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 9622bb67a2..b9e68f6225 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 b32134ba64..7e6d85bf04 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)"); -}