mirror of
https://github.com/bellard/quickjs.git
synced 2025-09-30 15:04:24 +03:00
2020-07-05 release
This commit is contained in:
93
tests/test_worker.js
Normal file
93
tests/test_worker.js
Normal file
@@ -0,0 +1,93 @@
|
||||
/* os.Worker API test */
|
||||
import * as std from "std";
|
||||
import * as os from "os";
|
||||
|
||||
function assert(actual, expected, message) {
|
||||
if (arguments.length == 1)
|
||||
expected = true;
|
||||
|
||||
if (actual === expected)
|
||||
return;
|
||||
|
||||
if (actual !== null && expected !== null
|
||||
&& typeof actual == 'object' && typeof expected == 'object'
|
||||
&& actual.toString() === expected.toString())
|
||||
return;
|
||||
|
||||
throw Error("assertion failed: got |" + actual + "|" +
|
||||
", expected |" + expected + "|" +
|
||||
(message ? " (" + message + ")" : ""));
|
||||
}
|
||||
|
||||
var worker;
|
||||
|
||||
function test_worker()
|
||||
{
|
||||
var counter;
|
||||
|
||||
/* Note: can use std.loadFile() to read from a file */
|
||||
worker = new os.Worker(`
|
||||
import * as std from "std";
|
||||
import * as os from "os";
|
||||
|
||||
var parent = os.Worker.parent;
|
||||
|
||||
function handle_msg(e) {
|
||||
var ev = e.data;
|
||||
// print("child_recv", JSON.stringify(ev));
|
||||
switch(ev.type) {
|
||||
case "abort":
|
||||
parent.postMessage({ type: "done" });
|
||||
break;
|
||||
case "sab":
|
||||
/* modify the SharedArrayBuffer */
|
||||
ev.buf[2] = 10;
|
||||
parent.postMessage({ type: "sab_done", buf: ev.buf });
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function worker_main() {
|
||||
var i;
|
||||
|
||||
parent.onmessage = handle_msg;
|
||||
for(i = 0; i < 10; i++) {
|
||||
parent.postMessage({ type: "num", num: i });
|
||||
}
|
||||
}
|
||||
worker_main();
|
||||
`);
|
||||
|
||||
counter = 0;
|
||||
worker.onmessage = function (e) {
|
||||
var ev = e.data;
|
||||
// print("recv", JSON.stringify(ev));
|
||||
switch(ev.type) {
|
||||
case "num":
|
||||
assert(ev.num, counter);
|
||||
counter++;
|
||||
if (counter == 10) {
|
||||
/* test SharedArrayBuffer modification */
|
||||
let sab = new SharedArrayBuffer(10);
|
||||
let buf = new Uint8Array(sab);
|
||||
worker.postMessage({ type: "sab", buf: buf });
|
||||
}
|
||||
break;
|
||||
case "sab_done":
|
||||
{
|
||||
let buf = ev.buf;
|
||||
/* check that the SharedArrayBuffer was modified */
|
||||
assert(buf[2], 10);
|
||||
worker.postMessage({ type: "abort" });
|
||||
}
|
||||
break;
|
||||
case "done":
|
||||
/* terminate */
|
||||
worker.onmessage = null;
|
||||
break;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
test_worker();
|
Reference in New Issue
Block a user