console.log("Atomics wait/notify demo start");
function asserts(cond, msg) {
if (!cond) throw new Error(msg || "assertion failed");
}
let sab = new SharedArrayBuffer(16);
let ia = new Int32Array(sab);
Atomics.store(ia, 0, 0);
console.log("initial value:", Atomics.load(ia, 0));
let r1 = Atomics.wait(ia, 0, 1, 50); console.log("wait with mismatched expected ->", r1);
asserts(r1 === "not-equal");
Atomics.store(ia, 0, 7);
console.log("stored 7, now value:", Atomics.load(ia,0));
let start = Date.now();
let r2 = Atomics.wait(ia, 0, 7, 100);
let dur = Date.now() - start;
console.log("wait returned ->", r2, "(duration ms)", dur);
asserts(r2 === "timed-out" || r2 === "ok");
let notified = Atomics.notify(ia, 0, 1);
console.log("notify returned ->", notified);
asserts(typeof notified === 'number');
console.log("Atomics wait/notify demo done");