From ac65ecab7c38230607f72b773c26556dbfe833e3 Mon Sep 17 00:00:00 2001
From: Rick Waldron <waldron.rick@gmail.com>
Date: Thu, 19 Apr 2018 10:11:50 -0400
Subject: [PATCH] Atomics: updates to tests

---
 harness/testTypedArray.js                     |  3 +
 test/built-ins/Atomics/Symbol.toStringTag.js  |  2 +-
 test/built-ins/Atomics/add/bad-range.js       | 13 ++-
 test/built-ins/Atomics/add/good-views.js      | 13 ++-
 test/built-ins/Atomics/add/non-views.js       |  2 +-
 .../Atomics/add/nonshared-int-views.js        | 17 ++--
 .../Atomics/add/shared-nonint-views.js        | 14 ++-
 test/built-ins/Atomics/and/bad-range.js       | 13 ++-
 test/built-ins/Atomics/and/good-views.js      | 13 ++-
 test/built-ins/Atomics/and/non-views.js       |  2 +-
 .../Atomics/and/nonshared-int-views.js        | 19 ++--
 .../Atomics/and/shared-nonint-views.js        | 14 ++-
 .../Atomics/compareExchange/bad-range.js      | 13 ++-
 .../Atomics/compareExchange/good-views.js     | 20 ++---
 .../Atomics/compareExchange/non-views.js      |  2 +-
 .../compareExchange/nonshared-int-views.js    | 19 ++--
 .../compareExchange/shared-nonint-views.js    | 14 ++-
 test/built-ins/Atomics/exchange/bad-range.js  | 13 ++-
 test/built-ins/Atomics/exchange/good-views.js | 13 ++-
 test/built-ins/Atomics/exchange/non-views.js  |  2 +-
 .../Atomics/exchange/nonshared-int-views.js   | 19 ++--
 .../Atomics/exchange/shared-nonint-views.js   | 14 ++-
 .../Atomics/isLockFree/corner-cases.js        | 11 +--
 test/built-ins/Atomics/isLockFree/value.js    | 57 ++++++------
 test/built-ins/Atomics/load/bad-range.js      | 13 ++-
 test/built-ins/Atomics/load/good-views.js     | 12 +--
 test/built-ins/Atomics/load/non-views.js      |  2 +-
 .../Atomics/load/nonshared-int-views.js       | 14 +--
 .../Atomics/load/shared-nonint-views.js       | 15 ++--
 test/built-ins/Atomics/or/bad-range.js        | 13 ++-
 test/built-ins/Atomics/or/good-views.js       | 12 +--
 test/built-ins/Atomics/or/non-views.js        |  2 +-
 .../Atomics/or/nonshared-int-views.js         | 19 ++--
 .../Atomics/or/shared-nonint-views.js         | 12 ++-
 test/built-ins/Atomics/store/bad-range.js     | 13 ++-
 test/built-ins/Atomics/store/good-views.js    | 22 ++---
 test/built-ins/Atomics/store/non-views.js     |  2 +-
 .../Atomics/store/nonshared-int-views.js      | 19 ++--
 .../Atomics/store/shared-nonint-views.js      | 13 ++-
 test/built-ins/Atomics/sub/bad-range.js       | 13 ++-
 test/built-ins/Atomics/sub/good-views.js      | 13 ++-
 test/built-ins/Atomics/sub/non-views.js       |  2 +-
 .../Atomics/sub/nonshared-int-views.js        | 19 ++--
 .../Atomics/sub/shared-nonint-views.js        | 13 ++-
 .../Atomics/wait/cannot-suspend-throws.js     |  9 +-
 test/built-ins/Atomics/wait/did-timeout.js    | 16 ++--
 .../Atomics/wait/false-for-timeout-agent.js   | 68 +++++++++++++++
 .../Atomics/wait/false-for-timeout.js         | 57 +++++-------
 test/built-ins/Atomics/wait/good-views.js     |  8 +-
 .../built-ins/Atomics/wait/nan-for-timeout.js | 12 ++-
 .../Atomics/wait/negative-index-throws.js     | 18 ++--
 .../Atomics/wait/negative-timeout-agent.js    | 33 +++++++
 .../Atomics/wait/negative-timeout.js          | 25 ++----
 .../Atomics/wait/no-spurious-wakeup.js        |  5 +-
 .../wait/non-int32-typedarray-throws.js       |  2 +-
 .../wait/non-shared-bufferdata-throws.js      |  6 +-
 .../Atomics/wait/not-a-typedarray-throws.js   | 11 ++-
 .../Atomics/wait/not-an-object-throws.js      | 30 +++++--
 .../Atomics/wait/null-bufferdata-throws.js    |  6 +-
 .../Atomics/wait/null-for-timeout-agent.js    | 68 +++++++++++++++
 .../Atomics/wait/null-for-timeout.js          | 59 +++++--------
 .../Atomics/wait/object-for-timeout-agent.js  | 75 ++++++++++++++++
 .../Atomics/wait/object-for-timeout.js        | 66 +++++++-------
 .../Atomics/wait/out-of-range-index-throws.js | 15 +++-
 ...oisoned-object-for-timeout-throws-agent.js | 74 ++++++++++++++++
 .../poisoned-object-for-timeout-throws.js     | 72 ++++++----------
 .../wait/symbol-for-index-throws-agent.js     | 86 +++++++++++++++++++
 .../Atomics/wait/symbol-for-index-throws.js   | 57 +++++++-----
 .../wait/symbol-for-timeout-throws-agent.js   | 59 +++++++++++++
 .../Atomics/wait/symbol-for-timeout-throws.js | 65 +++++++-------
 .../wait/symbol-for-value-throws-agent.js     | 76 ++++++++++++++++
 .../Atomics/wait/symbol-for-value-throws.js   | 50 ++++++-----
 .../Atomics/wait/true-for-timeout-agent.js    | 68 +++++++++++++++
 .../Atomics/wait/true-for-timeout.js          | 55 +++++-------
 .../Atomics/wait/undefined-for-timeout.js     |  5 +-
 .../wait/undefined-index-defaults-to-zero.js  |  9 +-
 .../built-ins/Atomics/wait/value-not-equal.js | 13 +--
 .../wait/wait-index-value-not-equal.js        |  8 +-
 .../waitlist-order-of-operations-is-fifo.js   | 22 ++---
 .../Atomics/wait/was-woken-before-timeout.js  | 58 +++++++------
 test/built-ins/Atomics/wait/was-woken.js      | 20 ++---
 test/built-ins/Atomics/wake/bad-range.js      |  6 +-
 test/built-ins/Atomics/wake/counts.js         |  2 +-
 test/built-ins/Atomics/wake/good-views.js     |  4 +-
 test/built-ins/Atomics/wake/missing-count.js  |  2 +-
 test/built-ins/Atomics/wake/negative-count.js |  2 +-
 .../Atomics/wake/negative-index-throws.js     |  2 +-
 .../wake/non-int32-typedarray-throws.js       |  2 +-
 .../wake/non-shared-bufferdata-throws.js      |  2 +-
 test/built-ins/Atomics/wake/non-views.js      |  2 +-
 .../Atomics/wake/nonshared-int-views.js       | 20 ++---
 .../Atomics/wake/not-a-typedarray-throws.js   |  6 +-
 .../Atomics/wake/not-an-object-throws.js      | 30 +++++--
 .../Atomics/wake/null-bufferdata-throws.js    |  6 +-
 .../Atomics/wake/out-of-range-index-throws.js | 14 ++-
 .../Atomics/wake/shared-nonint-views.js       | 15 ++--
 .../Atomics/wake/symbol-for-index-throws.js   | 61 +++++++------
 .../Atomics/wake/undefined-for-count.js       |  2 +-
 .../wake/undefined-index-defaults-to-zero.js  |  2 +-
 .../built-ins/Atomics/wake/wake-all-on-loc.js | 11 ++-
 test/built-ins/Atomics/wake/wake-all.js       | 11 ++-
 test/built-ins/Atomics/wake/wake-in-order.js  |  5 +-
 test/built-ins/Atomics/wake/wake-nan.js       |  5 +-
 test/built-ins/Atomics/wake/wake-one.js       | 14 +--
 test/built-ins/Atomics/wake/wake-two.js       | 14 +--
 test/built-ins/Atomics/wake/wake-zero.js      | 19 ++--
 test/built-ins/Atomics/xor/bad-range.js       | 11 ++-
 test/built-ins/Atomics/xor/good-views.js      | 12 +--
 test/built-ins/Atomics/xor/non-views.js       |  2 +-
 .../Atomics/xor/nonshared-int-views.js        | 19 ++--
 .../Atomics/xor/shared-nonint-views.js        | 14 ++-
 111 files changed, 1418 insertions(+), 850 deletions(-)
 create mode 100644 test/built-ins/Atomics/wait/false-for-timeout-agent.js
 create mode 100644 test/built-ins/Atomics/wait/negative-timeout-agent.js
 create mode 100644 test/built-ins/Atomics/wait/null-for-timeout-agent.js
 create mode 100644 test/built-ins/Atomics/wait/object-for-timeout-agent.js
 create mode 100644 test/built-ins/Atomics/wait/poisoned-object-for-timeout-throws-agent.js
 create mode 100644 test/built-ins/Atomics/wait/symbol-for-index-throws-agent.js
 create mode 100644 test/built-ins/Atomics/wait/symbol-for-timeout-throws-agent.js
 create mode 100644 test/built-ins/Atomics/wait/symbol-for-value-throws-agent.js
 create mode 100644 test/built-ins/Atomics/wait/true-for-timeout-agent.js

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