blob: 450866539de19e03e8ced40373f4ee715fcf7ca1 [file] [log] [blame]
/*
* Test using timers and intervals with curses.
*/
if (typeof Ncurses !== 'object') {
throw new Error('Ncurses required');
}
function fillScreen(ch) {
var size, w, h;
var i, j;
size = Ncurses.getmaxyx();
h = size[0];
w = size[1];
for (i = 0; i < h; i++) {
for (j = 0; j < w; j++) {
Ncurses.mvprintw(i, j, ch);
}
}
Ncurses.refresh();
}
function main() {
var i, j;
var counters = [];
var size, w, h;
Ncurses.initscr();
size = Ncurses.getmaxyx();
h = size[0];
w = size[1];
fillScreen('.');
setInterval(function () {
Ncurses.mvprintw(1, 4, new Date().toISOString());
Ncurses.refresh();
}, 1000);
function addCounter(row, index, interval) {
counters[index] = 0;
setInterval(function () {
counters[index]++;
Ncurses.mvprintw(row, 4, '' + Date.now() + ' ' + counters[index]);
Ncurses.refresh();
}, interval);
}
function addRandomChar(row, col, interval) {
setTimeout(function () {
Ncurses.mvprintw(row, col, String.fromCharCode(Math.random() * 64 + 0x20));
Ncurses.refresh();
}, interval);
}
for (i = 0; i < h - 5; i++) {
addCounter(3 + i, i, 363 * i + 400);
}
/* Here the inserts take a lot of time because the underlying timer manager
* data structure has O(n) insertion performance.
*/
for (i = 0; i < h - 5; i++) {
for (j = 0; j < w - 50; j++) {
// Math.exp(0)...Math.exp(8) is an uneven distribution between 1...~2980.
addRandomChar(3 + i, 28 + j, 58000 - Math.exp(Math.random() * 8) * 20);
}
}
setTimeout(function () {
Ncurses.endwin();
Ncurses.delscreen();
requestEventLoopExit();
}, 120e3);
}
main();