quickjs/tests/test_rw_handler.js

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);