// 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 --expose-gc --no-stress-opt

load("test/mjsunit/harmony/atomics-waitasync-helpers.js");

const script = `
  onmessage = function() {
    (function() {
      const sab = new SharedArrayBuffer(16);
      const i32a = new Int32Array(sab);
      // Create a waiter with a timeout.
      const result = Atomics.waitAsync(i32a, 0, 0, 1);
      result.value.then(
        (value) => { postMessage("result " + value); },
        () => { postMessage("unexpected"); });
      })();
    // Make sure sab, ia32 and result get gc()d.
    gc();

    // Even if the buffer went out of scope, we keep the waitAsync alive so that it can still time out.
    let resolved = false;
    const sab2 = new SharedArrayBuffer(16);
    const i32a2 = new Int32Array(sab2);
    const result2 = Atomics.waitAsync(i32a2, 0, 0);
    result2.value.then(
      (value) => { postMessage("result2 " + value); },
      () => { postMessage("unexpected"); });

    const notify_return_value = Atomics.notify(i32a2, 0);
    postMessage("notify return value " + notify_return_value);
  }`;

const expected_messages = [
  "notify return value 1",
  "result2 ok",
  "result timed-out"
];

runTestWithWorker(script, expected_messages);
