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);