From a43777651c4f5f257dee02edaf44426e190cde7c Mon Sep 17 00:00:00 2001
From: Rick Waldron <waldron.rick@gmail.com>
Date: Tue, 24 Apr 2018 14:11:32 -0400
Subject: [PATCH] Atomics.wait: additional coverage. Completes gh-1466

---
 test/built-ins/Atomics/wait/bad-range.js      | 31 ++++++++++
 .../waiterlist-block-indexedposition-wake.js  | 62 +++++++++++++++++++
 ...waiterlist-order-of-operations-is-fifo.js} |  0
 3 files changed, 93 insertions(+)
 create mode 100644 test/built-ins/Atomics/wait/bad-range.js
 create mode 100644 test/built-ins/Atomics/wait/waiterlist-block-indexedposition-wake.js
 rename test/built-ins/Atomics/wait/{waitlist-order-of-operations-is-fifo.js => waiterlist-order-of-operations-is-fifo.js} (100%)

diff --git a/test/built-ins/Atomics/wait/bad-range.js b/test/built-ins/Atomics/wait/bad-range.js
new file mode 100644
index 0000000000..87203dcc29
--- /dev/null
+++ b/test/built-ins/Atomics/wait/bad-range.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 Mozilla Corporation.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-atomics.wake
+description: >
+  Test range checking of Atomics.wake on arrays that allow atomic operations
+info: |
+  Atomics.wait( typedArray, index, value, timeout )
+
+  1. Let buffer be ? ValidateSharedIntegerTypedArray(typedArray, true).
+  ...
+
+includes: [testAtomics.js, testTypedArray.js]
+features: [ArrayBuffer, arrow-function, Atomics, BigInt, DataView, for-of, let, SharedArrayBuffer, TypedArray]
+---*/
+
+var sab = new SharedArrayBuffer(8);
+var views = [Int32Array];
+
+if (typeof BigInt !== "undefined") {
+  views.push(BigInt64Array);
+  views.push(BigUint64Array);
+}
+
+testWithTypedArrayConstructors(function(TA) {
+  let view = new TA(sab);
+  testWithAtomicsOutOfBoundsIndices(function(IdxGen) {
+    assert.throws(RangeError, () => Atomics.wake(view, IdxGen(view), 0)); // Even with waking zero
+  });
+}, views);
diff --git a/test/built-ins/Atomics/wait/waiterlist-block-indexedposition-wake.js b/test/built-ins/Atomics/wait/waiterlist-block-indexedposition-wake.js
new file mode 100644
index 0000000000..8f9c1cfade
--- /dev/null
+++ b/test/built-ins/Atomics/wait/waiterlist-block-indexedposition-wake.js
@@ -0,0 +1,62 @@
+// Copyright (C) 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-atomics.wait
+description: >
+  Get the correct WaiterList
+info: |
+  Atomics.wait( typedArray, index, value, timeout )
+
+  ...
+  11. Let WL be GetWaiterList(block, indexedPosition).
+  ...
+
+
+  GetWaiterList( block, i )
+
+  ...
+  4. Return the WaiterList that is referenced by the pair (block, i).
+
+features: [Atomics, SharedArrayBuffer, TypedArray]
+---*/
+function getReport() {
+  var r;
+  while ((r = $262.agent.getReport()) == null) {
+    $262.agent.sleep(10);
+  }
+  return r;
+}
+
+$262.agent.start(`
+$262.agent.receiveBroadcast(function(sab) {
+  var i32 = new Int32Array(sab);
+
+  // Wait on index 0
+  Atomics.wait(i32, 0, 0, 200);
+  $262.agent.report("fail");
+  $262.agent.leaving();
+});
+`);
+
+$262.agent.start(`
+$262.agent.receiveBroadcast(function(sab) {
+  var i32 = new Int32Array(sab);
+
+  // Wait on index 2
+  Atomics.wait(i32, 2, 0, 200);
+  $262.agent.report("pass");
+  $262.agent.leaving();
+});
+`);
+
+var length = 4 * Int32Array.BYTES_PER_ELEMENT;
+var i32 = new Int32Array(new SharedArrayBuffer(length));
+
+$262.agent.broadcast(i32.buffer);
+$262.agent.sleep(10);
+
+// Wake index 2
+Atomics.wake(i32, 2, 1);
+
+assert.sameValue(getReport(), "pass");
diff --git a/test/built-ins/Atomics/wait/waitlist-order-of-operations-is-fifo.js b/test/built-ins/Atomics/wait/waiterlist-order-of-operations-is-fifo.js
similarity index 100%
rename from test/built-ins/Atomics/wait/waitlist-order-of-operations-is-fifo.js
rename to test/built-ins/Atomics/wait/waiterlist-order-of-operations-is-fifo.js
-- 
GitLab