mirror of
https://github.com/bellard/quickjs.git
synced 2026-06-07 14:42:08 +00:00
58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
import * as std from "std";
|
|
import * as os from "os";
|
|
|
|
function assert(actual, expected, message) {
|
|
if (arguments.length == 1)
|
|
expected = true;
|
|
|
|
if (Object.is(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 + ")" : ""));
|
|
}
|
|
|
|
function handle_read(fd_r, fd_w, i)
|
|
{
|
|
var buf = new Uint32Array(1);
|
|
var val, len;
|
|
len = os.read(fd_r, buf.buffer, 0, 4);
|
|
os.setReadHandler(fd_r, null);
|
|
val = buf[0];
|
|
// print("read fd=", fd_r, "val=", val, "len=", len);
|
|
assert(val, i);
|
|
}
|
|
|
|
function handle_write(fd_r, fd_w, i)
|
|
{
|
|
var buf = new Uint32Array(1);
|
|
buf[0] = i;
|
|
os.write(fd_w, buf.buffer, 0, 4);
|
|
os.setWriteHandler(fd_w, null);
|
|
}
|
|
|
|
function test_rw_handlers(n)
|
|
{
|
|
var tab, fd_r, fd_w, i;
|
|
tab = [];
|
|
for(i = 0; i < n; i++) {
|
|
tab[i] = os.pipe();
|
|
fd_r = tab[i][0];
|
|
fd_w = tab[i][1];
|
|
os.setReadHandler(fd_r, handle_read.bind(null, fd_r, fd_w, i));
|
|
}
|
|
for(i = n - 1; i >= 0; i--) {
|
|
fd_r = tab[i][0];
|
|
fd_w = tab[i][1];
|
|
os.setWriteHandler(fd_w, handle_write.bind(null, fd_r, fd_w, i));
|
|
}
|
|
}
|
|
|
|
test_rw_handlers(100);
|