blob: 903353143057a5196b9532372cc81a21890d6d1e [file] [log] [blame] [edit]
<!DOCTYPE HTML><!-- webkit-test-runner [ jscOptions=--useSharedArrayBuffer=true ] -->
<html>
<head>
<title>Growable SharedArrayBuffers typed array should be serializable</title>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description("Growable SharedArrayBuffers typed array should be serializable");
window.jsTestIsAsync = true;
var arrayBuffer = new SharedArrayBuffer(36, { maxByteLength: 128 });
var int32AutoArray = new Int32Array(arrayBuffer, 4);
shouldBeTrue(`arrayBuffer.growable`);
shouldBe(`arrayBuffer.byteLength`, `36`);
shouldBe(`arrayBuffer.maxByteLength`, `128`);
shouldBe(`int32AutoArray.length`, `8`);
shouldBe(`int32AutoArray.byteOffset`, `4`);
async function createWorker(script)
{
script += "self.postMessage('ready');";
const blob = new Blob([script], { type: 'text/javascript' });
const url = URL.createObjectURL(blob);
const worker = new Worker(URL.createObjectURL(blob));
await new Promise(resolve => worker.onmessage = () => {
resolve();
});
URL.revokeObjectURL(url);
return worker;
}
(async () => {
const worker = await createWorker(`
self.onmessage = (event) => {
let data = event.data;
self.postMessage(data);
}
`);
const promise = new Promise(resolve => worker.onmessage = event => resolve(event.data));
worker.postMessage(int32AutoArray);
globalThis.result = await promise;
shouldBeTrue(`result.buffer.growable`);
shouldBe(`result.buffer.byteLength`, `36`);
shouldBe(`result.buffer.maxByteLength`, `128`);
shouldBe(`result.length`, `8`);
shouldBe(`result.byteOffset`, `4`);
result[0] = 42;
shouldBe(`int32AutoArray[0]`, `42`);
arrayBuffer.grow(128);
shouldBe(`result.buffer.byteLength`, `128`);
shouldBe(`result.buffer.maxByteLength`, `128`);
shouldBe(`int32AutoArray.length`, `31`);
shouldBe(`int32AutoArray.byteOffset`, `4`);
shouldBe(`result.length`, `31`);
shouldBe(`result.byteOffset`, `4`);
finishJSTest();
})();
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>