From ac65ecab7c38230607f72b773c26556dbfe833e3 Mon Sep 17 00:00:00 2001 From: Rick Waldron <waldron.rick@gmail.com> Date: Thu, 19 Apr 2018 10:11:50 -0400 Subject: [PATCH] Atomics: updates to tests --- harness/testTypedArray.js | 3 + test/built-ins/Atomics/Symbol.toStringTag.js | 2 +- test/built-ins/Atomics/add/bad-range.js | 13 ++- test/built-ins/Atomics/add/good-views.js | 13 ++- test/built-ins/Atomics/add/non-views.js | 2 +- .../Atomics/add/nonshared-int-views.js | 17 ++-- .../Atomics/add/shared-nonint-views.js | 14 ++- test/built-ins/Atomics/and/bad-range.js | 13 ++- test/built-ins/Atomics/and/good-views.js | 13 ++- test/built-ins/Atomics/and/non-views.js | 2 +- .../Atomics/and/nonshared-int-views.js | 19 ++-- .../Atomics/and/shared-nonint-views.js | 14 ++- .../Atomics/compareExchange/bad-range.js | 13 ++- .../Atomics/compareExchange/good-views.js | 20 ++--- .../Atomics/compareExchange/non-views.js | 2 +- .../compareExchange/nonshared-int-views.js | 19 ++-- .../compareExchange/shared-nonint-views.js | 14 ++- test/built-ins/Atomics/exchange/bad-range.js | 13 ++- test/built-ins/Atomics/exchange/good-views.js | 13 ++- test/built-ins/Atomics/exchange/non-views.js | 2 +- .../Atomics/exchange/nonshared-int-views.js | 19 ++-- .../Atomics/exchange/shared-nonint-views.js | 14 ++- .../Atomics/isLockFree/corner-cases.js | 11 +-- test/built-ins/Atomics/isLockFree/value.js | 57 ++++++------ test/built-ins/Atomics/load/bad-range.js | 13 ++- test/built-ins/Atomics/load/good-views.js | 12 +-- test/built-ins/Atomics/load/non-views.js | 2 +- .../Atomics/load/nonshared-int-views.js | 14 +-- .../Atomics/load/shared-nonint-views.js | 15 ++-- test/built-ins/Atomics/or/bad-range.js | 13 ++- test/built-ins/Atomics/or/good-views.js | 12 +-- test/built-ins/Atomics/or/non-views.js | 2 +- .../Atomics/or/nonshared-int-views.js | 19 ++-- .../Atomics/or/shared-nonint-views.js | 12 ++- test/built-ins/Atomics/store/bad-range.js | 13 ++- test/built-ins/Atomics/store/good-views.js | 22 ++--- test/built-ins/Atomics/store/non-views.js | 2 +- .../Atomics/store/nonshared-int-views.js | 19 ++-- .../Atomics/store/shared-nonint-views.js | 13 ++- test/built-ins/Atomics/sub/bad-range.js | 13 ++- test/built-ins/Atomics/sub/good-views.js | 13 ++- test/built-ins/Atomics/sub/non-views.js | 2 +- .../Atomics/sub/nonshared-int-views.js | 19 ++-- .../Atomics/sub/shared-nonint-views.js | 13 ++- .../Atomics/wait/cannot-suspend-throws.js | 9 +- test/built-ins/Atomics/wait/did-timeout.js | 16 ++-- .../Atomics/wait/false-for-timeout-agent.js | 68 +++++++++++++++ .../Atomics/wait/false-for-timeout.js | 57 +++++------- test/built-ins/Atomics/wait/good-views.js | 8 +- .../built-ins/Atomics/wait/nan-for-timeout.js | 12 ++- .../Atomics/wait/negative-index-throws.js | 18 ++-- .../Atomics/wait/negative-timeout-agent.js | 33 +++++++ .../Atomics/wait/negative-timeout.js | 25 ++---- .../Atomics/wait/no-spurious-wakeup.js | 5 +- .../wait/non-int32-typedarray-throws.js | 2 +- .../wait/non-shared-bufferdata-throws.js | 6 +- .../Atomics/wait/not-a-typedarray-throws.js | 11 ++- .../Atomics/wait/not-an-object-throws.js | 30 +++++-- .../Atomics/wait/null-bufferdata-throws.js | 6 +- .../Atomics/wait/null-for-timeout-agent.js | 68 +++++++++++++++ .../Atomics/wait/null-for-timeout.js | 59 +++++-------- .../Atomics/wait/object-for-timeout-agent.js | 75 ++++++++++++++++ .../Atomics/wait/object-for-timeout.js | 66 +++++++------- .../Atomics/wait/out-of-range-index-throws.js | 15 +++- ...oisoned-object-for-timeout-throws-agent.js | 74 ++++++++++++++++ .../poisoned-object-for-timeout-throws.js | 72 ++++++---------- .../wait/symbol-for-index-throws-agent.js | 86 +++++++++++++++++++ .../Atomics/wait/symbol-for-index-throws.js | 57 +++++++----- .../wait/symbol-for-timeout-throws-agent.js | 59 +++++++++++++ .../Atomics/wait/symbol-for-timeout-throws.js | 65 +++++++------- .../wait/symbol-for-value-throws-agent.js | 76 ++++++++++++++++ .../Atomics/wait/symbol-for-value-throws.js | 50 ++++++----- .../Atomics/wait/true-for-timeout-agent.js | 68 +++++++++++++++ .../Atomics/wait/true-for-timeout.js | 55 +++++------- .../Atomics/wait/undefined-for-timeout.js | 5 +- .../wait/undefined-index-defaults-to-zero.js | 9 +- .../built-ins/Atomics/wait/value-not-equal.js | 13 +-- .../wait/wait-index-value-not-equal.js | 8 +- .../waitlist-order-of-operations-is-fifo.js | 22 ++--- .../Atomics/wait/was-woken-before-timeout.js | 58 +++++++------ test/built-ins/Atomics/wait/was-woken.js | 20 ++--- test/built-ins/Atomics/wake/bad-range.js | 6 +- test/built-ins/Atomics/wake/counts.js | 2 +- test/built-ins/Atomics/wake/good-views.js | 4 +- test/built-ins/Atomics/wake/missing-count.js | 2 +- test/built-ins/Atomics/wake/negative-count.js | 2 +- .../Atomics/wake/negative-index-throws.js | 2 +- .../wake/non-int32-typedarray-throws.js | 2 +- .../wake/non-shared-bufferdata-throws.js | 2 +- test/built-ins/Atomics/wake/non-views.js | 2 +- .../Atomics/wake/nonshared-int-views.js | 20 ++--- .../Atomics/wake/not-a-typedarray-throws.js | 6 +- .../Atomics/wake/not-an-object-throws.js | 30 +++++-- .../Atomics/wake/null-bufferdata-throws.js | 6 +- .../Atomics/wake/out-of-range-index-throws.js | 14 ++- .../Atomics/wake/shared-nonint-views.js | 15 ++-- .../Atomics/wake/symbol-for-index-throws.js | 61 +++++++------ .../Atomics/wake/undefined-for-count.js | 2 +- .../wake/undefined-index-defaults-to-zero.js | 2 +- .../built-ins/Atomics/wake/wake-all-on-loc.js | 11 ++- test/built-ins/Atomics/wake/wake-all.js | 11 ++- test/built-ins/Atomics/wake/wake-in-order.js | 5 +- test/built-ins/Atomics/wake/wake-nan.js | 5 +- test/built-ins/Atomics/wake/wake-one.js | 14 +-- test/built-ins/Atomics/wake/wake-two.js | 14 +-- test/built-ins/Atomics/wake/wake-zero.js | 19 ++-- test/built-ins/Atomics/xor/bad-range.js | 11 ++- test/built-ins/Atomics/xor/good-views.js | 12 +-- test/built-ins/Atomics/xor/non-views.js | 2 +- .../Atomics/xor/nonshared-int-views.js | 19 ++-- .../Atomics/xor/shared-nonint-views.js | 14 ++- 111 files changed, 1418 insertions(+), 850 deletions(-) create mode 100644 test/built-ins/Atomics/wait/false-for-timeout-agent.js create mode 100644 test/built-ins/Atomics/wait/negative-timeout-agent.js create mode 100644 test/built-ins/Atomics/wait/null-for-timeout-agent.js create mode 100644 test/built-ins/Atomics/wait/object-for-timeout-agent.js create mode 100644 test/built-ins/Atomics/wait/poisoned-object-for-timeout-throws-agent.js create mode 100644 test/built-ins/Atomics/wait/symbol-for-index-throws-agent.js create mode 100644 test/built-ins/Atomics/wait/symbol-for-timeout-throws-agent.js create mode 100644 test/built-ins/Atomics/wait/symbol-for-value-throws-agent.js create mode 100644 test/built-ins/Atomics/wait/true-for-timeout-agent.js diff --git a/harness/testTypedArray.js b/harness/testTypedArray.js index 2699214ca3..030c05e90b 100644 --- a/harness/testTypedArray.js +++ b/harness/testTypedArray.js @@ -20,6 +20,9 @@ var typedArrayConstructors = [ Uint8ClampedArray ]; +var floatArrayConstructors = typedArrayConstructors.slice(0, 2); +var intArrayConstructors = typedArrayConstructors.slice(2, 7); + /** * The %TypedArray% intrinsic constructor function. */ diff --git a/test/built-ins/Atomics/Symbol.toStringTag.js b/test/built-ins/Atomics/Symbol.toStringTag.js index d3d1ba2d7d..83d8c5695c 100644 --- a/test/built-ins/Atomics/Symbol.toStringTag.js +++ b/test/built-ins/Atomics/Symbol.toStringTag.js @@ -11,7 +11,7 @@ info: | This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }. includes: [propertyHelper.js] -features: [Atomics, Symbol.toStringTag] +features: [Atomics, Symbol, Symbol.toStringTag] ---*/ assert.sameValue(Atomics[Symbol.toStringTag], 'Atomics'); diff --git a/test/built-ins/Atomics/add/bad-range.js b/test/built-ins/Atomics/add/bad-range.js index b7aa9cd5ab..59efe923db 100644 --- a/test/built-ins/Atomics/add/bad-range.js +++ b/test/built-ins/Atomics/add/bad-range.js @@ -6,21 +6,20 @@ esid: sec-atomics.add description: > Test range checking of Atomics.add on arrays that allow atomic operations includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, BigInt, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(8); -var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var buffer = new SharedArrayBuffer(8); +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { views.push(BigInt64Array); views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - let view = new View(sab); +testWithTypedArrayConstructors(function(TA) { + let view = new TA(buffer); testWithAtomicsOutOfBoundsIndices(function(IdxGen) { - let Idx = IdxGen(view); - assert.throws(RangeError, () => Atomics.add(view, Idx, 10)); + assert.throws(RangeError, () => Atomics.add(view, IdxGen(view), 10)); }); }, views); diff --git a/test/built-ins/Atomics/add/good-views.js b/test/built-ins/Atomics/add/good-views.js index ff1805808e..64235a5be8 100644 --- a/test/built-ins/Atomics/add/good-views.js +++ b/test/built-ins/Atomics/add/good-views.js @@ -5,19 +5,18 @@ esid: sec-atomics.add description: Test Atomics.add on arrays that allow atomic operations. includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ var sab = new SharedArrayBuffer(1024); var ab = new ArrayBuffer(16); +var views = intArrayConstructors.slice(); -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; - -testWithTypedArrayConstructors(function(View) { +testWithTypedArrayConstructors(function(TA) { // Make it interesting - use non-zero byteOffsets and non-zero indexes. - var view = new View(sab, 32, 20); - var control = new View(ab, 0, 2); + var view = new TA(sab, 32, 20); + var control = new TA(ab, 0, 2); // Add positive number view[8] = 0; @@ -52,4 +51,4 @@ testWithTypedArrayConstructors(function(View) { Atomics.store(view, Idx, 37); assert.sameValue(Atomics.add(view, Idx, 0), 37); }); -}, int_views); +}, views); diff --git a/test/built-ins/Atomics/add/non-views.js b/test/built-ins/Atomics/add/non-views.js index e0923889a4..f0eecdafb2 100644 --- a/test/built-ins/Atomics/add/non-views.js +++ b/test/built-ins/Atomics/add/non-views.js @@ -6,7 +6,7 @@ esid: sec-atomics.add description: > Test Atomics.add on view values other than TypedArrays includes: [testAtomics.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer] ---*/ testWithAtomicsNonViewValues(function(view) { diff --git a/test/built-ins/Atomics/add/nonshared-int-views.js b/test/built-ins/Atomics/add/nonshared-int-views.js index e1a44542a8..92b75d32e3 100644 --- a/test/built-ins/Atomics/add/nonshared-int-views.js +++ b/test/built-ins/Atomics/add/nonshared-int-views.js @@ -6,20 +6,17 @@ esid: sec-atomics.add description: > Test Atomics.add on non-shared integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [ArrayBuffer, Atomics, BigInt, TypedArray] ---*/ var ab = new ArrayBuffer(16); - -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { - int_views.push(BigInt64Array); - int_views.push(BigUint64Array); + views.push(BigInt64Array); + views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - var view = new View(ab); - - assert.throws(TypeError, (() => Atomics.add(view, 0, 0))); -}, int_views); +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.add(new TA(ab), 0, 0))); +}, views); diff --git a/test/built-ins/Atomics/add/shared-nonint-views.js b/test/built-ins/Atomics/add/shared-nonint-views.js index ca2ad7bfa2..b8eb2ce0bf 100644 --- a/test/built-ins/Atomics/add/shared-nonint-views.js +++ b/test/built-ins/Atomics/add/shared-nonint-views.js @@ -6,15 +6,11 @@ esid: sec-atomics.add description: > Test Atomics.add on shared non-integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(1024); +var buffer = new SharedArrayBuffer(1024); -var other_views = [Uint8ClampedArray, Float32Array, Float64Array]; - -testWithTypedArrayConstructors(function(View) { - var view = new View(sab); - - assert.throws(TypeError, (() => Atomics.add(view, 0, 0))); -}, other_views); +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.add(new TA(buffer), 0, 0))); +}, floatArrayConstructors); diff --git a/test/built-ins/Atomics/and/bad-range.js b/test/built-ins/Atomics/and/bad-range.js index 1451092a2d..19fc35235b 100644 --- a/test/built-ins/Atomics/and/bad-range.js +++ b/test/built-ins/Atomics/and/bad-range.js @@ -6,21 +6,20 @@ esid: sec-atomics.and description: > Test range checking of Atomics.and on arrays that allow atomic operations includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, BigInt, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(8); -var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var buffer = new SharedArrayBuffer(8); +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { views.push(BigInt64Array); views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - let view = new View(sab); +testWithTypedArrayConstructors(function(TA) { + let view = new TA(buffer); testWithAtomicsOutOfBoundsIndices(function(IdxGen) { - let Idx = IdxGen(view); - assert.throws(RangeError, () => Atomics.and(view, Idx, 10)); + assert.throws(RangeError, () => Atomics.and(view, IdxGen(view), 10)); }); }, views); diff --git a/test/built-ins/Atomics/and/good-views.js b/test/built-ins/Atomics/and/good-views.js index e8435ff2e7..e69420d530 100644 --- a/test/built-ins/Atomics/and/good-views.js +++ b/test/built-ins/Atomics/and/good-views.js @@ -5,19 +5,18 @@ esid: sec-atomics.and description: Test Atomics.and on arrays that allow atomic operations includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ var sab = new SharedArrayBuffer(1024); var ab = new ArrayBuffer(16); +var views = intArrayConstructors.slice(); -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; - -testWithTypedArrayConstructors(function(View) { +testWithTypedArrayConstructors(function(TA) { // Make it interesting - use non-zero byteOffsets and non-zero indexes. - var view = new View(sab, 32, 20); - var control = new View(ab, 0, 2); + var view = new TA(sab, 32, 20); + var control = new TA(ab, 0, 2); view[8] = 0x33333333; control[0] = 0x33333333; @@ -59,4 +58,4 @@ testWithTypedArrayConstructors(function(View) { Atomics.store(view, Idx, 37); assert.sameValue(Atomics.and(view, Idx, 0), 37); }); -}, int_views); +}, views); diff --git a/test/built-ins/Atomics/and/non-views.js b/test/built-ins/Atomics/and/non-views.js index bdcfbac744..5d77bb208f 100644 --- a/test/built-ins/Atomics/and/non-views.js +++ b/test/built-ins/Atomics/and/non-views.js @@ -6,7 +6,7 @@ esid: sec-atomics.and description: > Test Atomics.and on view values other than TypedArrays includes: [testAtomics.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer] ---*/ testWithAtomicsNonViewValues(function(view) { diff --git a/test/built-ins/Atomics/and/nonshared-int-views.js b/test/built-ins/Atomics/and/nonshared-int-views.js index 4a5a90efa2..0ac99ee718 100644 --- a/test/built-ins/Atomics/and/nonshared-int-views.js +++ b/test/built-ins/Atomics/and/nonshared-int-views.js @@ -6,20 +6,17 @@ esid: sec-atomics.and description: > Test Atomics.and on non-shared integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [ArrayBuffer, Atomics, BigInt, TypedArray] ---*/ -var ab = new ArrayBuffer(16); - -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var buffer = new ArrayBuffer(16); +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { - int_views.push(BigInt64Array); - int_views.push(BigUint64Array); + views.push(BigInt64Array); + views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - var view = new View(ab); - - assert.throws(TypeError, (() => Atomics.and(view, 0, 0))); -}, int_views); +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.and(new TA(buffer), 0, 0))); +}, views); diff --git a/test/built-ins/Atomics/and/shared-nonint-views.js b/test/built-ins/Atomics/and/shared-nonint-views.js index 9c34faf821..42b669359e 100644 --- a/test/built-ins/Atomics/and/shared-nonint-views.js +++ b/test/built-ins/Atomics/and/shared-nonint-views.js @@ -6,15 +6,11 @@ esid: sec-atomics.and description: > Test Atomics.and on shared non-integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(1024); +var buffer = new SharedArrayBuffer(1024); -var other_views = [Uint8ClampedArray, Float32Array, Float64Array]; - -testWithTypedArrayConstructors(function(View) { - var view = new View(sab); - - assert.throws(TypeError, (() => Atomics.and(view, 0, 0))); -}, other_views); +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.and(new TA(buffer), 0, 0))); +}, floatArrayConstructors); diff --git a/test/built-ins/Atomics/compareExchange/bad-range.js b/test/built-ins/Atomics/compareExchange/bad-range.js index b7964e3610..ea8ab1b31c 100644 --- a/test/built-ins/Atomics/compareExchange/bad-range.js +++ b/test/built-ins/Atomics/compareExchange/bad-range.js @@ -6,21 +6,20 @@ esid: sec-atomics.compareexchange description: > Test range checking of Atomics.compareExchange on arrays that allow atomic operations includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, BigInt, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(8); -var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var buffer = new SharedArrayBuffer(8); +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { views.push(BigInt64Array); views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - let view = new View(sab); +testWithTypedArrayConstructors(function(TA) { + let view = new TA(buffer); testWithAtomicsOutOfBoundsIndices(function(IdxGen) { - let Idx = IdxGen(view); - assert.throws(RangeError, () => Atomics.compareExchange(view, Idx, 10, 0)); + assert.throws(RangeError, () => Atomics.compareExchange(view, IdxGen(view), 10, 0)); }); }, views); diff --git a/test/built-ins/Atomics/compareExchange/good-views.js b/test/built-ins/Atomics/compareExchange/good-views.js index f21d7a12da..9d39d9a4ae 100644 --- a/test/built-ins/Atomics/compareExchange/good-views.js +++ b/test/built-ins/Atomics/compareExchange/good-views.js @@ -5,26 +5,18 @@ esid: sec-atomics.compareexchange description: Test Atomics.compareExchange on arrays that allow atomic operations. includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ var sab = new SharedArrayBuffer(1024); var ab = new ArrayBuffer(16); +var views = intArrayConstructors.slice(); -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; - -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 - ]; - -testWithTypedArrayConstructors(function(View) { +testWithTypedArrayConstructors(function(TA) { // Make it interesting - use non-zero byteOffsets and non-zero indexes. - var view = new View(sab, 32, 20); - var control = new View(ab, 0, 2); + var view = new TA(sab, 32, 20); + var control = new TA(ab, 0, 2); // Performs the exchange view[8] = 0; @@ -71,4 +63,4 @@ testWithTypedArrayConstructors(function(View) { Atomics.store(view, Idx, 37); assert.sameValue(Atomics.compareExchange(view, Idx, 37, 0), 37); }); -}, int_views); +}, views); diff --git a/test/built-ins/Atomics/compareExchange/non-views.js b/test/built-ins/Atomics/compareExchange/non-views.js index fc51c91eca..e297384cf7 100644 --- a/test/built-ins/Atomics/compareExchange/non-views.js +++ b/test/built-ins/Atomics/compareExchange/non-views.js @@ -6,7 +6,7 @@ esid: sec-atomics.compareexchange description: > Test Atomics.compareExchange on view values other than TypedArrays includes: [testAtomics.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer] ---*/ testWithAtomicsNonViewValues(function(view) { diff --git a/test/built-ins/Atomics/compareExchange/nonshared-int-views.js b/test/built-ins/Atomics/compareExchange/nonshared-int-views.js index aaaa95d4ea..2f196f896e 100644 --- a/test/built-ins/Atomics/compareExchange/nonshared-int-views.js +++ b/test/built-ins/Atomics/compareExchange/nonshared-int-views.js @@ -6,20 +6,17 @@ esid: sec-atomics.compareexchange description: > Test Atomics.compareExchange on non-shared integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [ArrayBuffer, Atomics, BigInt, TypedArray] ---*/ -var ab = new ArrayBuffer(16); - -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var buffer = new ArrayBuffer(16); +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { - int_views.push(BigInt64Array); - int_views.push(BigUint64Array); + views.push(BigInt64Array); + views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - var view = new View(ab); - - assert.throws(TypeError, (() => Atomics.compareExchange(view, 0, 0, 0))); -}, int_views); +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.compareExchange(new TA(buffer), 0, 0, 0))); +}, views); diff --git a/test/built-ins/Atomics/compareExchange/shared-nonint-views.js b/test/built-ins/Atomics/compareExchange/shared-nonint-views.js index 06d66b0aeb..58815cb1e5 100644 --- a/test/built-ins/Atomics/compareExchange/shared-nonint-views.js +++ b/test/built-ins/Atomics/compareExchange/shared-nonint-views.js @@ -6,15 +6,11 @@ esid: sec-atomics.compareexchange description: > Test Atomics.compareExchange on shared non-integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(1024); +var buffer = new SharedArrayBuffer(1024); -var other_views = [Uint8ClampedArray, Float32Array, Float64Array]; - -testWithTypedArrayConstructors(function(View) { - var view = new View(sab); - - assert.throws(TypeError, (() => Atomics.compareExchange(view, 0, 0, 0))); -}, other_views); +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.compareExchange(new TA(buffer), 0, 0, 0))); +}, floatArrayConstructors); diff --git a/test/built-ins/Atomics/exchange/bad-range.js b/test/built-ins/Atomics/exchange/bad-range.js index 15957b2002..ddc763ecd2 100644 --- a/test/built-ins/Atomics/exchange/bad-range.js +++ b/test/built-ins/Atomics/exchange/bad-range.js @@ -6,21 +6,20 @@ esid: sec-atomics.exchange description: > Test range checking of Atomics.exchange on arrays that allow atomic operations includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, BigInt, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(8); -var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var buffer = new SharedArrayBuffer(8); +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { views.push(BigInt64Array); views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - let view = new View(sab); +testWithTypedArrayConstructors(function(TA) { + let view = new TA(buffer); testWithAtomicsOutOfBoundsIndices(function(IdxGen) { - let Idx = IdxGen(view); - assert.throws(RangeError, () => Atomics.exchange(view, Idx, 10, 0)); + assert.throws(RangeError, () => Atomics.exchange(view, IdxGen(view), 10, 0)); }); }, views); diff --git a/test/built-ins/Atomics/exchange/good-views.js b/test/built-ins/Atomics/exchange/good-views.js index d8fd39ee9f..a7b5c76330 100644 --- a/test/built-ins/Atomics/exchange/good-views.js +++ b/test/built-ins/Atomics/exchange/good-views.js @@ -5,19 +5,18 @@ esid: sec-atomics.exchange description: Test Atomics.exchange on arrays that allow atomic operations. includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ var sab = new SharedArrayBuffer(1024); var ab = new ArrayBuffer(16); +var views = intArrayConstructors.slice(); -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; - -testWithTypedArrayConstructors(function(View) { +testWithTypedArrayConstructors(function(TA) { // Make it interesting - use non-zero byteOffsets and non-zero indexes. - var view = new View(sab, 32, 20); - var control = new View(ab, 0, 2); + var view = new TA(sab, 32, 20); + var control = new TA(ab, 0, 2); view[8] = 0; assert.sameValue(Atomics.exchange(view, 8, 10), 0, @@ -53,4 +52,4 @@ testWithTypedArrayConstructors(function(View) { Atomics.store(view, Idx, 37); assert.sameValue(Atomics.exchange(view, Idx, 0), 37); }); -}, int_views); +}, views); diff --git a/test/built-ins/Atomics/exchange/non-views.js b/test/built-ins/Atomics/exchange/non-views.js index c4d28a2fa1..1b9348ca69 100644 --- a/test/built-ins/Atomics/exchange/non-views.js +++ b/test/built-ins/Atomics/exchange/non-views.js @@ -6,7 +6,7 @@ esid: sec-atomics.exchange description: > Test Atomics.exchange on view values other than TypedArrays includes: [testAtomics.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer] ---*/ testWithAtomicsNonViewValues(function(view) { diff --git a/test/built-ins/Atomics/exchange/nonshared-int-views.js b/test/built-ins/Atomics/exchange/nonshared-int-views.js index c6684d4635..47a736fc9a 100644 --- a/test/built-ins/Atomics/exchange/nonshared-int-views.js +++ b/test/built-ins/Atomics/exchange/nonshared-int-views.js @@ -6,20 +6,17 @@ esid: sec-atomics.exchange description: > Test Atomics.exchange on non-shared integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [ArrayBuffer, Atomics, BigInt, TypedArray] ---*/ -var ab = new ArrayBuffer(16); - -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var buffer = new ArrayBuffer(16); +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { - int_views.push(BigInt64Array); - int_views.push(BigUint64Array); + views.push(BigInt64Array); + views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - var view = new View(ab); - - assert.throws(TypeError, (() => Atomics.exchange(view, 0, 0))); -}, int_views); +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.exchange(new TA(buffer), 0, 0))); +}, views); diff --git a/test/built-ins/Atomics/exchange/shared-nonint-views.js b/test/built-ins/Atomics/exchange/shared-nonint-views.js index f0c041df1c..16a10234a4 100644 --- a/test/built-ins/Atomics/exchange/shared-nonint-views.js +++ b/test/built-ins/Atomics/exchange/shared-nonint-views.js @@ -6,15 +6,11 @@ esid: sec-atomics.exchange description: > Test Atomics.exchange on shared non-integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(1024); +var buffer = new SharedArrayBuffer(1024); -var other_views = [Uint8ClampedArray, Float32Array, Float64Array]; - -testWithTypedArrayConstructors(function(View) { - var view = new View(sab); - - assert.throws(TypeError, (() => Atomics.exchange(view, 0, 0))); -}, other_views); +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.exchange(new TA(buffer), 0, 0))); +}, floatArrayConstructors); diff --git a/test/built-ins/Atomics/isLockFree/corner-cases.js b/test/built-ins/Atomics/isLockFree/corner-cases.js index 1c5e686f4e..9901e553a9 100644 --- a/test/built-ins/Atomics/isLockFree/corner-cases.js +++ b/test/built-ins/Atomics/isLockFree/corner-cases.js @@ -8,10 +8,10 @@ description: > features: [Atomics] ---*/ -assert.sameValue(false, Atomics.isLockFree(hide(3, Number.NaN))); -assert.sameValue(false, Atomics.isLockFree(hide(3, -1))); -assert.sameValue(false, Atomics.isLockFree(hide(3, 3.14))); -assert.sameValue(false, Atomics.isLockFree(hide(3, 0))); +assert.sameValue(Atomics.isLockFree(hide(3, Number.NaN)), false); +assert.sameValue(Atomics.isLockFree(hide(3, -1)), false); +assert.sameValue(Atomics.isLockFree(hide(3, 3.14)), false); +assert.sameValue(Atomics.isLockFree(hide(3, 0)), false); assert.sameValue(Atomics.isLockFree('1'), Atomics.isLockFree(1)); assert.sameValue(Atomics.isLockFree('3'), Atomics.isLockFree(3)); @@ -24,7 +24,8 @@ assert.sameValue(Atomics.isLockFree(1), Atomics.isLockFree({toString: () => '1'} assert.sameValue(Atomics.isLockFree(3), Atomics.isLockFree({toString: () => '3'})); function hide(k, x) { - if (k) + if (k) { return hide(k - 3, x) + x; + } return 0; } diff --git a/test/built-ins/Atomics/isLockFree/value.js b/test/built-ins/Atomics/isLockFree/value.js index cfeafe0bbb..737043dad3 100644 --- a/test/built-ins/Atomics/isLockFree/value.js +++ b/test/built-ins/Atomics/isLockFree/value.js @@ -13,36 +13,33 @@ var sizes = [ 1, 2, 3, 4, 5, 6, 7, 8, var answers = [ {}, {}, false, true, false, false, false, false, false, false, false, false]; -function testIsLockFree() { - var saved = {}; - - // This should defeat most optimizations. - - for (var i = 0; i < sizes.length; i++) { - var v = Atomics.isLockFree(sizes[i]); - var a = answers[i]; - assert.sameValue(typeof v, 'boolean'); - if (typeof a == 'boolean') - assert.sameValue(v, a); - else - saved[sizes[i]] = v; +var saved = {}; + +// This should defeat most optimizations. + +for (var i = 0; i < sizes.length; i++) { + var v = Atomics.isLockFree(sizes[i]); + var a = answers[i]; + assert.sameValue(typeof v, 'boolean'); + if (typeof a == 'boolean') { + assert.sameValue(v, a); + } else { + saved[sizes[i]] = v; } - - // This ought to be optimizable. Make sure the answers are the same - // as for the unoptimized case. - - assert.sameValue(Atomics.isLockFree(1), saved[1]); - assert.sameValue(Atomics.isLockFree(2), saved[2]); - assert.sameValue(Atomics.isLockFree(3), false); - assert.sameValue(Atomics.isLockFree(4), true); - assert.sameValue(Atomics.isLockFree(5), false); - assert.sameValue(Atomics.isLockFree(6), false); - assert.sameValue(Atomics.isLockFree(7), false); - assert.sameValue(Atomics.isLockFree(8), false); - assert.sameValue(Atomics.isLockFree(9), false); - assert.sameValue(Atomics.isLockFree(10), false); - assert.sameValue(Atomics.isLockFree(11), false); - assert.sameValue(Atomics.isLockFree(12), false); } -testIsLockFree(); +// This ought to be optimizable. Make sure the answers are the same +// as for the unoptimized case. + +assert.sameValue(Atomics.isLockFree(1), saved[1]); +assert.sameValue(Atomics.isLockFree(2), saved[2]); +assert.sameValue(Atomics.isLockFree(3), false); +assert.sameValue(Atomics.isLockFree(4), true); +assert.sameValue(Atomics.isLockFree(5), false); +assert.sameValue(Atomics.isLockFree(6), false); +assert.sameValue(Atomics.isLockFree(7), false); +assert.sameValue(Atomics.isLockFree(8), false); +assert.sameValue(Atomics.isLockFree(9), false); +assert.sameValue(Atomics.isLockFree(10), false); +assert.sameValue(Atomics.isLockFree(11), false); +assert.sameValue(Atomics.isLockFree(12), false); diff --git a/test/built-ins/Atomics/load/bad-range.js b/test/built-ins/Atomics/load/bad-range.js index 7f1c7afc73..c2a2cdcc21 100644 --- a/test/built-ins/Atomics/load/bad-range.js +++ b/test/built-ins/Atomics/load/bad-range.js @@ -6,21 +6,20 @@ esid: sec-atomics.load description: > Test range checking of Atomics.load on arrays that allow atomic operations includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, BigInt, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(8); -var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var buffer = new SharedArrayBuffer(8); +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { views.push(BigInt64Array); views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - let view = new View(sab); +testWithTypedArrayConstructors(function(TA) { + let view = new TA(buffer); testWithAtomicsOutOfBoundsIndices(function(IdxGen) { - let Idx = IdxGen(view); - assert.throws(RangeError, () => Atomics.load(view, Idx)); + assert.throws(RangeError, () => Atomics.load(view, IdxGen(view))); }); }, views); diff --git a/test/built-ins/Atomics/load/good-views.js b/test/built-ins/Atomics/load/good-views.js index a4e2ad8806..b36b892513 100644 --- a/test/built-ins/Atomics/load/good-views.js +++ b/test/built-ins/Atomics/load/good-views.js @@ -5,19 +5,19 @@ esid: sec-atomics.load description: Test Atomics.load on arrays that allow atomic operations. includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ var sab = new SharedArrayBuffer(1024); var ab = new ArrayBuffer(16); -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var views = intArrayConstructors.slice(); -testWithTypedArrayConstructors(function(View) { +testWithTypedArrayConstructors(function(TA) { // Make it interesting - use non-zero byteOffsets and non-zero indexes. - var view = new View(sab, 32, 20); - var control = new View(ab, 0, 2); + var view = new TA(sab, 32, 20); + var control = new TA(ab, 0, 2); view[3] = -5; control[0] = -5; @@ -43,4 +43,4 @@ testWithTypedArrayConstructors(function(View) { Atomics.store(view, Idx, 37); assert.sameValue(Atomics.load(view, Idx), 37); }); -}, int_views); +}, views); diff --git a/test/built-ins/Atomics/load/non-views.js b/test/built-ins/Atomics/load/non-views.js index 1c4442dbfb..11187136fe 100644 --- a/test/built-ins/Atomics/load/non-views.js +++ b/test/built-ins/Atomics/load/non-views.js @@ -6,7 +6,7 @@ esid: sec-atomics.load description: > Test Atomics.load on view values other than TypedArrays includes: [testAtomics.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer] ---*/ testWithAtomicsNonViewValues(function(view) { diff --git a/test/built-ins/Atomics/load/nonshared-int-views.js b/test/built-ins/Atomics/load/nonshared-int-views.js index 0c8e6bccc6..eb91478495 100644 --- a/test/built-ins/Atomics/load/nonshared-int-views.js +++ b/test/built-ins/Atomics/load/nonshared-int-views.js @@ -6,20 +6,20 @@ esid: sec-atomics.load description: > Test Atomics.load on non-shared integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [ArrayBuffer, Atomics, BigInt, TypedArray] ---*/ var ab = new ArrayBuffer(16); -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { - int_views.push(BigInt64Array); - int_views.push(BigUint64Array); + views.push(BigInt64Array); + views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - var view = new View(ab); +testWithTypedArrayConstructors(function(TA) { + var view = new TA(ab); assert.throws(TypeError, (() => Atomics.load(view, 0))); -}, int_views); +}, views); diff --git a/test/built-ins/Atomics/load/shared-nonint-views.js b/test/built-ins/Atomics/load/shared-nonint-views.js index 170c727f06..f50b274642 100644 --- a/test/built-ins/Atomics/load/shared-nonint-views.js +++ b/test/built-ins/Atomics/load/shared-nonint-views.js @@ -6,15 +6,10 @@ esid: sec-atomics.load description: > Test Atomics.load on shared non-integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(1024); - -var other_views = [Uint8ClampedArray, Float32Array, Float64Array]; - -testWithTypedArrayConstructors(function(View) { - var view = new View(sab); - - assert.throws(TypeError, (() => Atomics.load(view, 0))); -}, other_views); +var buffer = new SharedArrayBuffer(1024); +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.load(new TA(buffer), 0))); +}, floatArrayConstructors); diff --git a/test/built-ins/Atomics/or/bad-range.js b/test/built-ins/Atomics/or/bad-range.js index 5c3ff9b1b5..42ee5a30c3 100644 --- a/test/built-ins/Atomics/or/bad-range.js +++ b/test/built-ins/Atomics/or/bad-range.js @@ -6,21 +6,20 @@ esid: sec-atomics.or description: > Test range checking of Atomics.or on arrays that allow atomic operations includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, BigInt, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(8); -var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var buffer = new SharedArrayBuffer(8); +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { views.push(BigInt64Array); views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - let view = new View(sab); +testWithTypedArrayConstructors(function(TA) { + let view = new TA(buffer); testWithAtomicsOutOfBoundsIndices(function(IdxGen) { - let Idx = IdxGen(view); - assert.throws(RangeError, () => Atomics.or(view, Idx, 10)); + assert.throws(RangeError, () => Atomics.or(view, IdxGen(view), 10)); }); }, views); diff --git a/test/built-ins/Atomics/or/good-views.js b/test/built-ins/Atomics/or/good-views.js index 6fab1d565e..228500d69a 100644 --- a/test/built-ins/Atomics/or/good-views.js +++ b/test/built-ins/Atomics/or/good-views.js @@ -5,18 +5,18 @@ esid: sec-atomics.or description: Test Atomics.or on arrays that allow atomic operations includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ var sab = new SharedArrayBuffer(1024); var ab = new ArrayBuffer(16); -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var views = intArrayConstructors.slice(); -testWithTypedArrayConstructors(function(View) { +testWithTypedArrayConstructors(function(TA) { // Make it interesting - use non-zero byteOffsets and non-zero indexes. - var view = new View(sab, 32, 20); - var control = new View(ab, 0, 2); + var view = new TA(sab, 32, 20); + var control = new TA(ab, 0, 2); view[8] = 0x33333333; control[0] = 0x33333333; @@ -58,4 +58,4 @@ testWithTypedArrayConstructors(function(View) { Atomics.store(view, Idx, 37); assert.sameValue(Atomics.or(view, Idx, 0), 37); }); -}, int_views); +}, views); diff --git a/test/built-ins/Atomics/or/non-views.js b/test/built-ins/Atomics/or/non-views.js index 1135faa8e9..feb25c906e 100644 --- a/test/built-ins/Atomics/or/non-views.js +++ b/test/built-ins/Atomics/or/non-views.js @@ -6,7 +6,7 @@ esid: sec-atomics.or description: > Test Atomics.or on view values other than TypedArrays includes: [testAtomics.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer] ---*/ testWithAtomicsNonViewValues(function(view) { diff --git a/test/built-ins/Atomics/or/nonshared-int-views.js b/test/built-ins/Atomics/or/nonshared-int-views.js index 1a75c23448..b88c793133 100644 --- a/test/built-ins/Atomics/or/nonshared-int-views.js +++ b/test/built-ins/Atomics/or/nonshared-int-views.js @@ -6,20 +6,17 @@ esid: sec-atomics.or description: > Test Atomics.or on non-shared integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [ArrayBuffer, Atomics, BigInt, TypedArray] ---*/ -var ab = new ArrayBuffer(16); - -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var buffer = new ArrayBuffer(16); +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { - int_views.push(BigInt64Array); - int_views.push(BigUint64Array); + views.push(BigInt64Array); + views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - var view = new View(ab); - - assert.throws(TypeError, (() => Atomics.or(view, 0, 0))); -}, int_views); +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.or(new TA(buffer), 0, 0))); +}, views); diff --git a/test/built-ins/Atomics/or/shared-nonint-views.js b/test/built-ins/Atomics/or/shared-nonint-views.js index 0116afea53..5217318e8d 100644 --- a/test/built-ins/Atomics/or/shared-nonint-views.js +++ b/test/built-ins/Atomics/or/shared-nonint-views.js @@ -6,15 +6,13 @@ esid: sec-atomics.or description: > Test Atomics.or on shared non-integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(1024); +var buffer = new SharedArrayBuffer(1024); -var other_views = [Uint8ClampedArray, Float32Array, Float64Array]; +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.or(new TA(buffer), 0, 0))); +}, floatArrayConstructors); -testWithTypedArrayConstructors(function(View) { - var view = new View(sab); - assert.throws(TypeError, (() => Atomics.or(view, 0, 0))); -}, other_views); diff --git a/test/built-ins/Atomics/store/bad-range.js b/test/built-ins/Atomics/store/bad-range.js index a13f1f177a..2b03ecbbad 100644 --- a/test/built-ins/Atomics/store/bad-range.js +++ b/test/built-ins/Atomics/store/bad-range.js @@ -6,21 +6,20 @@ esid: sec-atomics.store description: > Test range checking of Atomics.store on arrays that allow atomic operations includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, BigInt, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(8); -var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var buffer = new SharedArrayBuffer(8); +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { views.push(BigInt64Array); views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - let view = new View(sab); +testWithTypedArrayConstructors(function(TA) { + let view = new TA(buffer); testWithAtomicsOutOfBoundsIndices(function(IdxGen) { - let Idx = IdxGen(view); - assert.throws(RangeError, () => Atomics.store(view, Idx, 10)); + assert.throws(RangeError, () => Atomics.store(view, IdxGen(view), 10)); }); }, views); diff --git a/test/built-ins/Atomics/store/good-views.js b/test/built-ins/Atomics/store/good-views.js index c39de60aa8..4e665a7639 100644 --- a/test/built-ins/Atomics/store/good-views.js +++ b/test/built-ins/Atomics/store/good-views.js @@ -5,19 +5,18 @@ esid: sec-atomics.store description: Test Atomics.store on arrays that allow atomic operations. includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ var sab = new SharedArrayBuffer(1024); var ab = new ArrayBuffer(16); +var views = intArrayConstructors.slice(); -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; - -testWithTypedArrayConstructors(function(View) { +testWithTypedArrayConstructors(function(TA) { // Make it interesting - use non-zero byteOffsets and non-zero indexes. - var view = new View(sab, 32, 20); - var control = new View(ab, 0, 2); + var view = new TA(sab, 32, 20); + var control = new TA(ab, 0, 2); for (let val of [10, -5, 12345, @@ -44,15 +43,18 @@ testWithTypedArrayConstructors(function(View) { Atomics.store(view, Idx, 37); assert.sameValue(Atomics.load(view, Idx), 37); }); -}, int_views); +}, views); function ToInteger(v) { v = +v; - if (isNaN(v)) + if (isNaN(v)) { return 0; - if (v == 0 || !isFinite(v)) + } + if (v == 0 || !isFinite(v)) { return v; - if (v < 0) + } + if (v < 0) { return -Math.floor(Math.abs(v)); + } return Math.floor(v); } diff --git a/test/built-ins/Atomics/store/non-views.js b/test/built-ins/Atomics/store/non-views.js index 365a7fbba7..e34616f993 100644 --- a/test/built-ins/Atomics/store/non-views.js +++ b/test/built-ins/Atomics/store/non-views.js @@ -6,7 +6,7 @@ esid: sec-atomics.store description: > Test Atomics.store on view values other than TypedArrays includes: [testAtomics.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer] ---*/ testWithAtomicsNonViewValues(function(view) { diff --git a/test/built-ins/Atomics/store/nonshared-int-views.js b/test/built-ins/Atomics/store/nonshared-int-views.js index 06029384cc..d6bda379c1 100644 --- a/test/built-ins/Atomics/store/nonshared-int-views.js +++ b/test/built-ins/Atomics/store/nonshared-int-views.js @@ -6,20 +6,17 @@ esid: sec-atomics.store description: > Test Atomics.store on non-shared integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [ArrayBuffer, Atomics, BigInt, TypedArray] ---*/ -var ab = new ArrayBuffer(16); - -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var buffer = new ArrayBuffer(16); +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { - int_views.push(BigInt64Array); - int_views.push(BigUint64Array); + views.push(BigInt64Array); + views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - var view = new View(ab); - - assert.throws(TypeError, (() => Atomics.store(view, 0, 0))); -}, int_views); +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.store(new TA(ab), 0, 0))); +}, views); diff --git a/test/built-ins/Atomics/store/shared-nonint-views.js b/test/built-ins/Atomics/store/shared-nonint-views.js index f2dfb40916..4e363d409a 100644 --- a/test/built-ins/Atomics/store/shared-nonint-views.js +++ b/test/built-ins/Atomics/store/shared-nonint-views.js @@ -6,15 +6,14 @@ esid: sec-atomics.store description: > Test Atomics.store on shared non-integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(1024); +var buffer = new SharedArrayBuffer(1024); + +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.store(new TA(buffer), 0, 0))); +}, floatArrayConstructors); -var other_views = [Uint8ClampedArray, Float32Array, Float64Array]; -testWithTypedArrayConstructors(function(View) { - var view = new View(sab); - assert.throws(TypeError, (() => Atomics.store(view, 0, 0))); -}, other_views); diff --git a/test/built-ins/Atomics/sub/bad-range.js b/test/built-ins/Atomics/sub/bad-range.js index 700309fffc..395bc92061 100644 --- a/test/built-ins/Atomics/sub/bad-range.js +++ b/test/built-ins/Atomics/sub/bad-range.js @@ -6,21 +6,20 @@ esid: sec-atomics.sub description: > Test range checking of Atomics.sub on arrays that allow atomic operations includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, BigInt, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(8); -var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var buffer = new SharedArrayBuffer(8); +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { views.push(BigInt64Array); views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - let view = new View(sab); +testWithTypedArrayConstructors(function(TA) { + let view = new TA(buffer); testWithAtomicsOutOfBoundsIndices(function(IdxGen) { - let Idx = IdxGen(view); - assert.throws(RangeError, () => Atomics.sub(view, Idx, 10)); + assert.throws(RangeError, () => Atomics.sub(view, IdxGen(view), 10)); }); }, views); diff --git a/test/built-ins/Atomics/sub/good-views.js b/test/built-ins/Atomics/sub/good-views.js index 18b6982d73..411e1ad185 100644 --- a/test/built-ins/Atomics/sub/good-views.js +++ b/test/built-ins/Atomics/sub/good-views.js @@ -5,19 +5,18 @@ esid: sec-atomics.sub description: Test Atomics.sub on arrays that allow atomic operations includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ var sab = new SharedArrayBuffer(1024); var ab = new ArrayBuffer(16); +var views = intArrayConstructors.slice(); -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; - -testWithTypedArrayConstructors(function(View) { +testWithTypedArrayConstructors(function(TA) { // Make it interesting - use non-zero byteOffsets and non-zero indexes. - var view = new View(sab, 32, 20); - var control = new View(ab, 0, 2); + var view = new TA(sab, 32, 20); + var control = new TA(ab, 0, 2); view[8] = 100; assert.sameValue(Atomics.sub(view, 8, 10), 100, @@ -52,4 +51,4 @@ testWithTypedArrayConstructors(function(View) { Atomics.store(view, Idx, 37); assert.sameValue(Atomics.sub(view, Idx, 0), 37); }); -}, int_views); +}, views); diff --git a/test/built-ins/Atomics/sub/non-views.js b/test/built-ins/Atomics/sub/non-views.js index 985b95c00b..d4b12d5b2d 100644 --- a/test/built-ins/Atomics/sub/non-views.js +++ b/test/built-ins/Atomics/sub/non-views.js @@ -6,7 +6,7 @@ esid: sec-atomics.sub description: > Test Atomics.sub on view values other than TypedArrays includes: [testAtomics.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer] ---*/ testWithAtomicsNonViewValues(function(view) { diff --git a/test/built-ins/Atomics/sub/nonshared-int-views.js b/test/built-ins/Atomics/sub/nonshared-int-views.js index 90a605b7c7..8644c98e53 100644 --- a/test/built-ins/Atomics/sub/nonshared-int-views.js +++ b/test/built-ins/Atomics/sub/nonshared-int-views.js @@ -6,20 +6,17 @@ esid: sec-atomics.sub description: > Test Atomics.sub on non-shared integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [ArrayBuffer, Atomics, BigInt, TypedArray] ---*/ -var ab = new ArrayBuffer(16); - -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var buffer = new ArrayBuffer(16); +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { - int_views.push(BigInt64Array); - int_views.push(BigUint64Array); + views.push(BigInt64Array); + views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - var view = new View(ab); - - assert.throws(TypeError, (() => Atomics.sub(view, 0, 0))); -}, int_views); +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.sub(new TA(ab), 0, 0))); +}, views); diff --git a/test/built-ins/Atomics/sub/shared-nonint-views.js b/test/built-ins/Atomics/sub/shared-nonint-views.js index 3563f7e37d..89159d5879 100644 --- a/test/built-ins/Atomics/sub/shared-nonint-views.js +++ b/test/built-ins/Atomics/sub/shared-nonint-views.js @@ -6,15 +6,14 @@ esid: sec-atomics.sub description: > Test Atomics.sub on shared non-integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(1024); +var buffer = new SharedArrayBuffer(1024); + +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.sub(new TA(buffer), 0, 0))); +}, floatArrayConstructors); -var other_views = [Uint8ClampedArray, Float32Array, Float64Array]; -testWithTypedArrayConstructors(function(View) { - var view = new View(sab); - assert.throws(TypeError, (() => Atomics.sub(view, 0, 0))); -}, other_views); diff --git a/test/built-ins/Atomics/wait/cannot-suspend-throws.js b/test/built-ins/Atomics/wait/cannot-suspend-throws.js index 56fb3c5125..30fc2d1f06 100644 --- a/test/built-ins/Atomics/wait/cannot-suspend-throws.js +++ b/test/built-ins/Atomics/wait/cannot-suspend-throws.js @@ -14,12 +14,13 @@ info: | 6. Let B be AgentCanSuspend(). 7. If B is false, throw a TypeError exception. ... -features: [Atomics, SharedArrayBuffer, TypedArray, CannotSuspendMainAgent] +features: [Atomics, SharedArrayBuffer, TypedArray] +flags: [CanBlockIsFalse] ---*/ -var sab = new SharedArrayBuffer(4); -var int32Array = new Int32Array(sab); - +var buffer = new SharedArrayBuffer(4); +var int32Array = new Int32Array(buffer); + assert.throws(TypeError, function() { Atomics.wait(int32Array, 0, 0, 0); }); diff --git a/test/built-ins/Atomics/wait/did-timeout.js b/test/built-ins/Atomics/wait/did-timeout.js index 70e644507e..a647bb6486 100644 --- a/test/built-ins/Atomics/wait/did-timeout.js +++ b/test/built-ins/Atomics/wait/did-timeout.js @@ -13,9 +13,17 @@ description: > 19. Else, a.Perform RemoveWaiter(WL, W). includes: [atomicsHelper.js] -features: [Atomics] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ +function getReport() { + var r; + while ((r = $262.agent.getReport()) == null) { + $262.agent.sleep(100); + } + return r; +} + $262.agent.start( ` $262.agent.receiveBroadcast(function (sab, id) { @@ -33,9 +41,3 @@ $262.agent.broadcast(ia.buffer); assert.sameValue(getReport(), "timed-out"); assert.sameValue((getReport() | 0) >= 500 - $ATOMICS_MAX_TIME_EPSILON, true); -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) - $262.agent.sleep(100); - return r; -} diff --git a/test/built-ins/Atomics/wait/false-for-timeout-agent.js b/test/built-ins/Atomics/wait/false-for-timeout-agent.js new file mode 100644 index 0000000000..c88b4900d0 --- /dev/null +++ b/test/built-ins/Atomics/wait/false-for-timeout-agent.js @@ -0,0 +1,68 @@ +// Copyright (C) 2018 Amal Hussein. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-atomics.wait +description: > + False timeout arg should result in an +0 timeout +info: | + Atomics.wait( typedArray, index, value, timeout ) + + 4. Let q be ? ToNumber(timeout). + + Boolean -> If argument is true, return 1. If argument is false, return +0. + +features: [Atomics, SharedArrayBuffer, TypedArray] +includes: [ atomicsHelper.js ] +---*/ + +function getReport() { + var r; + while ((r = $262.agent.getReport()) == null) { + $262.agent.sleep(100); + } + return r; +} + +$262.agent.start( + ` +var valueOf = { + valueOf: function() { + return false; + } +}; + +var toPrimitive = { + [Symbol.toPrimitive]: function() { + return false; + } +}; + +$262.agent.receiveBroadcast(function (sab) { + var int32Array = new Int32Array(sab); + var start = Date.now(); + $262.agent.report(Atomics.wait(int32Array, 0, 0, false)); + $262.agent.report(Atomics.wait(int32Array, 0, 0, valueOf)); + $262.agent.report(Atomics.wait(int32Array, 0, 0, toPrimitive)); + $262.agent.report(Date.now() - start); + $262.agent.leaving(); +}) +`); + +var int32Array = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); + +$262.agent.broadcast(int32Array.buffer); +$262.agent.sleep(150); + +assert.sameValue(getReport(), 'timed-out'); +assert.sameValue(getReport(), 'timed-out'); +assert.sameValue(getReport(), 'timed-out'); + +var timeDiffReport = 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.sameValue(Atomics.wake(int32Array, 0), 0); + diff --git a/test/built-ins/Atomics/wait/false-for-timeout.js b/test/built-ins/Atomics/wait/false-for-timeout.js index cc96fd567c..72f234baab 100644 --- a/test/built-ins/Atomics/wait/false-for-timeout.js +++ b/test/built-ins/Atomics/wait/false-for-timeout.js @@ -1,4 +1,4 @@ -// Copyright (C) 2018 Amal Hussein. All rights reserved. +// Copyright (C) 2018 Amal Hussein. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- @@ -8,45 +8,30 @@ description: > info: | Atomics.wait( typedArray, index, value, timeout ) - 4.Let q be ? ToNumber(timeout). - ... - Null Return +0. - Boolean If argument is true, return 1. If argument is false, return +0. -features: [ Atomics, SharedArrayBuffer, TypedArray ] -includes: [ atomicsHelper.js ] ----*/ - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) - $262.agent.sleep(100); - return r; -} - -$262.agent.start( - ` -$262.agent.receiveBroadcast(function (sab) { - var int32Array = new Int32Array(sab); - var start = Date.now(); - $262.agent.report(Atomics.wait(int32Array, 0, 0, false)); // false => +0 - $262.agent.report(Date.now() - start); - $262.agent.leaving(); -}) -`); + 4. Let q be ? ToNumber(timeout). -var int32Array = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); + Boolean -> If argument is true, return 1. If argument is false, return +0. -$262.agent.broadcast(int32Array.buffer); - -$262.agent.sleep(150); +features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] +flags: [CanBlockIsFalse] +---*/ -var atomicsReport = getReport(); -var timeDiffReport = getReport(); +var buffer = new SharedArrayBuffer(1024); +var int32Array = new Int32Array(buffer); -assert.sameValue(atomicsReport, 'timed-out'); +var valueOf = { + valueOf: function() { + return false; + } +}; -assert(timeDiffReport >= 0, 'timeout should be a min of 0ms'); +var toPrimitive = { + [Symbol.toPrimitive]: function() { + return false; + } +}; -assert(timeDiffReport <= $ATOMICS_MAX_TIME_EPSILON, 'timeout should be a max of $$ATOMICS_MAX_TIME_EPSILON'); +assert.sameValue(Atomics.wait(int32Array, 0, 0, false), "timed-out"); +assert.sameValue(Atomics.wait(int32Array, 0, 0, valueOf), "timed-out"); +assert.sameValue(Atomics.wait(int32Array, 0, 0, toPrimitive), "timed-out"); -assert.sameValue(Atomics.wake(int32Array, 0), 0); diff --git a/test/built-ins/Atomics/wait/good-views.js b/test/built-ins/Atomics/wait/good-views.js index 1745841592..bf9fd6b508 100644 --- a/test/built-ins/Atomics/wait/good-views.js +++ b/test/built-ins/Atomics/wait/good-views.js @@ -42,17 +42,19 @@ for ( let IdxGen of good_indices ) { $262.agent.report("done"); $262.agent.leaving(); -`) +`); assert.sameValue(getReport(), "A timed-out"); assert.sameValue(getReport(), "B not-equal"); // Even with zero timeout var r; -while ((r = getReport()) != "done") +while ((r = getReport()) != "done") { assert.sameValue(r, "C not-equal"); +} function getReport() { var r; - while ((r = $262.agent.getReport()) == null) + while ((r = $262.agent.getReport()) == null) { $262.agent.sleep(100); + } 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 f1356221f6..bfc3bd4825 100644 --- a/test/built-ins/Atomics/wait/nan-for-timeout.js +++ b/test/built-ins/Atomics/wait/nan-for-timeout.js @@ -12,13 +12,15 @@ info: | ... Undefined Return NaN. 5.If q is NaN, let t be +∞, else let t be max(q, 0) -features: [ Atomics, SharedArrayBuffer, TypedArray ] + +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ function getReport() { var r; - while ((r = $262.agent.getReport()) == null) + while ((r = $262.agent.getReport()) == null) { $262.agent.sleep(100); + } return r; } @@ -34,11 +36,7 @@ $262.agent.receiveBroadcast(function (sab) { var int32Array = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); $262.agent.broadcast(int32Array.buffer); - $262.agent.sleep(500); // Ample time -assert.sameValue($262.agent.getReport(), null); - +assert.sameValue(getReport(), null); assert.sameValue(Atomics.wake(int32Array, 0), 1); - -assert.sameValue(getReport(), "ok"); diff --git a/test/built-ins/Atomics/wait/negative-index-throws.js b/test/built-ins/Atomics/wait/negative-index-throws.js index 2d08dc40c1..baba9e0394 100644 --- a/test/built-ins/Atomics/wait/negative-index-throws.js +++ b/test/built-ins/Atomics/wait/negative-index-throws.js @@ -13,7 +13,7 @@ info: | 2.Let accessIndex be ? ToIndex(requestIndex). ... 2.b If integerIndex < 0, throw a RangeError exception -features: [ Atomics , SharedArrayBuffer, TypedArray ] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ var sab = new SharedArrayBuffer(1024); @@ -24,7 +24,15 @@ var poisoned = { } }; -assert.throws(RangeError, () => Atomics.wait(int32Array, -Infinity, poisoned, poisoned)); -assert.throws(RangeError, () => Atomics.wait(int32Array, -7.999, poisoned, poisoned)); -assert.throws(RangeError, () => Atomics.wait(int32Array, -1, poisoned, poisoned)); -assert.throws(RangeError, () => Atomics.wait(int32Array, -300, poisoned, poisoned)); +assert.throws(RangeError, function() { + Atomics.wait(int32Array, -Infinity, poisoned, poisoned); +}); +assert.throws(RangeError, function() { + Atomics.wait(int32Array, -7.999, poisoned, poisoned); +}); +assert.throws(RangeError, function() { + Atomics.wait(int32Array, -1, poisoned, poisoned); +}); +assert.throws(RangeError, function() { + Atomics.wait(int32Array, -300, poisoned, poisoned); +}); diff --git a/test/built-ins/Atomics/wait/negative-timeout-agent.js b/test/built-ins/Atomics/wait/negative-timeout-agent.js new file mode 100644 index 0000000000..a5dd786680 --- /dev/null +++ b/test/built-ins/Atomics/wait/negative-timeout-agent.js @@ -0,0 +1,33 @@ +// 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 times out with a negative timeout +features: [Atomics, SharedArrayBuffer, TypedArray] +---*/ + +function getReport() { + var r; + while ((r = $262.agent.getReport()) == null) { + $262.agent.sleep(100); + } + 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(); +}) +`); + +var buffer = new SharedArrayBuffer(1024); +var int32Array = new Int32Array(buffer); + +$262.agent.broadcast(int32Array.buffer); +assert.sameValue(getReport(), "timed-out"); +assert.sameValue(Atomics.wake(int32Array, 0), 0); diff --git a/test/built-ins/Atomics/wait/negative-timeout.js b/test/built-ins/Atomics/wait/negative-timeout.js index 84ce5ce190..46961c5be2 100644 --- a/test/built-ins/Atomics/wait/negative-timeout.js +++ b/test/built-ins/Atomics/wait/negative-timeout.js @@ -5,26 +5,11 @@ esid: sec-atomics.wait description: > Test that Atomics.wait times out with a negative timeout -features: [Atomics] +features: [Atomics, SharedArrayBuffer, TypedArray] +flags: [CanBlockIsFalse] ---*/ -$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(); -}) -`); +var buffer = new SharedArrayBuffer(1024); +var int32Array = new Int32Array(buffer); -var ia = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); - -$262.agent.broadcast(ia.buffer); -assert.sameValue(getReport(), "timed-out"); - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) - $262.agent.sleep(100); - return r; -} +assert.sameValue(Atomics.wait(int32Array, 0, 0, -1), "timed-out"); diff --git a/test/built-ins/Atomics/wait/no-spurious-wakeup.js b/test/built-ins/Atomics/wait/no-spurious-wakeup.js index 1da152c7a0..a504fd5bde 100644 --- a/test/built-ins/Atomics/wait/no-spurious-wakeup.js +++ b/test/built-ins/Atomics/wait/no-spurious-wakeup.js @@ -7,7 +7,7 @@ description: > Test that Atomics.wait actually waits and does not spuriously wake up when the memory value is changed. includes: [atomicsHelper.js] -features: [Atomics] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ $262.agent.start( @@ -33,7 +33,8 @@ assert.sameValue((getReport() | 0) >= 1000 - $ATOMICS_MAX_TIME_EPSILON, true); function getReport() { var r; - while ((r = $262.agent.getReport()) == null) + while ((r = $262.agent.getReport()) == null) { $262.agent.sleep(100); + } return r; } 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 dc5932fb1d..ea2ce1f1bf 100644 --- a/test/built-ins/Atomics/wait/non-int32-typedarray-throws.js +++ b/test/built-ins/Atomics/wait/non-int32-typedarray-throws.js @@ -12,7 +12,7 @@ info: | ... 5.If onlyInt32 is true, then If typeName is not "Int32Array", throw a TypeError exception. -features: [ Atomics, TypedArray ] +features: [Atomics, Float32Array, Float64Array, Int8Array, TypedArray, Uint16Array, Uint8Array, Uint8ClampedArray] ---*/ var poisoned = { 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 a3bcfceb79..d14ae2cf7b 100644 --- a/test/built-ins/Atomics/wait/non-shared-bufferdata-throws.js +++ b/test/built-ins/Atomics/wait/non-shared-bufferdata-throws.js @@ -12,7 +12,7 @@ info: | 9.If IsSharedArrayBuffer(buffer) is false, throw a TypeError exception. ... 4.If bufferData is a Data Block, return false. -features: [ Atomics, ArrayBuffer, TypedArray ] +features: [ArrayBuffer, Atomics, TypedArray] ---*/ var int32Array = new Int32Array(new ArrayBuffer(4)); @@ -23,9 +23,9 @@ var poisoned = { }; assert.throws(TypeError, function() { - Atomics.wait(int32Array, 0, 0, 0) + Atomics.wait(int32Array, 0, 0, 0); }); assert.throws(TypeError, function() { - Atomics.wait(int32Array, poisoned, poisoned, poisoned) + Atomics.wait(int32Array, poisoned, poisoned, poisoned); }); 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 7c1fbae1bc..0fc66993aa 100644 --- a/test/built-ins/Atomics/wait/not-a-typedarray-throws.js +++ b/test/built-ins/Atomics/wait/not-a-typedarray-throws.js @@ -11,7 +11,7 @@ info: | ... 3.If typedArray does not have a [[TypedArrayName]] internal slot, throw a TypeError exception. -features: [ Atomics ] +features: [Atomics] ---*/ var poisoned = { @@ -20,5 +20,10 @@ var poisoned = { } }; -assert.throws(TypeError, () => Atomics.wait({}, 0, 0, 0)); -assert.throws(TypeError, () => Atomics.wait({}, poisoned, poisoned, poisoned)); +assert.throws(TypeError, function() { + Atomics.wait({}, 0, 0, 0); +}); + +assert.throws(TypeError, function() { + Atomics.wait({}, poisoned, poisoned, poisoned); +}); 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 39d564586c..e60165ffed 100644 --- a/test/built-ins/Atomics/wait/not-an-object-throws.js +++ b/test/built-ins/Atomics/wait/not-an-object-throws.js @@ -10,7 +10,7 @@ info: | 1.Let buffer be ? ValidateSharedIntegerTypedArray(typedArray, true). ... 2. if Type(typedArray) is not Object, throw a TypeError exception -features: [ Atomics, Symbol ] +features: [Atomics, Symbol] ---*/ var poisoned = { @@ -19,16 +19,30 @@ var poisoned = { } }; -assert.throws(TypeError, function() { Atomics.wait(null,poisoned,poisoned,poisoned) }, 'null'); +assert.throws(TypeError, function() { + Atomics.wait(null, poisoned, poisoned, poisoned); +}, 'null'); -assert.throws(TypeError, function() { Atomics.wait(undefined,poisoned,poisoned,poisoned) }, 'undefined'); +assert.throws(TypeError, function() { + Atomics.wait(undefined, poisoned, poisoned, poisoned); +}, 'undefined'); -assert.throws(TypeError, function() { Atomics.wait(true,poisoned,poisoned,poisoned) }, 'true'); +assert.throws(TypeError, function() { + Atomics.wait(true, poisoned, poisoned, poisoned); +}, 'true'); -assert.throws(TypeError, function() { Atomics.wait(false,poisoned,poisoned,poisoned) }, 'false'); +assert.throws(TypeError, function() { + Atomics.wait(false, poisoned, poisoned, poisoned); +}, 'false'); -assert.throws(TypeError, function() { Atomics.wait('***string***',poisoned,poisoned,poisoned) }, 'String'); +assert.throws(TypeError, function() { + Atomics.wait('***string***', poisoned, poisoned, poisoned); +}, 'String'); -assert.throws(TypeError, function() { Atomics.wait(Number.NEGATIVE_INFINITY,poisoned,poisoned,poisoned) }, '-Infinity'); +assert.throws(TypeError, function() { + Atomics.wait(Number.NEGATIVE_INFINITY, poisoned, poisoned, poisoned); +}, '-Infinity'); -assert.throws(TypeError, function() { Atomics.wait(Symbol('***symbol***'),poisoned,poisoned,poisoned) }, 'Symbol'); +assert.throws(TypeError, function() { + Atomics.wait(Symbol('***symbol***'), poisoned, poisoned, poisoned); +}, 'Symbol'); diff --git a/test/built-ins/Atomics/wait/null-bufferdata-throws.js b/test/built-ins/Atomics/wait/null-bufferdata-throws.js index 9dc142b0c2..04c613397f 100644 --- a/test/built-ins/Atomics/wait/null-bufferdata-throws.js +++ b/test/built-ins/Atomics/wait/null-bufferdata-throws.js @@ -13,7 +13,7 @@ info: | ... 3.If bufferData is null, return false. includes: [detachArrayBuffer.js] -features: [ Atomics, ArrayBuffer, TypedArray ] +features: [ArrayBuffer, Atomics, TypedArray] ---*/ var int32Array = new Int32Array(new ArrayBuffer(1024)); @@ -25,4 +25,6 @@ var poisoned = { $DETACHBUFFER(int32Array.buffer); // Detaching a non-shared ArrayBuffer sets the [[ArrayBufferData]] value to null -assert.throws(TypeError, () => Atomics.wait(int32Array, poisoned, poisoned, poisoned)); +assert.throws(TypeError, function() { + Atomics.wait(int32Array, 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 new file mode 100644 index 0000000000..fd106e807e --- /dev/null +++ b/test/built-ins/Atomics/wait/null-for-timeout-agent.js @@ -0,0 +1,68 @@ +// Copyright (C) 2018 Amal Hussein. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-atomics.wait +description: > + False timeout arg should result in an +0 timeout +info: | + Atomics.wait( typedArray, index, value, timeout ) + + 4. Let q be ? ToNumber(timeout). + + Null -> Return +0. + +features: [Atomics, SharedArrayBuffer, TypedArray] +includes: [ atomicsHelper.js ] +---*/ + +function getReport() { + var r; + while ((r = $262.agent.getReport()) == null) { + $262.agent.sleep(100); + } + return r; +} + +$262.agent.start( + ` +var valueOf = { + valueOf: function() { + return null; + } +}; + +var toPrimitive = { + [Symbol.toPrimitive]: function() { + return null; + } +}; + +$262.agent.receiveBroadcast(function (sab) { + var int32Array = new Int32Array(sab); + var start = Date.now(); + $262.agent.report(Atomics.wait(int32Array, 0, 0, null)); + $262.agent.report(Atomics.wait(int32Array, 0, 0, valueOf)); + $262.agent.report(Atomics.wait(int32Array, 0, 0, toPrimitive)); + $262.agent.report(Date.now() - start); + $262.agent.leaving(); +}) +`); + +var int32Array = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); + +$262.agent.broadcast(int32Array.buffer); +$262.agent.sleep(150); + +assert.sameValue(getReport(), 'timed-out'); +assert.sameValue(getReport(), 'timed-out'); +assert.sameValue(getReport(), 'timed-out'); + +var timeDiffReport = 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.sameValue(Atomics.wake(int32Array, 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 436b34fe3e..70de069ae1 100644 --- a/test/built-ins/Atomics/wait/null-for-timeout.js +++ b/test/built-ins/Atomics/wait/null-for-timeout.js @@ -1,52 +1,37 @@ -// Copyright (C) 2018 Amal Hussein. All rights reserved. +// Copyright (C) 2018 Amal Hussein. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-atomics.wait description: > - Null timeout arg should result in an +0 timeout + Throws a TypeError if index arg can not be converted to an Integer info: | Atomics.wait( typedArray, index, value, timeout ) - 4.Let q be ? ToNumber(timeout). - ... - Null Return +0. - Boolean If argument is true, return 1. If argument is false, return +0. -features: [ Atomics ] -includes: [ atomicsHelper.js ] ----*/ - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) - $262.agent.sleep(100); - return r; -} - -$262.agent.start( - ` -$262.agent.receiveBroadcast(function (sab) { - var int32Array = new Int32Array(sab); - var start = Date.now(); - $262.agent.report(Atomics.wait(int32Array, 0, 0, null)); // null => +0 - $262.agent.report(Date.now() - start); - $262.agent.leaving(); -}) -`); + 4. Let q be ? ToNumber(timeout). -var int32Array = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); + Null -> Return +0. -$262.agent.broadcast(int32Array.buffer); - -$262.agent.sleep(150); +features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] +flags: [CanBlockIsFalse] +---*/ -var atomicsReport = getReport(); -var timeDiffReport = getReport(); +var buffer = new SharedArrayBuffer(1024); +var int32Array = new Int32Array(buffer); -assert.sameValue(atomicsReport, 'timed-out'); +var valueOf = { + valueOf: function() { + return null; + } +}; -assert(timeDiffReport >= 0, 'timeout should be a min of 0ms'); +var toPrimitive = { + [Symbol.toPrimitive]: function() { + return null; + } +}; -assert(timeDiffReport <= $ATOMICS_MAX_TIME_EPSILON, 'timeout should be a max of $$ATOMICS_MAX_TIME_EPSILON'); +assert.sameValue(Atomics.wait(int32Array, 0, 0, null), "timed-out"); +assert.sameValue(Atomics.wait(int32Array, 0, 0, valueOf), "timed-out"); +assert.sameValue(Atomics.wait(int32Array, 0, 0, toPrimitive), "timed-out"); -assert.sameValue(Atomics.wake(int32Array, 0), 0); diff --git a/test/built-ins/Atomics/wait/object-for-timeout-agent.js b/test/built-ins/Atomics/wait/object-for-timeout-agent.js new file mode 100644 index 0000000000..7db064617a --- /dev/null +++ b/test/built-ins/Atomics/wait/object-for-timeout-agent.js @@ -0,0 +1,75 @@ +// Copyright (C) 2018 Amal Hussein. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-atomics.wait +description: > + False timeout arg should result in an +0 timeout +info: | + Atomics.wait( typedArray, index, value, timeout ) + + 4. Let q be ? ToNumber(timeout). + + Null -> Return +0. + +features: [Atomics, SharedArrayBuffer, TypedArray] +includes: [ atomicsHelper.js ] +---*/ + +function getReport() { + var r; + while ((r = $262.agent.getReport()) == null) { + $262.agent.sleep(100); + } + return r; +} + +$262.agent.start( + ` +var valueOf = { + valueOf: function() { + return 0; + } +}; + +var toString = { + toString: function() { + return "0"; + } +}; + +var toPrimitive = { + [Symbol.toPrimitive]: function() { + return 0; + } +}; + + +$262.agent.receiveBroadcast(function (sab) { + var int32Array = new Int32Array(sab); + var start = Date.now(); + $262.agent.report(Atomics.wait(int32Array, 0, 0, valueOf)); + $262.agent.report(Atomics.wait(int32Array, 0, 0, toString)); + $262.agent.report(Atomics.wait(int32Array, 0, 0, toPrimitive)); + $262.agent.report(Date.now() - start); + $262.agent.leaving(); +}) +`); + +var int32Array = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); + +$262.agent.broadcast(int32Array.buffer); +$262.agent.sleep(150); + +assert.sameValue(getReport(), 'timed-out'); +assert.sameValue(getReport(), 'timed-out'); +assert.sameValue(getReport(), 'timed-out'); + +var timeDiffReport = 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.sameValue(Atomics.wake(int32Array, 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 ab2c809178..3fc07cc11b 100644 --- a/test/built-ins/Atomics/wait/object-for-timeout.js +++ b/test/built-ins/Atomics/wait/object-for-timeout.js @@ -1,47 +1,45 @@ -// Copyright (C) 2018 Amal Hussein. All rights reserved. +// Copyright (C) 2018 Amal Hussein. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-atomics.wait description: > - False timeout arg should result in a timeout value of 1 + Throws a TypeError if index arg can not be converted to an Integer info: | Atomics.wait( typedArray, index, value, timeout ) - 4.Let q be ? ToNumber(timeout). - ... - Object - Apply the following steps: + 4. Let q be ? ToNumber(timeout). + + Object -> Apply the following steps: Let primValue be ? ToPrimitive(argument, hint Number). Return ? ToNumber(primValue). -features: [ Atomics ] -includes: [atomicsHelper.js] ----*/ - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) - $262.agent.sleep(100); - return r; -} - - -$262.agent.start( - ` -$262.agent.receiveBroadcast(function (sab) { - var int32Array = new Int32Array(sab); - $262.agent.report("A " + Atomics.wait(int32Array, 0, 0, {})); // {} => NaN => Infinity - $262.agent.leaving(); -}) -`); -var int32Array = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); - -$262.agent.broadcast(int32Array.buffer); - -$262.agent.sleep(500); // Ample time - -assert.sameValue(Atomics.wake(int32Array, 0), 1); +features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] +flags: [CanBlockIsFalse] +---*/ -assert.sameValue(getReport(), "A ok"); +var buffer = new SharedArrayBuffer(1024); +var int32Array = new Int32Array(buffer); + +var valueOf = { + valueOf: function() { + return 0; + } +}; + +var toString = { + toString: function() { + return "0"; + } +}; + +var toPrimitive = { + [Symbol.toPrimitive]: function() { + return 0; + } +}; + +assert.sameValue(Atomics.wait(int32Array, 0, 0, valueOf), "timed-out"); +assert.sameValue(Atomics.wait(int32Array, 0, 0, toString), "timed-out"); +assert.sameValue(Atomics.wait(int32Array, 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 d14262605f..d9925b8006 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 @@ -13,16 +13,23 @@ info: | 2.Let accessIndex be ? ToIndex(requestIndex). ... 5. If accessIndex ≥ length, throw a RangeError exception. -features: [ Atomics, SharedArrayBuffer, TypedArray ] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ var int32Array = new Int32Array(new SharedArrayBuffer(4)); + var poisoned = { valueOf: function() { throw new Test262Error("should not evaluate this code"); } }; -assert.throws(RangeError, () => Atomics.wait(int32Array, Infinity, poisoned, poisoned)); -assert.throws(RangeError, () => Atomics.wait(int32Array, 2, poisoned, poisoned)); -assert.throws(RangeError, () => Atomics.wait(int32Array, 200, poisoned, poisoned)); +assert.throws(RangeError, function() { + Atomics.wait(int32Array, Infinity, poisoned, poisoned); +}); +assert.throws(RangeError, function() { + Atomics.wait(int32Array, 2, poisoned, poisoned); +}); +assert.throws(RangeError, function() { + Atomics.wait(int32Array, 200, poisoned, poisoned); +}); 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 new file mode 100644 index 0000000000..4708214512 --- /dev/null +++ b/test/built-ins/Atomics/wait/poisoned-object-for-timeout-throws-agent.js @@ -0,0 +1,74 @@ +// Copyright (C) 2018 Amal Hussein. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-atomics.wait +description: > + False timeout arg should result in an +0 timeout +info: | + Atomics.wait( typedArray, index, value, timeout ) + + 4. Let q be ? ToNumber(timeout). + + Null -> Return +0. + +features: [Atomics, SharedArrayBuffer, TypedArray] +includes: [ atomicsHelper.js ] +---*/ + +function getReport() { + var r; + while ((r = $262.agent.getReport()) == null) { + $262.agent.sleep(100); + } + return r; +} + +$262.agent.start( + ` +var poisonedValueOf = { + valueOf: function() { + throw new Error("should not evaluate this code"); + } +}; + +var poisonedToPrimitive = { + [Symbol.toPrimitive]: function() { + throw new Error("passing a poisoned object using @@ToPrimitive"); + } +}; + +$262.agent.receiveBroadcast(function (sab) { + var int32Array = new Int32Array(sab); + var start = Date.now(); + try { + Atomics.wait(int32Array, 0, 0, poisonedValueOf); + } catch (error) { + $262.agent.report("poisonedValueOf"); + } + try { + Atomics.wait(int32Array, 0, 0, poisonedToPrimitive); + } catch (error) { + $262.agent.report("poisonedToPrimitive"); + } + $262.agent.report(Date.now() - start); + $262.agent.leaving(); +}); +`); + +var int32Array = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); + +$262.agent.broadcast(int32Array.buffer); +$262.agent.sleep(150); + +assert.sameValue(getReport(), "poisonedValueOf"); +assert.sameValue(getReport(), "poisonedToPrimitive"); + +var timeDiffReport = 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.sameValue(Atomics.wake(int32Array, 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 0ca369b12a..f157f07b11 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 @@ -1,60 +1,42 @@ -// Copyright (C) 2018 Amal Hussein. All rights reserved. +// Copyright (C) 2018 Amal Hussein. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-atomics.wait description: > - Passing an object with no callable methods for the timeout param throws + Throws a TypeError if index arg can not be converted to an Integer info: | Atomics.wait( typedArray, index, value, timeout ) - 4.Let q be ? ToNumber(timeout). - ... - Object - Apply the following steps: + 4. Let q be ? ToNumber(timeout). + + Object -> Apply the following steps: + Let primValue be ? ToPrimitive(argument, hint Number). - ... - g. Return ? OrdinaryToPrimitive(input, hint). - ... - 6.Throw a TypeError exception. -features: [ Atomics ] + Return ? ToNumber(primValue). + +features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(100); - } - return r; -} - -$262.agent.start( - ` -$262.agent.receiveBroadcast(function (sab) { - - var int32Array = new Int32Array(sab); - var poisoned = { - valueOf: false, - toString: false - }; - var err; - - try { - Atomics.wait(int32Array, 0, 0, poisoned); - } catch(e) { - err = e.name; - } - - $262.agent.report(err); - $262.agent.leaving(); -}) -`); +var buffer = new SharedArrayBuffer(1024); +var int32Array = new Int32Array(buffer); -var sab = new SharedArrayBuffer(4); -var int32Array = new Int32Array(sab); +var poisonedValueOf = { + valueOf: function() { + throw new Test262Error("should not evaluate this code"); + } +}; -$262.agent.broadcast(int32Array.buffer); +var poisonedToPrimitive = { + [Symbol.toPrimitive]: function() { + throw new Test262Error("passing a poisoned object using @@ToPrimitive"); + } +}; -assert.sameValue(getReport(), 'TypeError'); +assert.throws(Test262Error, function() { + Atomics.wait(int32Array, 0, 0, poisonedValueOf); +}); -assert.sameValue(Atomics.wake(int32Array, 0), 0); +assert.throws(Test262Error, function() { + Atomics.wait(int32Array, 0, 0, poisonedToPrimitive); +}); 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 new file mode 100644 index 0000000000..0873f64eb9 --- /dev/null +++ b/test/built-ins/Atomics/wait/symbol-for-index-throws-agent.js @@ -0,0 +1,86 @@ +// Copyright (C) 2018 Amal Hussein. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-atomics.wait +description: > + Throws a TypeError if index arg can not be converted to an Integer +info: | + Atomics.wait( typedArray, index, value, timeout ) + + 2. Let i be ? ValidateAtomicAccess(typedArray, index). + + ValidateAtomicAccess( typedArray, requestIndex ) + + 2. Let accessIndex be ? ToIndex(requestIndex). + + ToIndex ( value ) + + 2. Else, + a. Let integerIndex be ? ToInteger(value). + + ToInteger(value) + + 1. Let number be ? ToNumber(argument). + + Symbol --> Throw a TypeError exception. + +features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] +includes: [ atomicsHelper.js ] +---*/ + +function getReport() { + var r; + while ((r = $262.agent.getReport()) == null) { + $262.agent.sleep(100); + } + return r; +} + +$262.agent.start( + ` +var poisonedValueOf = { + valueOf: function() { + throw new Test262Error("should not evaluate this code"); + } +}; + +var poisonedToPrimitive = { + [Symbol.toPrimitive]: function() { + throw new Test262Error("passing a poisoned object using @@ToPrimitive"); + } +}; + +$262.agent.receiveBroadcast(function (sab) { + var int32Array = new Int32Array(sab); + var start = Date.now(); + try { + Atomics.wait(int32Array, Symbol("1"), poisonedValueOf, poisonedValueOf); + } catch (error) { + $262.agent.report('Symbol("1")'); + } + try { + Atomics.wait(int32Array, Symbol("2"), poisonedToPrimitive, poisonedToPrimitive); + } catch (error) { + $262.agent.report('Symbol("2")'); + } + $262.agent.report(Date.now() - start); + $262.agent.leaving(); +}); +`); + +var int32Array = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); + +$262.agent.broadcast(int32Array.buffer); +$262.agent.sleep(150); + +assert.sameValue(getReport(), 'Symbol("1")'); +assert.sameValue(getReport(), 'Symbol("2")'); + +var timeDiffReport = 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.sameValue(Atomics.wake(int32Array, 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 e9b1ae7569..fc8e8d55a1 100644 --- a/test/built-ins/Atomics/wait/symbol-for-index-throws.js +++ b/test/built-ins/Atomics/wait/symbol-for-index-throws.js @@ -8,40 +8,53 @@ description: > info: | Atomics.wait( typedArray, index, value, timeout ) - 3.Let v be ? ToInt32(value). - ... - 1.Let number be ? ToNumber(argument). - Symbol --> Throw a TypeError exception. -features: [ Atomics, SharedArrayBuffer, TypedArray, Symbol, Symbol.toPrimitive] + 2. Let i be ? ValidateAtomicAccess(typedArray, index). + + ValidateAtomicAccess( typedArray, requestIndex ) + + 2. Let accessIndex be ? ToIndex(requestIndex). + + ToIndex ( value ) + + 2. Else, + a. Let integerIndex be ? ToInteger(value). + + ToInteger(value) + + 1. Let number be ? ToNumber(argument). + + Symbol --> Throw a TypeError exception. + +features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] ---*/ -var sab = new SharedArrayBuffer(1024); -var int32Array = new Int32Array(sab); +var buffer = new SharedArrayBuffer(1024); +var int32Array = new Int32Array(buffer); -var poisoned = { +var poisonedValueOf = { valueOf: function() { throw new Test262Error("should not evaluate this code"); } }; -var poisonedWithString = { - get valueOf() { throw "should not evaluate this code"; } -}; - var poisonedToPrimitive = { - get [Symbol.ToPrimitive]() { - throw new Test262Error('passing a poisoned object using @@ToPrimitive'); + [Symbol.toPrimitive]: function() { + throw new Test262Error("passing a poisoned object using @@ToPrimitive"); } }; -assert.throws(TypeError, function() { - Atomics.wait(int32Array, Symbol('foo'), poisonedWithString, poisonedWithString) -}, 'Symbol'); - assert.throws(Test262Error, function() { - Atomics.wait(int32Array, poisoned, poisonedWithString, poisonedWithString) -}, 'passing a poisoned object using valueOf'); + Atomics.wait(int32Array, poisonedValueOf, poisonedValueOf, poisonedValueOf); +}); assert.throws(Test262Error, function() { - Atomics.wait(int32Array, poisoned, poisonedToPrimitive, poisonedToPrimitive); -}, 'passing a poisoned object using @@ToPrimitive'); + Atomics.wait(int32Array, poisonedToPrimitive, poisonedToPrimitive, poisonedToPrimitive); +}); + +assert.throws(TypeError, function() { + Atomics.wait(int32Array, Symbol("foo"), poisonedValueOf, poisonedValueOf); +}); + +assert.throws(TypeError, function() { + Atomics.wait(int32Array, 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 new file mode 100644 index 0000000000..a6734c6ad1 --- /dev/null +++ b/test/built-ins/Atomics/wait/symbol-for-timeout-throws-agent.js @@ -0,0 +1,59 @@ +// Copyright (C) 2018 Amal Hussein. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-atomics.wait +description: > + Throws a TypeError if index arg can not be converted to an Integer +info: | + Atomics.wait( typedArray, index, value, timeout ) + + 4. Let q be ? ToNumber(timeout). + + Symbol --> Throw a TypeError exception. + +features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] +includes: [ atomicsHelper.js ] +---*/ +function getReport() { + var r; + while ((r = $262.agent.getReport()) == null) { + $262.agent.sleep(100); + } + return r; +} + +$262.agent.start( +` +$262.agent.receiveBroadcast(function (sab) { + var int32Array = new Int32Array(sab); + var start = Date.now(); + try { + Atomics.wait(int32Array, 0, 0, Symbol("1")); + } catch (error) { + $262.agent.report('Symbol("1")'); + } + try { + Atomics.wait(int32Array, 0, 0, Symbol("2")); + } catch (error) { + $262.agent.report('Symbol("2")'); + } + $262.agent.report(Date.now() - start); + $262.agent.leaving(); +}); +`); + +var int32Array = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); + +$262.agent.broadcast(int32Array.buffer); +$262.agent.sleep(150); + +assert.sameValue(getReport(), 'Symbol("1")'); +assert.sameValue(getReport(), 'Symbol("2")'); + +var timeDiffReport = 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.sameValue(Atomics.wake(int32Array, 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 dd003bf5e7..c133032348 100644 --- a/test/built-ins/Atomics/wait/symbol-for-timeout-throws.js +++ b/test/built-ins/Atomics/wait/symbol-for-timeout-throws.js @@ -1,48 +1,47 @@ -// Copyright (C) 2018 Amal Hussein. All rights reserved. +// Copyright (C) 2018 Amal Hussein. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-atomics.wait description: > - Throws a TypeError if timeout arg is a Symbol + Throws a TypeError if index arg can not be converted to an Integer info: | Atomics.wait( typedArray, index, value, timeout ) - 4.Let q be ? ToNumber(timeout). - ... - Symbol Throw a TypeError exception. -features: [Atomics, SharedArrayBuffer, TypedArray, Symbol] + 4. Let q be ? ToNumber(timeout). + + Symbol --> Throw a TypeError exception. + +features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] ---*/ -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(100); +var buffer = new SharedArrayBuffer(1024); +var int32Array = new Int32Array(buffer); + +var poisonedValueOf = { + valueOf: function() { + throw new Test262Error("should not evaluate this code"); } - return r; -} - -$262.agent.start( - ` -$262.agent.receiveBroadcast(function (sab) { - - var int32Array = new Int32Array(sab); - var err; - - try { - Atomics.wait(int32Array, 0, 0, Symbol('foo')); - } catch(e) { - err = e.name; +}; + +var poisonedToPrimitive = { + [Symbol.toPrimitive]: function() { + throw new Test262Error("passing a poisoned object using @@ToPrimitive"); } - - $262.agent.report(err); - $262.agent.leaving(); -}) -`); +}; + +assert.throws(Test262Error, function() { + Atomics.wait(int32Array, 0, 0, poisonedValueOf); +}); -var sab = new SharedArrayBuffer(4); -var int32Array = new Int32Array(sab); +assert.throws(Test262Error, function() { + Atomics.wait(int32Array, 0, 0, poisonedToPrimitive); +}); -$262.agent.broadcast(int32Array.buffer); +assert.throws(TypeError, function() { + Atomics.wait(int32Array, 0, 0, Symbol("foo")); +}); -assert.sameValue(getReport(), 'TypeError'); +assert.throws(TypeError, function() { + Atomics.wait(int32Array, 0, 0, Symbol("foo")); +}); 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 new file mode 100644 index 0000000000..701c551f58 --- /dev/null +++ b/test/built-ins/Atomics/wait/symbol-for-value-throws-agent.js @@ -0,0 +1,76 @@ +// Copyright (C) 2018 Amal Hussein. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-atomics.wait +description: > + Throws a TypeError if value arg is a Symbol +info: | + Atomics.wait( typedArray, index, value, timeout ) + + 3. Let v be ? ToInt32(value). + + ToInt32(value) + + 1.Let number be ? ToNumber(argument). + + Symbol --> Throw a TypeError exception. + +features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] +includes: [ atomicsHelper.js ] +---*/ + +function getReport() { + var r; + while ((r = $262.agent.getReport()) == null) { + $262.agent.sleep(100); + } + return r; +} + +$262.agent.start( +` +var poisonedValueOf = { + valueOf: function() { + throw new Test262Error("should not evaluate this code"); + } +}; + +var poisonedToPrimitive = { + [Symbol.toPrimitive]: function() { + throw new Test262Error("passing a poisoned object using @@ToPrimitive"); + } +}; + +$262.agent.receiveBroadcast(function (sab) { + var int32Array = new Int32Array(sab); + var start = Date.now(); + try { + Atomics.wait(int32Array, 0, Symbol("1"), poisonedValueOf); + } catch (error) { + $262.agent.report('Symbol("1")'); + } + try { + Atomics.wait(int32Array, 0, Symbol("2"), poisonedToPrimitive); + } catch (error) { + $262.agent.report('Symbol("2")'); + } + $262.agent.report(Date.now() - start); + $262.agent.leaving(); +}); +`); + +var int32Array = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); + +$262.agent.broadcast(int32Array.buffer); +$262.agent.sleep(150); + +assert.sameValue(getReport(), 'Symbol("1")'); +assert.sameValue(getReport(), 'Symbol("2")'); + +var timeDiffReport = 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.sameValue(Atomics.wake(int32Array, 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 ae63cceef6..e4d230da89 100644 --- a/test/built-ins/Atomics/wait/symbol-for-value-throws.js +++ b/test/built-ins/Atomics/wait/symbol-for-value-throws.js @@ -8,41 +8,45 @@ description: > info: | Atomics.wait( typedArray, index, value, timeout ) - 3.Let v be ? ToInt32(value). - ... - 1.Let number be ? ToNumber(argument). - ... - Symbol Throw a TypeError exception. -features: [Atomics, SharedArrayBuffer, TypedArray, Symbol] + 3. Let v be ? ToInt32(value). + + ToInt32(value) + + 1.Let number be ? ToNumber(argument). + + Symbol --> Throw a TypeError exception. + +features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] ---*/ -var sab = new SharedArrayBuffer(1024); -var int32Array = new Int32Array(sab); +var buffer = new SharedArrayBuffer(1024); +var int32Array = new Int32Array(buffer); -var poisoned = { +var poisonedValueOf = { valueOf: function() { throw new Test262Error("should not evaluate this code"); } }; -var poisonedWithString = { - get valueOf() { throw "should not evaluate this code"; } -}; - var poisonedToPrimitive = { - get [Symbol.ToPrimitive]() { - throw new Test262Error('passing a poisoned object using @@ToPrimitive'); + [Symbol.toPrimitive]: function() { + throw new Test262Error("passing a poisoned object using @@ToPrimitive"); } }; -assert.throws(TypeError, function() { - Atomics.wait(int32Array, 0, Symbol('foo'), poisonedWithString) -}, 'Symbol'); - assert.throws(Test262Error, function() { - Atomics.wait(int32Array, 0, poisoned, poisonedWithString) -}, 'passing a poisoned object using valueOf'); + Atomics.wait(int32Array, 0, poisonedValueOf, poisonedValueOf); +}); assert.throws(Test262Error, function() { - Atomics.wait(int32Array, 0, poisoned, poisonedToPrimitive); -}, 'passing a poisoned object using @@ToPrimitive'); + Atomics.wait(int32Array, 0, poisonedToPrimitive, poisonedToPrimitive); +}); + +assert.throws(TypeError, function() { + Atomics.wait(int32Array, 0, Symbol("foo"), poisonedValueOf); +}); + +assert.throws(TypeError, function() { + Atomics.wait(int32Array, 0, Symbol("foo"), poisonedToPrimitive); +}); + diff --git a/test/built-ins/Atomics/wait/true-for-timeout-agent.js b/test/built-ins/Atomics/wait/true-for-timeout-agent.js new file mode 100644 index 0000000000..08e712a7d6 --- /dev/null +++ b/test/built-ins/Atomics/wait/true-for-timeout-agent.js @@ -0,0 +1,68 @@ +// Copyright (C) 2018 Amal Hussein. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-atomics.wait +description: > + True timeout arg should result in an +0 timeout +info: | + Atomics.wait( typedArray, index, value, timeout ) + + 4. Let q be ? ToNumber(timeout). + + Boolean -> If argument is true, return 1. If argument is false, return +0. + +features: [Atomics, SharedArrayBuffer, TypedArray] +includes: [ atomicsHelper.js ] +---*/ + +function getReport() { + var r; + while ((r = $262.agent.getReport()) == null) { + $262.agent.sleep(100); + } + return r; +} + +$262.agent.start( + ` +var valueOf = { + valueOf: function() { + return true; + } +}; + +var toPrimitive = { + [Symbol.toPrimitive]: function() { + return true; + } +}; + +$262.agent.receiveBroadcast(function (sab) { + var int32Array = new Int32Array(sab); + var start = Date.now(); + $262.agent.report(Atomics.wait(int32Array, 0, 0, true)); + $262.agent.report(Atomics.wait(int32Array, 0, 0, valueOf)); + $262.agent.report(Atomics.wait(int32Array, 0, 0, toPrimitive)); + $262.agent.report(Date.now() - start); + $262.agent.leaving(); +}) +`); + +var int32Array = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); + +$262.agent.broadcast(int32Array.buffer); +$262.agent.sleep(150); + +assert.sameValue(getReport(), 'timed-out'); +assert.sameValue(getReport(), 'timed-out'); +assert.sameValue(getReport(), 'timed-out'); + +var timeDiffReport = 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.sameValue(Atomics.wake(int32Array, 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 fd4f4e62ce..c099e9d058 100644 --- a/test/built-ins/Atomics/wait/true-for-timeout.js +++ b/test/built-ins/Atomics/wait/true-for-timeout.js @@ -1,48 +1,37 @@ -// Copyright (C) 2018 Amal Hussein. All rights reserved. +// Copyright (C) 2018 Amal Hussein. All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- esid: sec-atomics.wait description: > - True timeout arg should result in a timeout value of 1 + Throws a TypeError if index arg can not be converted to an Integer info: | Atomics.wait( typedArray, index, value, timeout ) - 4.Let q be ? ToNumber(timeout). - ... - Boolean If argument is true, return 1. If argument is false, return +0. -features: [ Atomics, SharedArrayBuffer, TypedArray ] -includes: [atomicsHelper.js] ----*/ - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) - $262.agent.sleep(100); - return r; -} + 4. Let q be ? ToNumber(timeout). + Boolean -> If argument is true, return 1. If argument is false, return +0. -$262.agent.start( - ` -$262.agent.receiveBroadcast(function (sab) { - var int32Array = new Int32Array(sab); - var start = Date.now(); - $262.agent.report(Atomics.wait(int32Array, 0, 0, true)); // true => 1 - $262.agent.report(Date.now() - start); - $262.agent.leaving(); -}) -`); +features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] +flags: [CanBlockIsFalse] +---*/ -var int32Array = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +var buffer = new SharedArrayBuffer(1024); +var int32Array = new Int32Array(buffer); -$262.agent.broadcast(int32Array.buffer); +var valueOf = { + valueOf: function() { + return true; + } +}; -$262.agent.sleep(2); +var toPrimitive = { + [Symbol.toPrimitive]: function() { + return true; + } +}; -var r1 = getReport(); -var r2 = getReport(); +assert.sameValue(Atomics.wait(int32Array, 0, 0, true), "timed-out"); +assert.sameValue(Atomics.wait(int32Array, 0, 0, valueOf), "timed-out"); +assert.sameValue(Atomics.wait(int32Array, 0, 0, toPrimitive), "timed-out"); -assert.sameValue(r1, "timed-out"); -assert(r2 >= 1, "timeout should be a min of 1ms"); -assert(r2 <= $ATOMICS_MAX_TIME_EPSILON + 1, "timeout should be a max of $ATOMICS_MAX_TIME_EPSILON + 1ms"); diff --git a/test/built-ins/Atomics/wait/undefined-for-timeout.js b/test/built-ins/Atomics/wait/undefined-for-timeout.js index 1d63d30962..4d9ff9054b 100644 --- a/test/built-ins/Atomics/wait/undefined-for-timeout.js +++ b/test/built-ins/Atomics/wait/undefined-for-timeout.js @@ -12,7 +12,7 @@ info: | ... Undefined Return NaN. 5.If q is NaN, let t be +∞, else let t be max(q, 0) -features: [ Atomics, SharedArrayBuffer, TypedArray ] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ var NUMAGENT = 2; // Total number of agents started @@ -21,8 +21,9 @@ var WAKECOUNT = 2; // Total number of agents to wake up function getReport() { var r; - while ((r = $262.agent.getReport()) == null) + while ((r = $262.agent.getReport()) == null) { $262.agent.sleep(100); + } return r; } 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 48d6689a66..8e5ecffe33 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,12 +17,12 @@ info: | If value is undefined, then Let index be 0. -features: [ Atomics, SharedArrayBuffer, TypedArray ] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ $262.agent.start( - ` -$262.agent.receiveBroadcast(function (sab) { +` +$262.agent.receiveBroadcast(function (sab) { var int32Array = new Int32Array(sab); $262.agent.report(Atomics.wait(int32Array, undefined, 0, 1000)); // undefined index => 0 $262.agent.leaving(); @@ -43,7 +43,8 @@ assert.sameValue(getReport(), "ok"); function getReport() { var r; - while ((r = $262.agent.getReport()) == null) + while ((r = $262.agent.getReport()) == null) { $262.agent.sleep(100); + } return r; } diff --git a/test/built-ins/Atomics/wait/value-not-equal.js b/test/built-ins/Atomics/wait/value-not-equal.js index 6ed56aef0a..33f25df260 100644 --- a/test/built-ins/Atomics/wait/value-not-equal.js +++ b/test/built-ins/Atomics/wait/value-not-equal.js @@ -14,28 +14,29 @@ info: | a.Perform LeaveCriticalSection(WL). b. Return the String "not-equal". -features: [ Atomics, SharedArrayBuffer, TypedArray ] +features: [Atomics, SharedArrayBuffer, TypedArray] includes: [atomicsHelper.js] ---*/ function getReport() { var r; - while ((r = $262.agent.getReport()) == null) + while ((r = $262.agent.getReport()) == null) { $262.agent.sleep(100); + } return r; } var value = 42; $262.agent.start( - ` +` $262.agent.receiveBroadcast(function (sab) { var int32Array = new Int32Array(sab); - + $262.agent.report(Atomics.store(int32Array, 0, ${value})); - + $262.agent.report(Atomics.wait(int32Array, 0, 0)); - + $262.agent.leaving(); }) `); 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 b40986abc9..db0ac699f6 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,7 +12,7 @@ info: | a.Perform LeaveCriticalSection(WL). b. Return the String "not-equal". -features: [ Atomics, SharedArrayBuffer, TypedArray ] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ function getReport() { @@ -24,12 +24,12 @@ function getReport() { } $262.agent.start( - ` +` $262.agent.receiveBroadcast(function (sab) { var int32Array = new Int32Array(sab); - + $262.agent.report(Atomics.wait(int32Array, 0, 44, 1000)); - + $262.agent.report(Atomics.wait(int32Array, 0, 251.4, 1000)); $262.agent.leaving(); diff --git a/test/built-ins/Atomics/wait/waitlist-order-of-operations-is-fifo.js b/test/built-ins/Atomics/wait/waitlist-order-of-operations-is-fifo.js index 3cb3627264..f372a4cc06 100644 --- a/test/built-ins/Atomics/wait/waitlist-order-of-operations-is-fifo.js +++ b/test/built-ins/Atomics/wait/waitlist-order-of-operations-is-fifo.js @@ -12,7 +12,7 @@ info: | ... 3.Add W to the end of the list of waiters in WL. -features: [ Atomics, SharedArrayBuffer, TypedArray ] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ function getReport() { @@ -28,14 +28,14 @@ var agent2 = '2'; var agent3 = '3'; $262.agent.start( - ` +` $262.agent.receiveBroadcast(function (sab) { var int32Array = new Int32Array(sab); - - $262.agent.report(${agent1}); + + $262.agent.report(${agent1}); Atomics.wait(int32Array, 0, 0); - $262.agent.report(${agent1}); - + $262.agent.report(${agent1}); + $262.agent.leaving(); }) `); @@ -44,12 +44,12 @@ $262.agent.start( ` $262.agent.receiveBroadcast(function (sab) { var int32Array = new Int32Array(sab); - + $262.agent.report(${agent2}); Atomics.wait(int32Array, 0, 0); $262.agent.report(${agent2}); - + $262.agent.leaving(); }) `); @@ -58,12 +58,12 @@ $262.agent.start( ` $262.agent.receiveBroadcast(function (sab) { var int32Array = new Int32Array(sab); - + $262.agent.report(${agent3}); - + Atomics.wait(int32Array, 0, 0); $262.agent.report(${agent3}); - + $262.agent.leaving(); }) `); 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 0bf1800ba4..0839fbb10c 100644 --- a/test/built-ins/Atomics/wait/was-woken-before-timeout.js +++ b/test/built-ins/Atomics/wait/was-woken-before-timeout.js @@ -21,34 +21,36 @@ info: | features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ +var sleeping = 100; 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 int32Array = new Int32Array(sab); - $262.agent.report(Atomics.wait(int32Array, 0, 0, ${timeout})); - $262.agent.leaving(); - }) - `); - - var sab = new SharedArrayBuffer(4); +` +$262.agent.receiveBroadcast(function(sab) { var int32Array = new Int32Array(sab); - - var sleeping = 100; - - $262.agent.broadcast(int32Array.buffer); - $262.agent.sleep(sleeping); - - assert.sameValue(Atomics.wake(int32Array, 0), 1); - - assert.sameValue(getReport(), "ok"); - assert(sleeping < timeout, "this test assumes it won't last for more than 20 seconds"); - - function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - sleeping += 100; - $262.agent.sleep(100); - } - return r; - } + $262.agent.report(Atomics.wait(int32Array, 0, 0, ${timeout})); + $262.agent.leaving(); +}); +`); + +var sab = new SharedArrayBuffer(4); +var int32Array = new Int32Array(sab); + + +$262.agent.broadcast(int32Array.buffer); +$262.agent.sleep(sleeping); + +assert.sameValue(Atomics.wake(int32Array, 0), 1); + +assert.sameValue(getReport(), "ok"); +assert(sleeping < timeout, "this test assumes it won't last for more than 20 seconds"); + diff --git a/test/built-ins/Atomics/wait/was-woken.js b/test/built-ins/Atomics/wait/was-woken.js index 18916a9345..ccb180f5ae 100644 --- a/test/built-ins/Atomics/wait/was-woken.js +++ b/test/built-ins/Atomics/wait/was-woken.js @@ -5,16 +5,24 @@ esid: sec-atomics.wait description: > Test that Atomics.wait returns the right result when it was awoken. -features: [Atomics] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ +function getReport() { + var r; + while ((r = $262.agent.getReport()) == null) { + $262.agent.sleep(100); + } + return r; +} + $262.agent.start( ` $262.agent.receiveBroadcast(function (sab, id) { var ia = new Int32Array(sab); $262.agent.report(Atomics.wait(ia, 0, 0)); // No timeout => Infinity $262.agent.leaving(); -}) +}); `); var ia = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); @@ -23,11 +31,3 @@ $262.agent.broadcast(ia.buffer); $262.agent.sleep(500); // Give the agent a chance to wait Atomics.wake(ia, 0); assert.sameValue(getReport(), "ok"); - -function getReport() { - var r; - while ((r = $262.agent.getReport()) == null) { - $262.agent.sleep(100); - } - return r; -} diff --git a/test/built-ins/Atomics/wake/bad-range.js b/test/built-ins/Atomics/wake/bad-range.js index 248501b53e..7c2068a2f9 100644 --- a/test/built-ins/Atomics/wake/bad-range.js +++ b/test/built-ins/Atomics/wake/bad-range.js @@ -6,7 +6,7 @@ esid: sec-atomics.wake description: > Test range checking of Atomics.wake on arrays that allow atomic operations includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, TypedArray, arrow-function, let, for-of] +features: [ArrayBuffer, arrow-function, Atomics, BigInt, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ var sab = new SharedArrayBuffer(8); @@ -16,8 +16,8 @@ if (typeof BigInt !== "undefined") { views.push(BigInt64Array); } -testWithTypedArrayConstructors(function(View) { - let view = new View(sab); +testWithTypedArrayConstructors(function(TA) { + let view = new TA(sab); testWithAtomicsOutOfBoundsIndices(function(IdxGen) { let Idx = IdxGen(view); assert.throws(RangeError, () => Atomics.wake(view, Idx, 0)); // Even with waking zero diff --git a/test/built-ins/Atomics/wake/counts.js b/test/built-ins/Atomics/wake/counts.js index c361763f47..ad9772c9db 100644 --- a/test/built-ins/Atomics/wake/counts.js +++ b/test/built-ins/Atomics/wake/counts.js @@ -5,7 +5,7 @@ esid: sec-atomics.wake description: > Allowed boundary cases of the third 'count' argument to Atomics.wake -features: [Atomics] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ var sab = new SharedArrayBuffer(4); diff --git a/test/built-ins/Atomics/wake/good-views.js b/test/built-ins/Atomics/wake/good-views.js index 19ad2f2b37..f335e623b3 100644 --- a/test/built-ins/Atomics/wake/good-views.js +++ b/test/built-ins/Atomics/wake/good-views.js @@ -7,12 +7,12 @@ description: > Test Atomics.wait on arrays that allow atomic operations, in an Agent that is allowed to wait. There is only the one Agent. includes: [testAtomics.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ var sab = new SharedArrayBuffer(1024); var ab = new ArrayBuffer(16); -var int_views = [Int32Array]; +var views = [Int32Array]; var view = new Int32Array(sab, 32, 20); view[0] = 0; diff --git a/test/built-ins/Atomics/wake/missing-count.js b/test/built-ins/Atomics/wake/missing-count.js index 85b0877990..fe393182a5 100644 --- a/test/built-ins/Atomics/wake/missing-count.js +++ b/test/built-ins/Atomics/wake/missing-count.js @@ -10,7 +10,7 @@ info: | 3.If count is undefined, let c be +∞. -features: [ Atomics, SharedArrayBuffer, TypedArray ] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ var NUMAGENT = 4; // Total number of agents started diff --git a/test/built-ins/Atomics/wake/negative-count.js b/test/built-ins/Atomics/wake/negative-count.js index 038fe7ed37..e1790d81c0 100644 --- a/test/built-ins/Atomics/wake/negative-count.js +++ b/test/built-ins/Atomics/wake/negative-count.js @@ -5,7 +5,7 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes zero waiters if the count is negative -features: [Atomics] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ $262.agent.start( diff --git a/test/built-ins/Atomics/wake/negative-index-throws.js b/test/built-ins/Atomics/wake/negative-index-throws.js index abb5f54624..e0da1bca3b 100644 --- a/test/built-ins/Atomics/wake/negative-index-throws.js +++ b/test/built-ins/Atomics/wake/negative-index-throws.js @@ -13,7 +13,7 @@ info: | 2.Let accessIndex be ? ToIndex(requestIndex). ... 2.b If integerIndex < 0, throw a RangeError exception -features: [ Atomics , SharedArrayBuffer, TypedArray ] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ var sab = new SharedArrayBuffer(1024); 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 df3a1a5892..4b400f1101 100644 --- a/test/built-ins/Atomics/wake/non-int32-typedarray-throws.js +++ b/test/built-ins/Atomics/wake/non-int32-typedarray-throws.js @@ -12,7 +12,7 @@ info: | ... 5.If onlyInt32 is true, then If typeName is not "Int32Array", throw a TypeError exception. -features: [ Atomics, TypedArray ] +features: [Atomics, Float32Array, Float64Array, Int8Array, TypedArray, Uint16Array, Uint8Array, Uint8ClampedArray] ---*/ var poisoned = { 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 82a38f9cc5..638d1d13d8 100644 --- a/test/built-ins/Atomics/wake/non-shared-bufferdata-throws.js +++ b/test/built-ins/Atomics/wake/non-shared-bufferdata-throws.js @@ -12,7 +12,7 @@ info: | 9.If IsSharedArrayBuffer(buffer) is false, throw a TypeError exception. ... 4.If bufferData is a Data Block, return false. -features: [ Atomics, ArrayBuffer, TypedArray ] +features: [ArrayBuffer, Atomics, TypedArray] ---*/ var int32Array = new Int32Array(new ArrayBuffer(4)); diff --git a/test/built-ins/Atomics/wake/non-views.js b/test/built-ins/Atomics/wake/non-views.js index 91461303b1..aaffd00309 100644 --- a/test/built-ins/Atomics/wake/non-views.js +++ b/test/built-ins/Atomics/wake/non-views.js @@ -6,7 +6,7 @@ esid: sec-atomics.wake description: > Test Atomics.wake on view values other than TypedArrays includes: [testAtomics.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer] ---*/ testWithAtomicsNonViewValues(function(view) { diff --git a/test/built-ins/Atomics/wake/nonshared-int-views.js b/test/built-ins/Atomics/wake/nonshared-int-views.js index 87a337f8d6..b49611e58c 100644 --- a/test/built-ins/Atomics/wake/nonshared-int-views.js +++ b/test/built-ins/Atomics/wake/nonshared-int-views.js @@ -6,20 +6,18 @@ esid: sec-atomics.wake description: > Test Atomics.wake on non-shared integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [ArrayBuffer, Atomics, BigInt, TypedArray] ---*/ -var ab = new ArrayBuffer(16); - -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var buffer = new ArrayBuffer(16); +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { - int_views.push(BigInt64Array); - int_views.push(BigUint64Array); + views.push(BigInt64Array); + views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - var view = new View(ab); - - assert.throws(TypeError, (() => Atomics.wake(view, 0, 0))); // Should fail even if waking zero waiters -}, int_views); +testWithTypedArrayConstructors(function(TA) { + // Should fail even if waking zero waiters + assert.throws(TypeError, (() => Atomics.wake(new TA(buffer), 0, 0))); +}, 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 965b2c48fc..8639a141e2 100644 --- a/test/built-ins/Atomics/wake/not-a-typedarray-throws.js +++ b/test/built-ins/Atomics/wake/not-a-typedarray-throws.js @@ -11,7 +11,7 @@ info: | ... 3.If typedArray does not have a [[TypedArrayName]] internal slot, throw a TypeError exception. -features: [ Atomics ] +features: [Atomics] ---*/ var poisoned = { @@ -21,9 +21,9 @@ var poisoned = { }; assert.throws(TypeError, function() { - Atomics.wait({}, 0, 0, 0) + Atomics.wait({}, 0, 0, 0); }); assert.throws(TypeError, function () { - Atomics.wait({}, poisoned, poisoned, poisoned) + Atomics.wait({}, poisoned, poisoned, poisoned); }); 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 0d1c42ba0f..e01e026562 100644 --- a/test/built-ins/Atomics/wake/not-an-object-throws.js +++ b/test/built-ins/Atomics/wake/not-an-object-throws.js @@ -10,7 +10,7 @@ info: | 1.Let buffer be ? ValidateSharedIntegerTypedArray(typedArray, true). ... 2. if Type(typedArray) is not Object, throw a TypeError exception -features: [ Atomics, Symbol ] +features: [Atomics, Symbol] ---*/ var poisoned = { @@ -19,16 +19,30 @@ var poisoned = { } }; -assert.throws(TypeError, function() { Atomics.wake(null,poisoned,poisoned) }, 'null'); +assert.throws(TypeError, function() { + Atomics.wake(null, poisoned, poisoned); +}, 'null'); -assert.throws(TypeError, function() { Atomics.wake(undefined,poisoned,poisoned) }, 'undefined'); +assert.throws(TypeError, function() { + Atomics.wake(undefined, poisoned, poisoned); +}, 'undefined'); -assert.throws(TypeError, function() { Atomics.wake(true,poisoned,poisoned) }, 'true'); +assert.throws(TypeError, function() { + Atomics.wake(true, poisoned, poisoned); +}, 'true'); -assert.throws(TypeError, function() { Atomics.wake(false,poisoned,poisoned) }, 'false'); +assert.throws(TypeError, function() { + Atomics.wake(false, poisoned, poisoned); +}, 'false'); -assert.throws(TypeError, function() { Atomics.wake('***string***',poisoned,poisoned) }, 'String'); +assert.throws(TypeError, function() { + Atomics.wake('***string***', poisoned, poisoned); +}, 'String'); -assert.throws(TypeError, function() { Atomics.wake(Number.NEGATIVE_INFINITY,poisoned,poisoned) }, '-Infinity'); +assert.throws(TypeError, function() { + Atomics.wake(Number.NEGATIVE_INFINITY, poisoned, poisoned); +}, '-Infinity'); -assert.throws(TypeError, function() { Atomics.wake(Symbol('***symbol***'),poisoned,poisoned) }, 'Symbol'); +assert.throws(TypeError, function() { + Atomics.wake(Symbol('***symbol***'), poisoned, poisoned); +}, 'Symbol'); diff --git a/test/built-ins/Atomics/wake/null-bufferdata-throws.js b/test/built-ins/Atomics/wake/null-bufferdata-throws.js index 0c232d94e8..81be20179b 100644 --- a/test/built-ins/Atomics/wake/null-bufferdata-throws.js +++ b/test/built-ins/Atomics/wake/null-bufferdata-throws.js @@ -13,7 +13,7 @@ info: | ... 3.If bufferData is null, return false. includes: [detachArrayBuffer.js] -features: [ Atomics, ArrayBuffer, TypedArray ] +features: [ArrayBuffer, Atomics, TypedArray] ---*/ var int32Array = new Int32Array(new ArrayBuffer(1024)); @@ -25,4 +25,6 @@ var poisoned = { $DETACHBUFFER(int32Array.buffer); // Detaching a non-shared ArrayBuffer sets the [[ArrayBufferData]] value to null -assert.throws(TypeError, () => Atomics.wake(int32Array, poisoned, poisoned)); +assert.throws(TypeError, function() { + Atomics.wake(int32Array, poisoned, poisoned); +}); 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 a7893f1571..6a788122cd 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 @@ -13,7 +13,7 @@ info: | 2.Let accessIndex be ? ToIndex(requestIndex). ... 5. If accessIndex ≥ length, throw a RangeError exception. -features: [ Atomics, SharedArrayBuffer, TypedArray ] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ var int32Array = new Int32Array(new SharedArrayBuffer(4)); @@ -23,6 +23,12 @@ var poisoned = { } }; -assert.throws(RangeError, () => Atomics.wake(int32Array, Infinity, poisoned)); -assert.throws(RangeError, () => Atomics.wake(int32Array, 2, poisoned)); -assert.throws(RangeError, () => Atomics.wake(int32Array, 200, poisoned)); +assert.throws(RangeError, function() { + Atomics.wake(int32Array, Infinity, poisoned); +}); +assert.throws(RangeError, function() { + Atomics.wake(int32Array, 2, poisoned); +}); +assert.throws(RangeError, function() { + Atomics.wake(int32Array, 200, poisoned); +}); diff --git a/test/built-ins/Atomics/wake/shared-nonint-views.js b/test/built-ins/Atomics/wake/shared-nonint-views.js index 353ffedd50..727e2e5eaa 100644 --- a/test/built-ins/Atomics/wake/shared-nonint-views.js +++ b/test/built-ins/Atomics/wake/shared-nonint-views.js @@ -6,17 +6,14 @@ esid: sec-atomics.wake description: > Test Atomics.wake on shared non-integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(1024); +var buffer = new SharedArrayBuffer(1024); + +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.wake(new TA(buffer), 0, 0))); +}, floatArrayConstructors); -var other_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Uint32Array, - Uint8ClampedArray, Float32Array, Float64Array]; -testWithTypedArrayConstructors(function(View) { - var view = new View(sab); - // Even with timout zero this should fail - assert.throws(TypeError, (() => Atomics.wake(view, 0, 0))); // Even with 0 to wake this should fail -}, other_views); 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 92899d54c0..86b8dd09b5 100644 --- a/test/built-ins/Atomics/wake/symbol-for-index-throws.js +++ b/test/built-ins/Atomics/wake/symbol-for-index-throws.js @@ -3,45 +3,58 @@ /*--- esid: sec-atomics.wake -description: +description: > Throws a TypeError if index arg can not be converted to an Integer info: | - Atomics.wake( typedArray, index, count ) + Atomics.wake( typedArray, index, value, timeout ) - 3.Let v be ? ToInt32(value). - ... - 1.Let number be ? ToNumber(argument). - Symbol --> Throw a TypeError exception. -features: [ Atomics, SharedArrayBuffer, TypedArray, Symbol, Symbol.toPrimitive] + 2. Let i be ? ValidateAtomicAccess(typedArray, index). + + ValidateAtomicAccess( typedArray, requestIndex ) + + 2. Let accessIndex be ? ToIndex(requestIndex). + + ToIndex ( value ) + + 2. Else, + a. Let integerIndex be ? ToInteger(value). + + ToInteger(value) + + 1. Let number be ? ToNumber(argument). + + Symbol --> Throw a TypeError exception. + +features: [Atomics, SharedArrayBuffer, Symbol, Symbol.toPrimitive, TypedArray] ---*/ -var sab = new SharedArrayBuffer(1024); -var int32Array = new Int32Array(sab); +var buffer = new SharedArrayBuffer(1024); +var int32Array = new Int32Array(buffer); -var poisoned = { +var poisonedValueOf = { valueOf: function() { throw new Test262Error("should not evaluate this code"); } }; -var poisonedWithString = { - get valueOf() { throw "should not evaluate this code"; } -}; - var poisonedToPrimitive = { - get [Symbol.ToPrimitive]() { - throw new Test262Error('passing a poisoned object using @@ToPrimitive'); + [Symbol.toPrimitive]: function() { + throw new Test262Error("passing a poisoned object using @@ToPrimitive"); } }; -assert.throws(TypeError, function() { - Atomics.wake(int32Array, Symbol('foo'), poisonedWithString, poisonedWithString) -}, 'Symbol'); - assert.throws(Test262Error, function() { - Atomics.wake(int32Array, poisoned, poisonedWithString, poisonedWithString) -}, 'passing a poisoned object using valueOf'); + Atomics.wake(int32Array, poisonedValueOf, poisonedValueOf); +}); assert.throws(Test262Error, function() { - Atomics.wake(int32Array, poisoned, poisonedToPrimitive, poisonedToPrimitive); -}, 'passing a poisoned object using @@ToPrimitive'); + Atomics.wake(int32Array, poisonedToPrimitive, poisonedToPrimitive); +}); + +assert.throws(TypeError, function() { + Atomics.wake(int32Array, Symbol("foo"), poisonedValueOf); +}); + +assert.throws(TypeError, function() { + Atomics.wake(int32Array, Symbol("foo"), poisonedToPrimitive); +}); diff --git a/test/built-ins/Atomics/wake/undefined-for-count.js b/test/built-ins/Atomics/wake/undefined-for-count.js index 8b6c618684..da7c179ee8 100644 --- a/test/built-ins/Atomics/wake/undefined-for-count.js +++ b/test/built-ins/Atomics/wake/undefined-for-count.js @@ -10,7 +10,7 @@ info: | 3.If count is undefined, let c be +∞. -features: [ Atomics, SharedArrayBuffer, TypedArray ] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ var NUMAGENT = 4; // Total number of agents started 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 d5cf16730c..78f40466a4 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,7 +18,7 @@ info: | If value is undefined, then Let index be 0. -features: [ Atomics, SharedArrayBuffer, TypedArray ] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ $262.agent.start( 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 52b878ecbe..5babecd459 100644 --- a/test/built-ins/Atomics/wake/wake-all-on-loc.js +++ b/test/built-ins/Atomics/wake/wake-all-on-loc.js @@ -6,7 +6,7 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes all waiters on a location, but does not wake waiters on other locations. -features: [Atomics] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ var WAKEUP = 0; // Waiters on this will be woken @@ -53,18 +53,21 @@ $262.agent.sleep(500); assert.sameValue(Atomics.wake(ia, WAKEUP), NUMAGENT); var rs = []; -for (var i = 0; i < NUMAGENT + 1; i++) +for (var i = 0; i < NUMAGENT + 1; i++) { rs.push(getReport()); +} rs.sort(); -for (var i = 0; i < NUMAGENT; i++) +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) + while ((r = $262.agent.getReport()) == null) { $262.agent.sleep(100); + } return r; } diff --git a/test/built-ins/Atomics/wake/wake-all.js b/test/built-ins/Atomics/wake/wake-all.js index 969733f853..d85dd2ffba 100644 --- a/test/built-ins/Atomics/wake/wake-all.js +++ b/test/built-ins/Atomics/wake/wake-all.js @@ -5,7 +5,7 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes all waiters if that's what the count is. -features: [Atomics] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ var WAKEUP = 0; // Waiters on this will be woken @@ -52,18 +52,21 @@ $262.agent.sleep(500); assert.sameValue(Atomics.wake(ia, WAKEUP), NUMAGENT); var rs = []; -for (var i = 0; i < NUMAGENT + 1; i++) +for (var i = 0; i < NUMAGENT + 1; i++) { rs.push(getReport()); +} rs.sort(); -for (var i = 0; i < NUMAGENT; i++) +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) + while ((r = $262.agent.getReport()) == null) { $262.agent.sleep(100); + } return r; } diff --git a/test/built-ins/Atomics/wake/wake-in-order.js b/test/built-ins/Atomics/wake/wake-in-order.js index caaedb63d1..03952e7cc5 100644 --- a/test/built-ins/Atomics/wake/wake-in-order.js +++ b/test/built-ins/Atomics/wake/wake-in-order.js @@ -5,7 +5,7 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes agents in the order they are waiting. -features: [Atomics] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ var NUMAGENT = 3; @@ -57,8 +57,9 @@ for (var i = 0; i < NUMAGENT; i++) { function getReport() { var r; - while ((r = $262.agent.getReport()) == null) + while ((r = $262.agent.getReport()) == null) { $262.agent.sleep(100); + } return r; } diff --git a/test/built-ins/Atomics/wake/wake-nan.js b/test/built-ins/Atomics/wake/wake-nan.js index 9ef59d474d..9c7f93537d 100644 --- a/test/built-ins/Atomics/wake/wake-nan.js +++ b/test/built-ins/Atomics/wake/wake-nan.js @@ -5,7 +5,7 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes zero waiters if the count is NaN -features: [Atomics] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ $262.agent.start( @@ -26,7 +26,8 @@ assert.sameValue(getReport(), "timed-out"); function getReport() { var r; - while ((r = $262.agent.getReport()) == null) + while ((r = $262.agent.getReport()) == null) { $262.agent.sleep(100); + } return r; } diff --git a/test/built-ins/Atomics/wake/wake-one.js b/test/built-ins/Atomics/wake/wake-one.js index 44a8279540..b94529ce2b 100644 --- a/test/built-ins/Atomics/wake/wake-one.js +++ b/test/built-ins/Atomics/wake/wake-one.js @@ -5,7 +5,7 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes one waiter if that's what the count is. -features: [Atomics] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ var NUMAGENT = 3; @@ -46,19 +46,23 @@ assert.sameValue(Atomics.wake(ia, 0, WAKECOUNT), WAKECOUNT); // Collect and check results var rs = []; -for (var i = 0; i < NUMAGENT; i++) +for (var i = 0; i < NUMAGENT; i++) { rs.push(getReport()); +} rs.sort(); -for (var i = 0; i < WAKECOUNT; i++) +for (var i = 0; i < WAKECOUNT; i++) { assert.sameValue(rs[i], "ok"); -for (var i = WAKECOUNT; i < NUMAGENT; i++) +} +for (var i = WAKECOUNT; i < NUMAGENT; i++) { assert.sameValue(rs[i], "timed-out"); +} function getReport() { var r; - while ((r = $262.agent.getReport()) == null) + while ((r = $262.agent.getReport()) == null) { $262.agent.sleep(100); + } return r; } diff --git a/test/built-ins/Atomics/wake/wake-two.js b/test/built-ins/Atomics/wake/wake-two.js index 8c3b064323..6ca7c52e73 100644 --- a/test/built-ins/Atomics/wake/wake-two.js +++ b/test/built-ins/Atomics/wake/wake-two.js @@ -5,7 +5,7 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes two waiters if that's what the count is. -features: [Atomics] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ @@ -47,19 +47,23 @@ assert.sameValue(Atomics.wake(ia, 0, WAKECOUNT), WAKECOUNT); // Collect and check results var rs = []; -for (var i = 0; i < NUMAGENT; i++) +for (var i = 0; i < NUMAGENT; i++) { rs.push(getReport()); +} rs.sort(); -for (var i = 0; i < WAKECOUNT; i++) +for (var i = 0; i < WAKECOUNT; i++) { assert.sameValue(rs[i], "ok"); -for (var i = WAKECOUNT; i < NUMAGENT; i++) +} +for (var i = WAKECOUNT; i < NUMAGENT; i++) { assert.sameValue(rs[i], "timed-out"); +} function getReport() { var r; - while ((r = $262.agent.getReport()) == null) + while ((r = $262.agent.getReport()) == null) { $262.agent.sleep(100); + } return r; } diff --git a/test/built-ins/Atomics/wake/wake-zero.js b/test/built-ins/Atomics/wake/wake-zero.js index 40ad8e0faf..6c034e791f 100644 --- a/test/built-ins/Atomics/wake/wake-zero.js +++ b/test/built-ins/Atomics/wake/wake-zero.js @@ -5,12 +5,10 @@ esid: sec-atomics.wake description: > Test that Atomics.wake wakes zero waiters if that's what the count is. -features: [Atomics] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ - var NUMAGENT = 3; - var WAKEUP = 0; // Agents wait here var RUNNING = 1; // Accounting of live agents here var NUMELEM = 2; @@ -47,14 +45,17 @@ assert.sameValue(Atomics.wake(ia, 0, WAKECOUNT), WAKECOUNT); // Collect and check results var rs = []; -for (var i = 0; i < NUMAGENT; i++) +for (var i = 0; i < NUMAGENT; i++) { rs.push(getReport()); +} rs.sort(); -for (var i = 0; i < WAKECOUNT; i++) - assert.sameValue(rs[i], "ok"); -for (var i = WAKECOUNT; i < NUMAGENT; i++) - assert.sameValue(rs[i], "timed-out"); +for (var i = 0; i < WAKECOUNT; i++) { + 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"); +} function getReport() { var r; @@ -69,5 +70,5 @@ function waitUntil(ia, k, value) { $262.agent.sleep(100); i++; } - assert.sameValue(Atomics.load(ia, k), value, "All agents are running"); + assert.sameValue(Atomics.load(ia, k), value, "Atomics.load(ia, k) returns value (All agents are running)"); } diff --git a/test/built-ins/Atomics/xor/bad-range.js b/test/built-ins/Atomics/xor/bad-range.js index c51cf02ee0..4a311a80b8 100644 --- a/test/built-ins/Atomics/xor/bad-range.js +++ b/test/built-ins/Atomics/xor/bad-range.js @@ -6,21 +6,20 @@ esid: sec-atomics.xor description: > Test range checking of Atomics.xor on arrays that allow atomic operations includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, BigInt, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ var sab = new SharedArrayBuffer(8); -var views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { views.push(BigInt64Array); views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - let view = new View(sab); +testWithTypedArrayConstructors(function(TA) { + let view = new TA(sab); testWithAtomicsOutOfBoundsIndices(function(IdxGen) { - let Idx = IdxGen(view); - assert.throws(RangeError, () => Atomics.xor(view, Idx, 0)); + assert.throws(RangeError, () => Atomics.xor(view, IdxGen(view), 0)); }); }, views); diff --git a/test/built-ins/Atomics/xor/good-views.js b/test/built-ins/Atomics/xor/good-views.js index 73a3535cbd..76be431af4 100644 --- a/test/built-ins/Atomics/xor/good-views.js +++ b/test/built-ins/Atomics/xor/good-views.js @@ -5,18 +5,18 @@ esid: sec-atomics.xor description: Test Atomics.xor on arrays that allow atomic operations includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, TypedArray, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer, TypedArray] ---*/ var sab = new SharedArrayBuffer(1024); var ab = new ArrayBuffer(16); -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var views = intArrayConstructors.slice(); -testWithTypedArrayConstructors(function(View) { +testWithTypedArrayConstructors(function(TA) { // Make it interesting - use non-zero byteOffsets and non-zero indexes. - var view = new View(sab, 32, 20); - var control = new View(ab, 0, 2); + var view = new TA(sab, 32, 20); + var control = new TA(ab, 0, 2); view[8] = 0x33333333; control[0] = 0x33333333; @@ -59,4 +59,4 @@ testWithTypedArrayConstructors(function(View) { Atomics.store(view, Idx, 37); assert.sameValue(Atomics.xor(view, Idx, 0), 37); }); -}, int_views); +}, views); diff --git a/test/built-ins/Atomics/xor/non-views.js b/test/built-ins/Atomics/xor/non-views.js index 6cbec2e5e5..1ff989839f 100644 --- a/test/built-ins/Atomics/xor/non-views.js +++ b/test/built-ins/Atomics/xor/non-views.js @@ -6,7 +6,7 @@ esid: sec-atomics.xor description: > Test Atomics.xor on view values other than TypedArrays includes: [testAtomics.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, for-of] +features: [ArrayBuffer, arrow-function, Atomics, DataView, for-of, let, SharedArrayBuffer] ---*/ testWithAtomicsNonViewValues(function(view) { diff --git a/test/built-ins/Atomics/xor/nonshared-int-views.js b/test/built-ins/Atomics/xor/nonshared-int-views.js index 46447c29c2..7e5218ebde 100644 --- a/test/built-ins/Atomics/xor/nonshared-int-views.js +++ b/test/built-ins/Atomics/xor/nonshared-int-views.js @@ -6,20 +6,17 @@ esid: sec-atomics.xor description: > Test Atomics.xor on non-shared integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [ArrayBuffer, Atomics, BigInt, TypedArray] ---*/ -var ab = new ArrayBuffer(16); - -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; +var buffer = new ArrayBuffer(16); +var views = intArrayConstructors.slice(); if (typeof BigInt !== "undefined") { - int_views.push(BigInt64Array); - int_views.push(BigUint64Array); + views.push(BigInt64Array); + views.push(BigUint64Array); } -testWithTypedArrayConstructors(function(View) { - var view = new View(ab); - - assert.throws(TypeError, (() => Atomics.xor(view, 0, 0))); -}, int_views); +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.xor(new TA(buffer), 0, 0))); +}, views); diff --git a/test/built-ins/Atomics/xor/shared-nonint-views.js b/test/built-ins/Atomics/xor/shared-nonint-views.js index 1c436e08da..fca92c923a 100644 --- a/test/built-ins/Atomics/xor/shared-nonint-views.js +++ b/test/built-ins/Atomics/xor/shared-nonint-views.js @@ -6,15 +6,11 @@ esid: sec-atomics.xor description: > Test Atomics.xor on shared non-integer TypedArrays includes: [testTypedArray.js] -features: [Atomics, TypedArray] +features: [Atomics, SharedArrayBuffer, TypedArray] ---*/ -var sab = new SharedArrayBuffer(1024); +var buffer = new SharedArrayBuffer(1024); -var other_views = [Uint8ClampedArray, Float32Array, Float64Array]; - -testWithTypedArrayConstructors(function(View) { - var view = new View(sab); - - assert.throws(TypeError, (() => Atomics.xor(view, 0, 0))); -}, other_views); +testWithTypedArrayConstructors(function(TA) { + assert.throws(TypeError, (() => Atomics.xor(new TA(buffer), 0, 0))); +}, floatArrayConstructors); -- GitLab