"use strict"; self.getViewValue = (view, index) => { if(view instanceof DataView) { return view.getInt8(index); } return view[index]; }; self.setViewValue = (view, index, value) => { if(view instanceof DataView) { view.setInt8(index, value); } else { view[index] = value; } }; self.maybeBigInt = (view, value) => { if (view.constructor.name === "BigInt64Array" || view.constructor.name === "BigUint64Array") { return BigInt(value); } return value; }; self.testSharingViaIncrementerScript = (t, whereToListen, whereToListenLabel, whereToSend, whereToSendLabel, origin, type = "Int32Array") => { return new Promise(resolve => { const sab = new SharedArrayBuffer(8); const view = new self[type](sab); setViewValue(view, 0, maybeBigInt(view, 1)); whereToListen.onmessage = t.step_func(({ data }) => { switch (data.message) { case "initial payload received": { assert_equals(data.value, maybeBigInt(view, 1), `The ${whereToSendLabel} must see the same value in the SharedArrayBuffer`); break; } case "changed to 2": { assert_equals(getViewValue(view, 0), maybeBigInt(view, 2), `The ${whereToListenLabel} must see changes made in the ${whereToSendLabel}`); setViewValue(view, 0, maybeBigInt(view, 3)); whereToSend.postMessage({ message: "changed to 3" }, origin); break; } case "changed to 3 received": { assert_equals(data.value, maybeBigInt(view, 3), `The ${whereToSendLabel} must see changes made in the ${whereToListenLabel}`); resolve(); break; } } }); whereToSend.postMessage({ message: "initial payload", view }, origin); }); }; self.setupDestinationIncrementer = (whereToListen, whereToSendBackTo, origin) => { let view; whereToListen.onmessage = ({ data }) => { switch (data.message) { case "initial payload": { view = data.view; whereToSendBackTo.postMessage({ message: "initial payload received", value: getViewValue(view, 0) }, origin); setViewValue(view, 0, maybeBigInt(view, 2)); whereToSendBackTo.postMessage({ message: "changed to 2" }, origin); break; } case "changed to 3": { whereToSendBackTo.postMessage({ message: "changed to 3 received", value: getViewValue(view, 0) }, origin); break; } } }; };