Run replays in reverse order, in the hopes of a teeny speedup
This commit is contained in:
parent
b360fa3998
commit
c45ebe60e1
@ -25,6 +25,11 @@ function pad(s, n) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const RESULT_TYPES = {
|
const RESULT_TYPES = {
|
||||||
|
pending: {
|
||||||
|
// not a real result type, but used for the initial display
|
||||||
|
color: "\x1b[90m",
|
||||||
|
symbol: "?",
|
||||||
|
},
|
||||||
skipped: {
|
skipped: {
|
||||||
color: "\x1b[90m",
|
color: "\x1b[90m",
|
||||||
symbol: "-",
|
symbol: "-",
|
||||||
@ -351,22 +356,36 @@ async function test_pack(testdef) {
|
|||||||
let dots_per_row = columns - title_width - 1 - 1 - 9 - 1;
|
let dots_per_row = columns - title_width - 1 - 1 - 9 - 1;
|
||||||
// TODO factor out the common parts maybe?
|
// TODO factor out the common parts maybe?
|
||||||
stdout.write(pad(`${pack.title} (${ruleset})`, title_width) + " ");
|
stdout.write(pad(`${pack.title} (${ruleset})`, title_width) + " ");
|
||||||
let d = num_levels;
|
let indices = [];
|
||||||
let num_dot_lines = 1;
|
let num_dot_lines = 1;
|
||||||
while (d > 0) {
|
let previous_type = null;
|
||||||
let n = Math.min(d, dots_per_row);
|
for (let i = 0; i < num_levels; i++) {
|
||||||
stdout.write("\x1b[90m");
|
if (i > 0 && i % dots_per_row === 0) {
|
||||||
stdout.write("?".repeat(n));
|
|
||||||
d -= n;
|
|
||||||
if (d > 0) {
|
|
||||||
stdout.write("\n");
|
stdout.write("\n");
|
||||||
stdout.write(" ".repeat(title_width + 1));
|
stdout.write(" ".repeat(title_width + 1));
|
||||||
num_dot_lines += 1;
|
num_dot_lines += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let type = (level_filter && ! level_filter.has(i)) ? 'skipped' : 'pending';
|
||||||
|
if (type !== previous_type) {
|
||||||
|
stdout.write(RESULT_TYPES[type].color);
|
||||||
|
}
|
||||||
|
stdout.write(RESULT_TYPES[type].symbol);
|
||||||
|
previous_type = type;
|
||||||
|
|
||||||
|
if (type === 'pending') {
|
||||||
|
indices.push(i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ansi_cursor_move(0, -(num_dot_lines - 1));
|
ansi_cursor_move(0, -(num_dot_lines - 1));
|
||||||
stdout.write(`\x1b[${title_width + 2}G`);
|
stdout.write(`\x1b[${title_width + 2}G`);
|
||||||
|
|
||||||
|
// We really really don't want to have only a single thread left running at the end on a single
|
||||||
|
// remaining especially-long replay, so it would be nice to run the levels in reverse order of
|
||||||
|
// complexity. But that sounds hard so instead just run them backwards, since the earlier
|
||||||
|
// levels in any given pack tend to be easier.
|
||||||
|
indices.reverse();
|
||||||
|
|
||||||
let num_passed = 0;
|
let num_passed = 0;
|
||||||
let num_missing = 0;
|
let num_missing = 0;
|
||||||
let total_tics = 0;
|
let total_tics = 0;
|
||||||
@ -374,7 +393,6 @@ async function test_pack(testdef) {
|
|||||||
let last_pause = t0;
|
let last_pause = t0;
|
||||||
let failures = [];
|
let failures = [];
|
||||||
let promises = [];
|
let promises = [];
|
||||||
let indices = [...Array(num_levels).keys()];
|
|
||||||
for await (let result of run_in_thread_pool(4, testdef, indices)) {
|
for await (let result of run_in_thread_pool(4, testdef, indices)) {
|
||||||
//let result = test_level_wrapper(pack, i, level_filter, compat);
|
//let result = test_level_wrapper(pack, i, level_filter, compat);
|
||||||
let result_stuff = RESULT_TYPES[result.type];
|
let result_stuff = RESULT_TYPES[result.type];
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user