diff --git a/harness/testTypedArray.js b/harness/testTypedArray.js index 2699214ca358f7eadab04d1085d57234d604d937..030c05e90b62433de6e0aa9029bf4d0c86268b73 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 d3d1ba2d7df5c5333da33b944bb95b1a6e7f8533..83d8c5695cfc741583f018e00eddee82dc1cfe0a 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 b7aa9cd5abb1d1452ca555a17aadf40b902b0d3e..59efe923db42249910ea573ea691ee08d2b0bf38 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 ff1805808e1ffd9e815108e1c5362fb8c83b11e6..64235a5be82f88f59612cee262b27d4f18502e5a 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 e0923889a494a135105f9aeff3945d4a4f4cca34..f0eecdafb2eadc962677fc4acb00edbf79bee240 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 e1a44542a8fe2f1a0093a7643cccb283387ceadb..92b75d32e381973aa30e485d06fc2fd14c810a16 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 ca2ad7bfa2ae41c1c32094af029115d2e405b15e..b8eb2ce0bf1588fa29b72d9f2a8141f7b7a43b6c 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 1451092a2d8155ae7b3bab108cc4bed5c891c2e5..19fc35235b7343b1debad26414835ff7a4d5d2e8 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 e8435ff2e750c8916d6a018645ae6946ba1049fc..e69420d530b973ffb272e8cfb25dfb4d462fa1de 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 bdcfbac7443e1836904c5971ddd138a8a7af5d37..5d77bb208f9517caf258197adceb4434ebf1fed3 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 4a5a90efa2750859b3ff77a3e376e3812089ea0f..0ac99ee7189d270dfd41814b6a191e1db9601f04 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 9c34faf82162938267425404790fb23956b1ed61..42b669359e0099c062aeaa2825788c7bda142401 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 b7964e361014e544ba86f5c5f14a9aceb588b78b..ea8ab1b31cd5900455fab46c1f6e6996467c5867 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 f21d7a12da22e2208c36f88e000e64986f0158ed..9d39d9a4ae47b273dc926c2333388b2d4292b61a 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 fc51c91ecade1ab42dfcb263faccc999985009f0..e297384cf77184bae2ba5f9a954fa1cf8980a896 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 aaaa95d4ea118d22df76242afd80e13a0f3529fc..2f196f896e2b132cede9f6b02341928be6782600 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 06d66b0aeb494fd3a2280972c7d80711c97d6d5b..58815cb1e5580b5a51d44e8301011b0d22be6c54 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 15957b2002b4e82cf7391d6fd901255195564893..ddc763ecd283f1b068651d73797e466df6d4ceb7 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 d8fd39ee9f6d26c62b90e5a70d5e45e523a8a9ca..a7b5c763307522128f6b83ea74e941a0a9416ee5 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 c4d28a2fa160765837a6e164595582aad3c5bdbe..1b9348ca695e4f3c12f4cc44d8e85a534b589ca2 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 c6684d46357574a34c6935758718f4dd4c5f7ee0..47a736fc9aaf9591327baa98c295c95d5f24bb4a 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 f0c041df1cdb9ea5f1bfb7accd97dac233fdf748..16a10234a46d116504d117535dbde5879d108474 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 1c5e686f4e84891b972bac8b0f41866d3de9352c..9901e553a9d72c69a6d9bb7b13b8a8fa54029847 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 cfeafe0bbb4aaba56238bc2f09bc2a22f0897a78..737043dad30725b0289e5508a06b7c92adc77e43 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 7f1c7afc736f3214d206ffe0a7f92faab559a7b9..c2a2cdcc212598953911151e0c99f5e1c6e379a1 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 a4e2ad88060486e932c53337c51686e1c2d222bf..b36b892513dab876ddc2581d042d512ca034933b 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 1c4442dbfb7515c30ef45d20f2627ad50f9e23cd..11187136fe5d8cf9db89015a8dfffa09222041c7 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 0c8e6bccc650e3ac11f29d1bfb296cbb78991e6f..eb914784956e54d75173ff35b6684d6b0df009f9 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 170c727f06c4e5bfb7b56683853053b9347a6eaf..f50b2746422976d5eb715163e8a68b98cee93292 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 5c3ff9b1b599abe7bbab1427698aab3c58feb8a5..42ee5a30c3e639ef180c7f7bbf823271d4b28dbf 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 6fab1d565e41b99aa3053760bedee9e8bc737a9d..228500d69ac44fbf67704bc5f09c97f46fa2ecb3 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 1135faa8e9e24b77aded1b863803bd00e2894047..feb25c906eae5aff4633054d798e11eca0ab9058 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 1a75c23448c77ebdcb04679ea7eab33bc34e800a..b88c793133c49a91a867a5fefa446325e494508a 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 0116afea5336e5532a377ca97201866cfb3f2938..5217318e8d2856578c8062446a44236d72495a65 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 a13f1f177ab7da945d2c440ee9e47b9b95f0a1ff..2b03ecbbadfb15dc8803a7d773f285a8cfb70051 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 c39de60aa872b7347403fb247f0accdd9ac7ceb6..4e665a76392ac79c2e9eb53619fa79ba49fecd11 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 365a7fbba79301d0b2550a8ed28139ad7242845f..e34616f9930a34b81df9136d1cb028b45b1d5c0e 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 06029384cc6e9a7c013a34614ebc89cd174e0fde..d6bda379c1742d0c82d57c49d1517aec9a4ca591 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 f2dfb40916c6937e9aa5cef39e74cfca4474226a..4e363d409a708b5f8b0db875e7cd675962aea18b 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 700309fffc7ddbca5c13574c9ab5f9b659596079..395bc920610562e0c527fd6ab4a9b8c0d9a1d539 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 18b6982d7312d66d48e07223db32fd41240145cf..411e1ad1852ab1cf8a927bd435503417b08f917f 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 985b95c00beb89cfc533c9b350854459db820cb1..d4b12d5b2d8796206871bb283e524f5a83cb1b08 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 90a605b7c75205cdae34c4f3c5ff87c04116a722..8644c98e531c6f1bf2e88cad21fd73f25a46d67d 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 3563f7e37d5a659631beff967f63e947e9197b2f..89159d5879217827b90756ac1a5dcc574245773c 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 56fb3c5125b1dc58dbe89294301a80d49f0ec388..30fc2d1f063e61a3d7d2b42282208ab92989d769 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 70e644507ed65fb1b2abd8472284c9186e294ac1..a647bb648621708f546fb1a59e619671a9788ec4 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 0000000000000000000000000000000000000000..c88b4900d045997772325599400aa1c2ad993863 --- /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 cc96fd567c55361bb674f82ecfa4f45686fc6fd0..72f234baab8bfab626d8a1386be4953f69e25e48 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 1745841592f938e225fadaa9f545f4369cf2a0e1..bf9fd6b5087e8faf2c9cfde2616e69a1136fe537 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 f1356221f69a10f36c3c488db07d599656bc1e69..bfc3bd4825689590a9295485d573b620f4a72536 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 2d08dc40c10a16e259ef8afc991b882b2232134e..baba9e03941bffbaf2130c4966ac806c33795957 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 0000000000000000000000000000000000000000..a5dd78668086423328c7db76525d68a57facd1a1 --- /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 84ce5ce1901acb0457deb0cff68a982bb9f359ec..46961c5be21fcfd535cc6d3472ab755888ec63ac 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 1da152c7a0386a09976acd476537e884e3b235fd..a504fd5bde8be09fb720b256c33304a9dcc823c3 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 dc5932fb1dacc21d1f3513dde9042897153d62e8..ea2ce1f1bf34711ffe8eb25ec56fed4ab650d105 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 a3bcfceb7943dedd812ae099cc17a62223d2fcc4..d14ae2cf7b6cc415817ab389f7c13ff7f5e8c208 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 7c1fbae1bc9072249e0357b1a4914b2a16516b4c..0fc66993aa8652fb589064a46b735022b672285d 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 39d564586ccc5844d4f40de79cfe38d27e780c8d..e60165ffed168dc4c61cfe5f4866552298486766 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 9dc142b0c27f7ab6826636422e27293c4429a39d..04c613397fdece0fb5e8938209fc0b4bdf234823 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 0000000000000000000000000000000000000000..fd106e807e94fb1219f8df43ed937a3bb22da960 --- /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 436b34fe3edaaf3bac505dc79a09da2ba6896ccc..70de069ae1f4ac561c8c91d0a976253597b0ca5c 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 0000000000000000000000000000000000000000..7db064617a47bfbee2134af20aadb431adf7bd9f --- /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 ab2c809178fcfab7e985f6132fd3b08bd72a5a8b..3fc07cc11b2acd8c6805f6dfded0ccad6db0abea 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 d14262605f1432700e75364c1aeeb4bf1c9c33e8..d9925b800602d04ad5536adceba0ab6729fd9284 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 0000000000000000000000000000000000000000..4708214512258772ddae13543feb46668cd4ba46 --- /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 0ca369b12a882b49a1fef92fc6322e4ddc3d73f6..f157f07b115b9b8563a21a8db3d5d95262a2831f 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 0000000000000000000000000000000000000000..0873f64eb99c4c6a6b48497198a36b723134bc64 --- /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 e9b1ae75699672d582ea9e1913c5edc9d844f1f3..fc8e8d55a15077020e26a11830f1da9c7b297497 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 0000000000000000000000000000000000000000..a6734c6ad15c290c0a167846681c603fe4b04305 --- /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 dd003bf5e7da749404a078ed8750c49f8f8fc74e..c133032348062fc7c3a8fd7ca5a9524ec4ba3255 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 0000000000000000000000000000000000000000..701c551f589dd8a3bd51d7e82522b6bae9f89496 --- /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 ae63cceef6747eca54c3f7151302526f45f0fec4..e4d230da89c2702e3e0f08a1f827c784d79602f6 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 0000000000000000000000000000000000000000..08e712a7d6f0741af57456184d1b62e4ce31e4da --- /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 fd4f4e62ce724731e2d745ebef781fd9e43c35ac..c099e9d058a2dbc2713e2ac8122788f7f134e6b6 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 1d63d309625ac65cab5cc2031ed4b19912944ee1..4d9ff9054bf118110ed916107d376b4c9bfa2f56 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 48d6689a667fb6e161990b5777e6c825fe928c7d..8e5ecffe33121eb1a0b97b2fc69b1cc1e0ea1a73 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 6ed56aef0a76cb71a8f1a8b3e5064e251a06cab7..33f25df260c460b28bd81cd886828c6215da29d2 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 b40986abc99fa6ec18cd76f75b95564101f237b9..db0ac699f66219698e6e840eac59fc4da02ca448 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 3cb36272646db4e673c3e4325cd682a8ef714cba..f372a4cc06baa89920db4258d09b235d8a31f803 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 0bf1800ba4b0397456139551055bab32f0693212..0839fbb10cf149b90c67759b1d6d6ea484684562 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 18916a934565c2863332a28e7c92ec275589734a..ccb180f5aebccd6c3ca378b5796fbe0cbedc3e9b 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 248501b53e01629831f5dfc6ac08b5490f3abc1b..7c2068a2f92c2aca8a8b4e1c8660f8ed34499012 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 c361763f47de97d1aa14f6fd751f72497886584a..ad9772c9db7383665f4cdb06bc0f716c053e0d9a 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 19ad2f2b3760e74cb30da21dfe5e234c93c8fdff..f335e623b30c33d8786f7ed46f91aa900a79da69 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 85b0877990b887a896b187e29d87754afbf01fc6..fe393182a5bcb090a8847e57ab48a1ca0bb83f64 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 038fe7ed37a761c3322e0b6940a384edde375dd6..e1790d81c02bbdaf3926b571996c657715eb90bf 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 abb5f5462402495771a4cbbf3f9a06f8cbc6fa3a..e0da1bca3b289b44459282bec0659e5bc8c6e930 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 df3a1a589283c5283412fbdad33a7b627c70347e..4b400f110158689b0688af04c0cd9d91dddc3a8f 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 82a38f9cc549198bbf19469a54a5e87215dccc0c..638d1d13d84377412e0a8d101b944a4840f8071f 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 91461303b1e81761b6b39aa1f9c2304ebfffe471..aaffd003094eac80ca2850ced1f8ea635b777cf7 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 87a337f8d6f944c7f7d84bc962bd743a2cd07412..b49611e58cfa7d8fcd3bcef456346f5a8a51e6cf 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 965b2c48fcdc0bcf0983f5bf297ded699649bcf0..8639a141e2c556c9eead096f8986af96001a88c6 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 0d1c42ba0f1daa64651d60ecfe202f3909c82ac4..e01e0265628cd47da763763951d483c78b83de41 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 0c232d94e8c6fa05e958b22c40fedcded342d7fd..81be20179bb7bd205851c81873d76508ddede41c 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 a7893f15718a4a97015d14b999c6e68b417c6671..6a788122cdec0e5660ec73ca57c03eb3991c0dad 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 353ffedd50fed75474faf34ec8e25bfb5931b3b2..727e2e5eaa100cf7614ce77fc292145c2f3ea550 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 92899d54c079f3a76d1733425c776cddb6888bed..86b8dd09b59bebb312f7a07bfc9aa8ccb2a1d9a9 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 8b6c618684744fa285a0d0fa3df08a0fdbd0f6c3..da7c179ee8ab1b5261ca59fdc4a071ddd2f3dab0 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 d5cf16730cb402c5c2cd90c27aedd04f983a4056..78f40466a4e12333a2c4ff9682e5470af5d29d87 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 52b878ecbeb4ffa9ab2c765757d403473c43abaa..5babecd4591301de842bfa474740363e3c470579 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 969733f85374d9a1f223d708058d272842d42fa3..d85dd2ffba3964a7e2a25d7f9dcf8a42e8e43e0f 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 caaedb63d113c09130041ae49c5472ad4bee0b83..03952e7cc5c52e1b4e2bf7265b4d8846c5b284d9 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 9ef59d474de0c264e2aad572c44adbf83079be07..9c7f93537da32a3128525f68ddc198b92d5bab20 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 44a8279540296e0f1db25a3efd2127a6251d2338..b94529ce2b7adf6e60941f7b61f4c0f7515e0da7 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 8c3b0643232718c93bd079eb66926ea499875203..6ca7c52e73de1385c292571238e82c33753383bf 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 40ad8e0fafd338d18ed9cef6b0043f6017952438..6c034e791f172a91fcdeab63af89e893a824579c 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 c51cf02ee00e5ef93180903ac9533fbdbfb0a4d4..4a311a80b8f81bf9741db02ac28fbcfc0327e281 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 73a3535cbd0559dd0766c7575ef5a3032236a877..76be431af49f477f3effded46169a53cd3e06055 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 6cbec2e5e562d1e9df4f01189a1a5342b7bf6d90..1ff989839f498cbea367d9888940fab63b46c959 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 46447c29c2955303241429a57a8882caf8cdcc78..7e5218ebde9ac3dbee80b0558b0143063ff35cd7 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 1c436e08daacb6635a03dc875f9fc72f2473f49d..fca92c923abb24afff961f8fb5fa15e0bf1b0335 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);