| // Copyright 2020 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Flags: --harmony-sharedarraybuffer --harmony-atomics-waitasync |
| |
| load("test/mjsunit/harmony/atomics-waitasync-helpers.js"); |
| |
| const script = ` |
| const sab = new SharedArrayBuffer(16); |
| const i32a = new Int32Array(sab); |
| |
| onmessage = function() { |
| // Create a waiter with a long timeout. |
| const result_slow = Atomics.waitAsync(i32a, 0, 0, 200000); |
| // Create a waiter with a short timeout. |
| const result_fast = Atomics.waitAsync(i32a, 0, 0, 1); |
| |
| result_slow.value.then( |
| (value) => { postMessage("slow " + value); }, |
| () => { postMessage("unexpected"); }); |
| |
| result_fast.value.then( |
| (value) => { |
| postMessage("fast " + value); |
| // Wake up the waiter with the long time out. |
| const notify_return_value = Atomics.notify(i32a, 0, 1); |
| postMessage("notify return value " + notify_return_value); |
| }, |
| () => { postMessage("unexpected"); }); |
| }`; |
| |
| const expected_messages = [ |
| "fast timed-out", |
| "notify return value 1", |
| "slow ok" |
| ]; |
| |
| runTestWithWorker(script, expected_messages); |