Merge branch 'mr/124' into maint-0.4.4

This commit is contained in:
George Kadianakis
2020-08-19 13:55:07 +03:00
11 changed files with 89 additions and 3 deletions
+42
View File
@@ -286,6 +286,8 @@ main(int c, const char **v)
/* Don't add default logs; the tests manage their own. */
quiet_level = QUIET_SILENT;
unsigned num=1, den=1;
for (i_out = i = 1; i < c; ++i) {
if (!strcmp(v[i], "--warn")) {
loglevel = LOG_WARN;
@@ -297,6 +299,19 @@ main(int c, const char **v)
loglevel = LOG_DEBUG;
} else if (!strcmp(v[i], "--accel")) {
accel_crypto = 1;
} else if (!strcmp(v[i], "--fraction")) {
if (i+1 == c) {
printf("--fraction needs an argument.\n");
return 1;
}
const char *fracstr = v[++i];
char ch;
if (sscanf(fracstr, "%u/%u%c", &num, &den, &ch) != 2) {
printf("--fraction expects a fraction as an input.\n");
}
if (den == 0 || num == 0 || num > den) {
printf("--fraction expects a valid fraction as an input.\n");
}
} else {
v[i_out++] = v[i];
}
@@ -373,6 +388,33 @@ main(int c, const char **v)
smartlist_free(skip);
}
if (den != 1) {
// count the tests. Linear but fast.
unsigned n_tests = 0;
struct testgroup_t *tg;
struct testcase_t *tc;
for (tg = testgroups; tg->prefix != NULL; ++tg) {
for (tc = tg->cases; tc->name != NULL; ++tc) {
++n_tests;
}
}
// Which tests should we run? This can give iffy results if den is huge
// but it doesn't actually matter in practice.
unsigned tests_per_chunk = CEIL_DIV(n_tests, den);
unsigned start_at = (num-1) * tests_per_chunk;
// Skip the tests that are outside of the range.
unsigned idx = 0;
for (tg = testgroups; tg->prefix != NULL; ++tg) {
for (tc = tg->cases; tc->name != NULL; ++tc) {
if (idx < start_at || idx >= start_at + tests_per_chunk) {
tc->flags |= TT_SKIP;
}
++idx;
}
}
}
int have_failed = (tinytest_main(c, v, testgroups) != 0);
free_pregenerated_keys();