diff --git a/test/built-ins/Atomics/wait/cannot-suspend-throws.js b/test/built-ins/Atomics/wait/cannot-suspend-throws.js
new file mode 100644
index 0000000000000000000000000000000000000000..c5ec687b29841d35f9505d49eb24e128a235eea2
--- /dev/null
+++ b/test/built-ins/Atomics/wait/cannot-suspend-throws.js
@@ -0,0 +1,25 @@
+// 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: >
+  Atomics.wait throws if agent cannot be suspended, CanBlock is false
+info: |
+  Assuming [[CanBlock]] is false for the main host.
+
+  Atomics.wait( typedArray, index, value, timeout )
+
+  ... (after args validation)
+  6. Let B be AgentCanSuspend().
+  7. If B is false, throw a TypeError exception.
+  ...
+features: [Atomics, SharedArrayBuffer, TypedArray]
+---*/
+
+var sab = new SharedArrayBuffer(4);
+var int32Array = new Int32Array(sab);
+  
+assert.throws(TypeError, function() {
+  Atomics.wait(int32Array, 0, 0, 0);
+});
diff --git a/test/built-ins/Atomics/wait/datablock-bufferdata-throws.js b/test/built-ins/Atomics/wait/datablock-bufferdata-throws.js
index 88898db582672bef1203703189e758989cefd394..640550c0b20827951daf9370cd24a196684d8987 100644
--- a/test/built-ins/Atomics/wait/datablock-bufferdata-throws.js
+++ b/test/built-ins/Atomics/wait/datablock-bufferdata-throws.js
@@ -2,7 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-atomics.wait
-description:
+description: >
   Throws a TypeError if typedArray.buffer is not a SharedArrayBuffer
 info: |
   Atomics.wait( typedArray, index, value, timeout )
diff --git a/test/built-ins/Atomics/wait/index-symbol-throws.js b/test/built-ins/Atomics/wait/index-symbol-throws.js
index 497c0788e6bf5b5827bf5504c3671e8a54d2d164..e391fcc4c3f4b3ce2108687d238dfcd7ab86ac9a 100644
--- a/test/built-ins/Atomics/wait/index-symbol-throws.js
+++ b/test/built-ins/Atomics/wait/index-symbol-throws.js
@@ -2,7 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-atomics.wait
-description:
+description: >
   Throws a TypeError if index arg can not be converted to an Integer
 info: |
   Atomics.wait( typedArray, index, value, timeout )
diff --git a/test/built-ins/Atomics/wait/missing-typedarrayname-throws.js b/test/built-ins/Atomics/wait/missing-typedarrayname-throws.js
index db301c5971d362703caa030e204b0133e040425d..7c1fbae1bc9072249e0357b1a4914b2a16516b4c 100644
--- a/test/built-ins/Atomics/wait/missing-typedarrayname-throws.js
+++ b/test/built-ins/Atomics/wait/missing-typedarrayname-throws.js
@@ -2,7 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-atomics.wait
-description:
+description: >
   Throws a TypeError if the typedArray arg is not a TypedArray object
 info: |
   Atomics.wait( typedArray, index, value, timeout )
diff --git a/test/built-ins/Atomics/wait/negative-index-throws.js b/test/built-ins/Atomics/wait/negative-index-throws.js
index 7a8f2310e0bb55b52e9219662b78a0fb3bc5160f..d46d1addba173a2fdcda134de718c73b1dc5764f 100644
--- a/test/built-ins/Atomics/wait/negative-index-throws.js
+++ b/test/built-ins/Atomics/wait/negative-index-throws.js
@@ -2,7 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-atomics.wait
-description:
+description: >
   Throws a RangeError is index < 0
 info: |
   Atomics.wait( typedArray, index, value, timeout )
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 bcb67dd52e159033baf59892a51ac64be78afb38..39d564586ccc5844d4f40de79cfe38d27e780c8d 100644
--- a/test/built-ins/Atomics/wait/not-an-object-throws.js
+++ b/test/built-ins/Atomics/wait/not-an-object-throws.js
@@ -2,7 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-atomics.wait
-description:
+description: >
   Throws a TypeError if typedArray arg is not an Object
 info: |
   Atomics.wait( typedArray, index, value, timeout )
diff --git a/test/built-ins/Atomics/wait/null-bufferdata-throws.js b/test/built-ins/Atomics/wait/null-bufferdata-throws.js
index 804e0b4d3ef3c83b504d95bb27e77e12937e5fc5..9dc142b0c27f7ab6826636422e27293c4429a39d 100644
--- a/test/built-ins/Atomics/wait/null-bufferdata-throws.js
+++ b/test/built-ins/Atomics/wait/null-bufferdata-throws.js
@@ -2,7 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-atomics.wait
-description:
+description: >
   A null value for bufferData throws a TypeError
 info: |
   Atomics.wait( typedArray, index, value, timeout )
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 3274028197f6e6dbd00032012aed6e085cb5d0e9..c0eb33eb426ea31f857a926f6effbd255ada6b65 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
@@ -2,7 +2,7 @@
 // This code is governed by the BSD license found in the LICENSE file.
 /*---
 esid: sec-atomics.wait
-description:
+description: >
   An undefined index arg should translate to 0
 info: |
   Atomics.wait( typedArray, index, value, timeout )
diff --git a/test/built-ins/Atomics/wait/was-woken-before-timeout.js b/test/built-ins/Atomics/wait/was-woken-before-timeout.js
new file mode 100644
index 0000000000000000000000000000000000000000..844dc2fe827ce6a7a7c0aa3dbabf1ff5aa06cbb8
--- /dev/null
+++ b/test/built-ins/Atomics/wait/was-woken-before-timeout.js
@@ -0,0 +1,55 @@
+// 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: >
+  Test that Atomics.wait returns the right result when it was awoken before
+  a timeout
+info: |
+  Atomics.wait( typedArray, index, value, timeout )
+
+  2.Let i be ? ValidateAtomicAccess(typedArray, index).
+    ...
+      2.Let accessIndex be ? ToIndex(requestIndex).
+
+      9.If IsSharedArrayBuffer(buffer) is false, throw a TypeError exception.
+        ...
+          3.If bufferData is a Data Block, return false
+
+          If value is undefined, then
+          Let index be 0.
+features: [Atomics, SharedArrayBuffer, TypedArray]
+---*/
+
+var timeout = 20000;
+$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);
+  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.sameValue(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;
+  }
+  
\ No newline at end of file
diff --git a/test/built-ins/Atomics/wait/was-woken.js b/test/built-ins/Atomics/wait/was-woken.js
index 266c4ee0e39ff149e653ef4adccc2c9ae6305070..56eeeade10a1ce50950f0682373526be694f3f63 100644
--- a/test/built-ins/Atomics/wait/was-woken.js
+++ b/test/built-ins/Atomics/wait/was-woken.js
@@ -25,7 +25,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;
 }