test262/test/harness/atomicsHelper-safeBroadcast-getReport.js
2020-10-20 11:52:37 -04:00

54 lines
1.6 KiB
JavaScript

// Copyright (C) 2020 Rick Waldron. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
description: >
Testing $262.agent.* extensions
info: |
Including atomicsHelper.js will expose the functions:
- $262.agent.getReportAsync
- $262.agent.getReport
- $262.agent.safeBroadcastAsync
- $262.agent.safeBroadcast
- $262.agent.setTimeout
- $262.agent.tryYield (wrapper for $262.agent.sleep)
- $262.agent.trySleep (wrapper for $262.agent.sleep)
$262.agent.* relies on the presence of host defined agent capabilities
includes: [atomicsHelper.js]
features: [Atomics, SharedArrayBuffer]
---*/
const AGENT_READY_INDEX = 0;
const AGENT_WAIT_INDEX = 1;
$262.agent.start(`
$262.agent.receiveBroadcast((sab) => {
const i32a = new Int32Array(sab);
Atomics.add(i32a, ${AGENT_READY_INDEX}, 1);
$262.agent.report(Atomics.wait(i32a, ${AGENT_WAIT_INDEX}, 0, Infinity));
$262.agent.leaving();
});
`);
const i32a = new Int32Array(
new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT * 4)
);
$262.agent.safeBroadcast(i32a);
$262.agent.waitUntil(i32a, AGENT_READY_INDEX, 1);
// An agent may have been interrupted between reporting its initial report
// and the `Atomics.wait` call. Try to yield control to ensure the agent
// actually started to wait.
$262.agent.tryYield();
assert.sameValue(
Atomics.notify(i32a, AGENT_WAIT_INDEX),
1,
'Atomics.notify(new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT * 4)), AGENT_WAIT_INDEX) must return 1'
);
assert.sameValue($262.agent.getReport(), 'ok', '$262.agent.getReport() must return "ok"');