From 5d6899522ad913003f83e1127f84f5d068112460 Mon Sep 17 00:00:00 2001 From: Amal Hussein <6717823+nomadtechie@users.noreply.github.com> Date: Mon, 19 Mar 2018 20:06:53 -0400 Subject: [PATCH] additional test coverage for atomics.wait (#1497) --- test/built-ins/Atomics/wait/bad-range.js | 25 ------- test/built-ins/Atomics/wait/did-timeout.js | 1 + .../Atomics/wait/false-for-timeout.js | 2 +- .../Atomics/wait/negative-index-throws.js | 1 + .../wait/non-int32-typedarray-throws.js | 54 +++++++++++++++ test/built-ins/Atomics/wait/non-views.js | 14 ---- ...rows.js => nonshared-bufferdata-throws.js} | 0 .../Atomics/wait/nonshared-int-views.js | 25 ------- ...e-throws.js => not-a-typedarray-throws.js} | 0 .../Atomics/wait/out-of-range-index-throws.js | 28 ++++++++ .../poisoned-object-for-timeout-throws.js | 17 +++-- .../Atomics/wait/shared-nonint-views.js | 22 ------ ...l-throws.js => symbol-for-index-throws.js} | 1 + ...throws.js => symbol-for-timeout-throws.js} | 23 ++++--- test/built-ins/Atomics/wait/timeout-nan.js | 62 ----------------- .../Atomics/wait/timeout-null-or-false.js | 68 ------------------- .../{timeout-true.js => true-for-timeout.js} | 5 +- ...-undefined.js => undefined-for-timeout.js} | 0 .../wait/undefined-index-defaults-to-zero.js | 3 +- .../wait/wait-index-value-not-equal.js | 52 ++++++++++++++ 20 files changed, 164 insertions(+), 239 deletions(-) delete mode 100644 test/built-ins/Atomics/wait/bad-range.js create mode 100644 test/built-ins/Atomics/wait/non-int32-typedarray-throws.js delete mode 100644 test/built-ins/Atomics/wait/non-views.js rename test/built-ins/Atomics/wait/{datablock-bufferdata-throws.js => nonshared-bufferdata-throws.js} (100%) delete mode 100644 test/built-ins/Atomics/wait/nonshared-int-views.js rename test/built-ins/Atomics/wait/{missing-typedarrayname-throws.js => not-a-typedarray-throws.js} (100%) create mode 100644 test/built-ins/Atomics/wait/out-of-range-index-throws.js delete mode 100644 test/built-ins/Atomics/wait/shared-nonint-views.js rename test/built-ins/Atomics/wait/{index-symbol-throws.js => symbol-for-index-throws.js} (99%) rename test/built-ins/Atomics/wait/{timeout-symbol-throws.js => symbol-for-timeout-throws.js} (68%) delete mode 100644 test/built-ins/Atomics/wait/timeout-nan.js delete mode 100644 test/built-ins/Atomics/wait/timeout-null-or-false.js rename test/built-ins/Atomics/wait/{timeout-true.js => true-for-timeout.js} (81%) rename test/built-ins/Atomics/wait/{timeout-undefined.js => undefined-for-timeout.js} (100%) create mode 100644 test/built-ins/Atomics/wait/wait-index-value-not-equal.js diff --git a/test/built-ins/Atomics/wait/bad-range.js b/test/built-ins/Atomics/wait/bad-range.js deleted file mode 100644 index 680caf7bac..0000000000 --- a/test/built-ins/Atomics/wait/bad-range.js +++ /dev/null @@ -1,25 +0,0 @@ -// 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 range checking of Atomics.wait on arrays that allow atomic operations -includes: [testAtomics.js, testTypedArray.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, TypedArray, arrow-function, let, for-of] ----*/ - -var sab = new SharedArrayBuffer(8); -var views = [Int32Array]; - -if (typeof BigInt !== "undefined") { - views.push(BigInt64Array); -} - -testWithTypedArrayConstructors(function(View) { - let view = new View(sab); - testWithAtomicsOutOfBoundsIndices(function(IdxGen) { - let Idx = IdxGen(view); - assert.throws(RangeError, () => Atomics.wait(view, Idx, 10, 0)); // Even with zero timeout - }); -}, views); diff --git a/test/built-ins/Atomics/wait/did-timeout.js b/test/built-ins/Atomics/wait/did-timeout.js index 3635d6728b..337a45bbc9 100644 --- a/test/built-ins/Atomics/wait/did-timeout.js +++ b/test/built-ins/Atomics/wait/did-timeout.js @@ -27,6 +27,7 @@ $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) diff --git a/test/built-ins/Atomics/wait/false-for-timeout.js b/test/built-ins/Atomics/wait/false-for-timeout.js index 77d7d59810..593fd9da15 100644 --- a/test/built-ins/Atomics/wait/false-for-timeout.js +++ b/test/built-ins/Atomics/wait/false-for-timeout.js @@ -12,7 +12,7 @@ info: | ... Null Return +0. Boolean If argument is true, return 1. If argument is false, return +0. -features: [ Atomics ] +features: [ Atomics, SharedArrayBuffer, TypedArray ] includes: [ atomicsHelper.js ] ---*/ diff --git a/test/built-ins/Atomics/wait/negative-index-throws.js b/test/built-ins/Atomics/wait/negative-index-throws.js index d46d1addba..2d08dc40c1 100644 --- a/test/built-ins/Atomics/wait/negative-index-throws.js +++ b/test/built-ins/Atomics/wait/negative-index-throws.js @@ -1,5 +1,6 @@ // 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: > diff --git a/test/built-ins/Atomics/wait/non-int32-typedarray-throws.js b/test/built-ins/Atomics/wait/non-int32-typedarray-throws.js new file mode 100644 index 0000000000..12c1203ccd --- /dev/null +++ b/test/built-ins/Atomics/wait/non-int32-typedarray-throws.js @@ -0,0 +1,54 @@ +// 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 typedArray arg is not an Int32Array +info: | + Atomics.wait( typedArray, index, value, timeout ) + + 1.Let buffer be ? ValidateSharedIntegerTypedArray(typedArray, true). + ... + 5.If onlyInt32 is true, then + If typeName is not "Int32Array", throw a TypeError exception. +features: [ Atomics, TypedArray ] +---*/ + +var poisoned = { + valueOf: function() { + throw new Test262Error("should not evaluate this code"); + } +}; + +assert.throws(TypeError, function() { + Atomics.wait(new Float64Array(), poisoned, poisoned, poisoned); +}, 'Float64Array'); + +assert.throws(TypeError, function() { + Atomics.wait(new Float32Array(), poisoned, poisoned, poisoned); +}, 'Float32Array'); + +assert.throws(TypeError, function() { + Atomics.wait(new Int16Array(), poisoned, poisoned, poisoned); +}, 'Int16Array'); + +assert.throws(TypeError, function() { + Atomics.wait(new Int8Array(), poisoned, poisoned, poisoned); +}, 'Int8Array'); + +assert.throws(TypeError, function() { + Atomics.wait(new Uint32Array(), poisoned, poisoned, poisoned); +}, 'Uint32Array'); + +assert.throws(TypeError, function() { + Atomics.wait(new Uint16Array(), poisoned, poisoned, poisoned); +}, 'Uint16Array'); + +assert.throws(TypeError, function() { + Atomics.wait(new Uint8Array(), poisoned, poisoned, poisoned); +}, 'Uint8Array'); + +assert.throws(TypeError, function() { + Atomics.wait(new Uint8ClampedArray(), poisoned, poisoned, poisoned); +}, 'Uint8ClampedArray'); diff --git a/test/built-ins/Atomics/wait/non-views.js b/test/built-ins/Atomics/wait/non-views.js deleted file mode 100644 index 4da77da33f..0000000000 --- a/test/built-ins/Atomics/wait/non-views.js +++ /dev/null @@ -1,14 +0,0 @@ -// 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 Atomics.wait on view values other than TypedArrays -includes: [testAtomics.js] -features: [SharedArrayBuffer, ArrayBuffer, DataView, Atomics, arrow-function, let, for-of] ----*/ - -testWithAtomicsNonViewValues(function(view) { - assert.throws(TypeError, (() => Atomics.wait(view, 0, 0, 0))); // Even with zero timeout -}); diff --git a/test/built-ins/Atomics/wait/datablock-bufferdata-throws.js b/test/built-ins/Atomics/wait/nonshared-bufferdata-throws.js similarity index 100% rename from test/built-ins/Atomics/wait/datablock-bufferdata-throws.js rename to test/built-ins/Atomics/wait/nonshared-bufferdata-throws.js diff --git a/test/built-ins/Atomics/wait/nonshared-int-views.js b/test/built-ins/Atomics/wait/nonshared-int-views.js deleted file mode 100644 index add2f7b3ad..0000000000 --- a/test/built-ins/Atomics/wait/nonshared-int-views.js +++ /dev/null @@ -1,25 +0,0 @@ -// 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 Atomics.wait on non-shared integer TypedArrays -includes: [testTypedArray.js] -features: [Atomics, TypedArray] ----*/ - -var ab = new ArrayBuffer(16); - -var int_views = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array]; - -if (typeof BigInt !== "undefined") { - int_views.push(BigInt64Array); - int_views.push(BigUint64Array); -} - -testWithTypedArrayConstructors(function(View) { - var view = new View(ab); - - assert.throws(TypeError, (() => Atomics.wait(view, 0, 0, 0))); // Should fail even if waiting 0ms -}, int_views); diff --git a/test/built-ins/Atomics/wait/missing-typedarrayname-throws.js b/test/built-ins/Atomics/wait/not-a-typedarray-throws.js similarity index 100% rename from test/built-ins/Atomics/wait/missing-typedarrayname-throws.js rename to test/built-ins/Atomics/wait/not-a-typedarray-throws.js 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 new file mode 100644 index 0000000000..d14262605f --- /dev/null +++ b/test/built-ins/Atomics/wait/out-of-range-index-throws.js @@ -0,0 +1,28 @@ +// 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 RangeError if value of index arg is out of range +info: | + Atomics.wait( typedArray, index, value, timeout ) + + 2.Let i be ? ValidateAtomicAccess(typedArray, index). + ... + 2.Let accessIndex be ? ToIndex(requestIndex). + ... + 5. If accessIndex ≥ length, throw a RangeError exception. +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)); 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 e5305151b9..0ca369b12a 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 @@ -20,9 +20,6 @@ info: | features: [ Atomics ] ---*/ -var sab = new SharedArrayBuffer(4); -var int32Array = new Int32Array(sab); - function getReport() { var r; while ((r = $262.agent.getReport()) == null) { @@ -34,28 +31,30 @@ function getReport() { $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.constructor; + err = e.name; } - + $262.agent.report(err); $262.agent.leaving(); }) `); -var int32Array = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +var sab = new SharedArrayBuffer(4); +var int32Array = new Int32Array(sab); $262.agent.broadcast(int32Array.buffer); -$262.agent.sleep(150); +assert.sameValue(getReport(), 'TypeError'); -assert.sameValue(getReport(), TypeError); +assert.sameValue(Atomics.wake(int32Array, 0), 0); diff --git a/test/built-ins/Atomics/wait/shared-nonint-views.js b/test/built-ins/Atomics/wait/shared-nonint-views.js deleted file mode 100644 index 63cf092f38..0000000000 --- a/test/built-ins/Atomics/wait/shared-nonint-views.js +++ /dev/null @@ -1,22 +0,0 @@ -// 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 Atomics.wait on shared non-integer TypedArrays -includes: [testTypedArray.js] -features: [Atomics, TypedArray] ----*/ - -var sab = new SharedArrayBuffer(1024); - -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.wait(view, 0, 0, 0))); -}, other_views); diff --git a/test/built-ins/Atomics/wait/index-symbol-throws.js b/test/built-ins/Atomics/wait/symbol-for-index-throws.js similarity index 99% rename from test/built-ins/Atomics/wait/index-symbol-throws.js rename to test/built-ins/Atomics/wait/symbol-for-index-throws.js index e391fcc4c3..e9b1ae7569 100644 --- a/test/built-ins/Atomics/wait/index-symbol-throws.js +++ b/test/built-ins/Atomics/wait/symbol-for-index-throws.js @@ -1,5 +1,6 @@ // 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: > diff --git a/test/built-ins/Atomics/wait/timeout-symbol-throws.js b/test/built-ins/Atomics/wait/symbol-for-timeout-throws.js similarity index 68% rename from test/built-ins/Atomics/wait/timeout-symbol-throws.js rename to test/built-ins/Atomics/wait/symbol-for-timeout-throws.js index d8b2eadaeb..dd003bf5e7 100644 --- a/test/built-ins/Atomics/wait/timeout-symbol-throws.js +++ b/test/built-ins/Atomics/wait/symbol-for-timeout-throws.js @@ -9,12 +9,11 @@ info: | Atomics.wait( typedArray, index, value, timeout ) 4.Let q be ? ToNumber(timeout). -features: [Atomics, Symbol] + ... + Symbol Throw a TypeError exception. +features: [Atomics, SharedArrayBuffer, TypedArray, Symbol] ---*/ -var sab = new SharedArrayBuffer(4); -var int32Array = new Int32Array(sab); - function getReport() { var r; while ((r = $262.agent.getReport()) == null) { @@ -25,23 +24,25 @@ function getReport() { $262.agent.start( ` -$262.agent.receiveBroadcast(function (sab) { +$262.agent.receiveBroadcast(function (sab) { + + var int32Array = new Int32Array(sab); var err; - var s = Symbol(); try { - Atomics.wait(int32Array, 0, 0, s); + Atomics.wait(int32Array, 0, 0, Symbol('foo')); } catch(e) { - err = e.constructor; + err = e.name; } - + $262.agent.report(err); $262.agent.leaving(); }) `); -var int32Array = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT)); +var sab = new SharedArrayBuffer(4); +var int32Array = new Int32Array(sab); $262.agent.broadcast(int32Array.buffer); -assert.sameValue(getReport(), TypeError); +assert.sameValue(getReport(), 'TypeError'); diff --git a/test/built-ins/Atomics/wait/timeout-nan.js b/test/built-ins/Atomics/wait/timeout-nan.js deleted file mode 100644 index e2e781482d..0000000000 --- a/test/built-ins/Atomics/wait/timeout-nan.js +++ /dev/null @@ -1,62 +0,0 @@ -// 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: > - NaN timeout arg should result in an infinite timeout -info: | - Atomics.wait( typedArray, index, value, timeout ) - - 4.Let q be ? ToNumber(timeout). - ... - Undefined Return NaN. - 5.If q is NaN, let t be +∞, else let t be max(q, 0) -features: [ Atomics, SharedArrayBuffer, TypedArray ] ----*/ - -var NUMAGENT = 2; // Total number of agents started -var WAKEUP = 0; // Index all agents are waiting on -var WAKECOUNT = 2; // Total number of agents to wake up - -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)); // NaN => +Infinity - $262.agent.leaving(); -}) -`); - -$262.agent.start( - ` -$262.agent.receiveBroadcast(function (sab) { - var int32Array = new Int32Array(sab); - $262.agent.report("B " + Atomics.wait(int32Array, 0, 0)); // undefined => 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, WAKEUP, WAKECOUNT), WAKECOUNT); - -var sortedReports = []; -for (var i = 0; i < NUMAGENT; i++) { - sortedReports.push(getReport()); -} -sortedReports.sort(); - -assert.sameValue(sortedReports[0], "A ok"); -assert.sameValue(sortedReports[1], "B ok"); diff --git a/test/built-ins/Atomics/wait/timeout-null-or-false.js b/test/built-ins/Atomics/wait/timeout-null-or-false.js deleted file mode 100644 index 57004b8438..0000000000 --- a/test/built-ins/Atomics/wait/timeout-null-or-false.js +++ /dev/null @@ -1,68 +0,0 @@ -// 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 or 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. - Boolean If argument is true, return 1. If argument is false, return +0. -features: [Atomics] -includes: [atomicsHelper.js] ----*/ - -var NUMREPORTS = 4; // Expected reports output from running agents - -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("A " + Atomics.wait(int32Array, 0, 0, null)); // null => +0 - $262.agent.report(Date.now() - start); - $262.agent.leaving(); -}) -`); - -$262.agent.start( - ` -$262.agent.receiveBroadcast(function (sab) { - var int32Array = new Int32Array(sab); - var start = Date.now(); - $262.agent.report("B " + Atomics.wait(int32Array, 0, 0, false)); // false => +0 - $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); - - -var sortedReports = []; -for (var i = 0; i < NUMREPORTS; i++) { - sortedReports.push(getReport()); -} -sortedReports.sort(); - -assert.sameValue(sortedReports[2], 'A timed-out'); -assert.sameValue(sortedReports[3], 'B timed-out'); -assert(sortedReports[0] >= 0 && sortedReports[0] <= $ATOMICS_MAX_TIME_EPSILON, "timeout should be a min of 0ms and max of $ATOMICS_MAX_TIME_EPSILON"); -assert(sortedReports[1] >= 0 && sortedReports[1] <= $ATOMICS_MAX_TIME_EPSILON, "timeout should be a min of 0ms and max of $ATOMICS_MAX_TIME_EPSILON"); - -assert.sameValue(Atomics.wake(int32Array, 0), 0); diff --git a/test/built-ins/Atomics/wait/timeout-true.js b/test/built-ins/Atomics/wait/true-for-timeout.js similarity index 81% rename from test/built-ins/Atomics/wait/timeout-true.js rename to test/built-ins/Atomics/wait/true-for-timeout.js index 62391b5db2..8d91414d99 100644 --- a/test/built-ins/Atomics/wait/timeout-true.js +++ b/test/built-ins/Atomics/wait/true-for-timeout.js @@ -11,7 +11,7 @@ info: | 4.Let q be ? ToNumber(timeout). ... Boolean If argument is true, return 1. If argument is false, return +0. -features: [ Atomics ] +features: [ Atomics, SharedArrayBuffer, TypedArray ] includes: [atomicsHelper.js] ---*/ @@ -41,5 +41,8 @@ $262.agent.broadcast(int32Array.buffer); $262.agent.sleep(2); var r1 = getReport(); +var r2 = getReport(); 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/timeout-undefined.js b/test/built-ins/Atomics/wait/undefined-for-timeout.js similarity index 100% rename from test/built-ins/Atomics/wait/timeout-undefined.js rename to test/built-ins/Atomics/wait/undefined-for-timeout.js 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 c0eb33eb42..969adf747f 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 @@ -33,7 +33,8 @@ var sab = new SharedArrayBuffer(1024); var int32Array = new Int32Array(sab); $262.agent.broadcast(int32Array.buffer); -$262.agent.sleep(5); + +$262.agent.sleep(150); assert.sameValue(Atomics.wake(int32Array, 0), 1); // wake at index 0 assert.sameValue(Atomics.wake(int32Array, 0), 0); // wake again at index 0, and 0 agents should be woken 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 new file mode 100644 index 0000000000..797f36aff5 --- /dev/null +++ b/test/built-ins/Atomics/wait/wait-index-value-not-equal.js @@ -0,0 +1,52 @@ +// 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: > + Returns "not-equal" when value of index is not equal +info: | + Atomics.wait( typedArray, index, value, timeout ) + + 14.If v is not equal to w, then + a.Perform LeaveCriticalSection(WL). + b. Return the String "not-equal". + +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) { + var int32Array = new Int32Array(sab); + + $262.agent.report(Atomics.wait(int32Array, 0, 44, 100)); + + $262.agent.report(Atomics.wait(int32Array, 0, 251.4, 1000)); + + $262.agent.report(Atomics.wait(int32Array, 0, Infinity, 1000)); + + $262.agent.leaving(); +}) +`); + +var int32Array = new Int32Array(new SharedArrayBuffer(1024)); + +$262.agent.broadcast(int32Array.buffer); + +$262.agent.sleep(200); + + +assert.sameValue(getReport(), "not-equal"); +assert.sameValue(getReport(), "not-equal"); +assert.sameValue(getReport(), "not-equal"); + +assert.sameValue(Atomics.wake(int32Array, 0), 0); -- GitLab