Skip to content

Commit

Permalink
Added some automatic sizing for field-names in scripts/runners
Browse files Browse the repository at this point in the history
  • Loading branch information
geky committed Nov 15, 2022
1 parent a2fb708 commit 274222b
Show file tree
Hide file tree
Showing 8 changed files with 327 additions and 139 deletions.
84 changes: 71 additions & 13 deletions runners/bench_runner.c
Original file line number Diff line number Diff line change
Expand Up @@ -665,7 +665,7 @@ void perm_count(

// operations we can do
static void summary(void) {
printf("%-36s %7s %7s %7s %11s\n",
printf("%-23s %7s %7s %7s %11s\n",
"", "flags", "suites", "cases", "perms");
size_t suites = 0;
size_t cases = 0;
Expand Down Expand Up @@ -707,7 +707,7 @@ static void summary(void) {
sprintf(flag_buf, "%s%s",
(flags & BENCH_REENTRANT) ? "r" : "",
(!flags) ? "-" : "");
printf("%-36s %7s %7zu %7zu %11s\n",
printf("%-23s %7s %7zu %7zu %11s\n",
"TOTAL",
flag_buf,
suites,
Expand All @@ -716,8 +716,18 @@ static void summary(void) {
}

static void list_suites(void) {
printf("%-36s %7s %7s %11s\n", "suite", "flags", "cases", "perms");
// at least size so that names fit
unsigned name_width = 23;
for (size_t i = 0; i < BENCH_SUITE_COUNT; i++) {
size_t len = strlen(bench_suites[i].name);
if (len > name_width) {
name_width = len;
}
}
name_width = 4*((name_width+1+4-1)/4)-1;

printf("%-*s %7s %7s %11s\n",
name_width, "suite", "flags", "cases", "perms");
for (size_t t = 0; t < bench_id_count; t++) {
for (size_t i = 0; i < BENCH_SUITE_COUNT; i++) {
bench_define_suite(&bench_suites[i]);
Expand Down Expand Up @@ -756,7 +766,8 @@ static void list_suites(void) {
sprintf(flag_buf, "%s%s",
(bench_suites[i].flags & BENCH_REENTRANT) ? "r" : "",
(!bench_suites[i].flags) ? "-" : "");
printf("%-36s %7s %7zu %11s\n",
printf("%-*s %7s %7zu %11s\n",
name_width,
bench_suites[i].name,
flag_buf,
cases,
Expand All @@ -766,8 +777,19 @@ static void list_suites(void) {
}

static void list_cases(void) {
printf("%-36s %7s %11s\n", "case", "flags", "perms");
// at least size so that names fit
unsigned name_width = 23;
for (size_t i = 0; i < BENCH_SUITE_COUNT; i++) {
for (size_t j = 0; j < bench_suites[i].case_count; j++) {
size_t len = strlen(bench_suites[i].cases[j].name);
if (len > name_width) {
name_width = len;
}
}
}
name_width = 4*((name_width+1+4-1)/4)-1;

printf("%-*s %7s %11s\n", name_width, "case", "flags", "perms");
for (size_t t = 0; t < bench_id_count; t++) {
for (size_t i = 0; i < BENCH_SUITE_COUNT; i++) {
bench_define_suite(&bench_suites[i]);
Expand Down Expand Up @@ -799,7 +821,8 @@ static void list_cases(void) {
? "r" : "",
(!bench_suites[i].cases[j].flags)
? "-" : "");
printf("%-36s %7s %11s\n",
printf("%-*s %7s %11s\n",
name_width,
bench_suites[i].cases[j].name,
flag_buf,
perm_buf);
Expand All @@ -809,8 +832,17 @@ static void list_cases(void) {
}

static void list_suite_paths(void) {
printf("%-36s %s\n", "suite", "path");
// at least size so that names fit
unsigned name_width = 23;
for (size_t i = 0; i < BENCH_SUITE_COUNT; i++) {
size_t len = strlen(bench_suites[i].name);
if (len > name_width) {
name_width = len;
}
}
name_width = 4*((name_width+1+4-1)/4)-1;

printf("%-*s %s\n", name_width, "suite", "path");
for (size_t t = 0; t < bench_id_count; t++) {
for (size_t i = 0; i < BENCH_SUITE_COUNT; i++) {
size_t cases = 0;
Expand All @@ -823,6 +855,8 @@ static void list_suite_paths(void) {
|| strcmp(bench_ids[t].name,
bench_suites[i].cases[j].name) == 0)) {
continue;

cases += 1;
}
}

Expand All @@ -831,16 +865,28 @@ static void list_suite_paths(void) {
continue;
}

printf("%-36s %s\n",
printf("%-*s %s\n",
name_width,
bench_suites[i].name,
bench_suites[i].path);
}
}
}

static void list_case_paths(void) {
printf("%-36s %s\n", "case", "path");
// at least size so that names fit
unsigned name_width = 23;
for (size_t i = 0; i < BENCH_SUITE_COUNT; i++) {
for (size_t j = 0; j < bench_suites[i].case_count; j++) {
size_t len = strlen(bench_suites[i].cases[j].name);
if (len > name_width) {
name_width = len;
}
}
}
name_width = 4*((name_width+1+4-1)/4)-1;

printf("%-*s %s\n", name_width, "case", "path");
for (size_t t = 0; t < bench_id_count; t++) {
for (size_t i = 0; i < BENCH_SUITE_COUNT; i++) {
for (size_t j = 0; j < bench_suites[i].case_count; j++) {
Expand All @@ -853,7 +899,8 @@ static void list_case_paths(void) {
continue;
}

printf("%-36s %s\n",
printf("%-*s %s\n",
name_width,
bench_suites[i].cases[j].name,
bench_suites[i].cases[j].path);
}
Expand Down Expand Up @@ -1099,16 +1146,27 @@ const bench_geometry_t *bench_geometries = builtin_geometries;
size_t bench_geometry_count = 5;

static void list_geometries(void) {
// at least size so that names fit
unsigned name_width = 23;
for (size_t g = 0; builtin_geometries[g].name; g++) {
size_t len = strlen(builtin_geometries[g].name);
if (len > name_width) {
name_width = len;
}
}
name_width = 4*((name_width+1+4-1)/4)-1;

// yes we do need to define a suite, this does a bit of bookeeping
// such as setting up the define cache
bench_define_suite(&(const struct bench_suite){0});

printf("%-24s %7s %7s %7s %7s %11s\n",
"geometry", "read", "prog", "erase", "count", "size");
printf("%-*s %7s %7s %7s %7s %11s\n",
name_width, "geometry", "read", "prog", "erase", "count", "size");
for (size_t g = 0; builtin_geometries[g].name; g++) {
bench_define_geometry(&builtin_geometries[g]);
bench_define_flush();
printf("%-24s %7ju %7ju %7ju %7ju %11ju\n",
printf("%-*s %7ju %7ju %7ju %7ju %11ju\n",
name_width,
builtin_geometries[g].name,
READ_SIZE,
PROG_SIZE,
Expand Down
105 changes: 87 additions & 18 deletions runners/test_runner.c
Original file line number Diff line number Diff line change
Expand Up @@ -691,7 +691,7 @@ void perm_count(

// operations we can do
static void summary(void) {
printf("%-36s %7s %7s %7s %11s\n",
printf("%-23s %7s %7s %7s %11s\n",
"", "flags", "suites", "cases", "perms");
size_t suites = 0;
size_t cases = 0;
Expand Down Expand Up @@ -735,7 +735,7 @@ static void summary(void) {
sprintf(flag_buf, "%s%s",
(flags & TEST_REENTRANT) ? "r" : "",
(!flags) ? "-" : "");
printf("%-36s %7s %7zu %7zu %11s\n",
printf("%-23s %7s %7zu %7zu %11s\n",
"TOTAL",
flag_buf,
suites,
Expand All @@ -744,8 +744,18 @@ static void summary(void) {
}

static void list_suites(void) {
printf("%-36s %7s %7s %11s\n", "suite", "flags", "cases", "perms");
// at least size so that names fit
unsigned name_width = 23;
for (size_t i = 0; i < TEST_SUITE_COUNT; i++) {
size_t len = strlen(test_suites[i].name);
if (len > name_width) {
name_width = len;
}
}
name_width = 4*((name_width+1+4-1)/4)-1;

printf("%-*s %7s %7s %11s\n",
name_width, "suite", "flags", "cases", "perms");
for (size_t t = 0; t < test_id_count; t++) {
for (size_t i = 0; i < TEST_SUITE_COUNT; i++) {
test_define_suite(&test_suites[i]);
Expand Down Expand Up @@ -786,7 +796,8 @@ static void list_suites(void) {
sprintf(flag_buf, "%s%s",
(test_suites[i].flags & TEST_REENTRANT) ? "r" : "",
(!test_suites[i].flags) ? "-" : "");
printf("%-36s %7s %7zu %11s\n",
printf("%-*s %7s %7zu %11s\n",
name_width,
test_suites[i].name,
flag_buf,
cases,
Expand All @@ -796,8 +807,19 @@ static void list_suites(void) {
}

static void list_cases(void) {
printf("%-36s %7s %11s\n", "case", "flags", "perms");
// at least size so that names fit
unsigned name_width = 23;
for (size_t i = 0; i < TEST_SUITE_COUNT; i++) {
for (size_t j = 0; j < test_suites[i].case_count; j++) {
size_t len = strlen(test_suites[i].cases[j].name);
if (len > name_width) {
name_width = len;
}
}
}
name_width = 4*((name_width+1+4-1)/4)-1;

printf("%-*s %7s %11s\n", name_width, "case", "flags", "perms");
for (size_t t = 0; t < test_id_count; t++) {
for (size_t i = 0; i < TEST_SUITE_COUNT; i++) {
test_define_suite(&test_suites[i]);
Expand Down Expand Up @@ -831,7 +853,8 @@ static void list_cases(void) {
? "r" : "",
(!test_suites[i].cases[j].flags)
? "-" : "");
printf("%-36s %7s %11s\n",
printf("%-*s %7s %11s\n",
name_width,
test_suites[i].cases[j].name,
flag_buf,
perm_buf);
Expand All @@ -841,8 +864,17 @@ static void list_cases(void) {
}

static void list_suite_paths(void) {
printf("%-36s %s\n", "suite", "path");
// at least size so that names fit
unsigned name_width = 23;
for (size_t i = 0; i < TEST_SUITE_COUNT; i++) {
size_t len = strlen(test_suites[i].name);
if (len > name_width) {
name_width = len;
}
}
name_width = 4*((name_width+1+4-1)/4)-1;

printf("%-*s %s\n", name_width, "suite", "path");
for (size_t t = 0; t < test_id_count; t++) {
for (size_t i = 0; i < TEST_SUITE_COUNT; i++) {
size_t cases = 0;
Expand All @@ -856,23 +888,37 @@ static void list_suite_paths(void) {
test_suites[i].cases[j].name) == 0)) {
continue;
}

cases += 1;
}

// no tests found?
if (!cases) {
continue;
}

printf("%-36s %s\n",
printf("%-*s %s\n",
name_width,
test_suites[i].name,
test_suites[i].path);
}
}
}

static void list_case_paths(void) {
printf("%-36s %s\n", "case", "path");
// at least size so that names fit
unsigned name_width = 23;
for (size_t i = 0; i < TEST_SUITE_COUNT; i++) {
for (size_t j = 0; j < test_suites[i].case_count; j++) {
size_t len = strlen(test_suites[i].cases[j].name);
if (len > name_width) {
name_width = len;
}
}
}
name_width = 4*((name_width+1+4-1)/4)-1;

printf("%-*s %s\n", name_width, "case", "path");
for (size_t t = 0; t < test_id_count; t++) {
for (size_t i = 0; i < TEST_SUITE_COUNT; i++) {
for (size_t j = 0; j < test_suites[i].case_count; j++) {
Expand All @@ -885,7 +931,8 @@ static void list_case_paths(void) {
continue;
}

printf("%-36s %s\n",
printf("%-*s %s\n",
name_width,
test_suites[i].cases[j].name,
test_suites[i].cases[j].path);
}
Expand Down Expand Up @@ -1139,16 +1186,27 @@ const test_geometry_t *test_geometries = builtin_geometries;
size_t test_geometry_count = 5;

static void list_geometries(void) {
// at least size so that names fit
unsigned name_width = 23;
for (size_t g = 0; builtin_geometries[g].name; g++) {
size_t len = strlen(builtin_geometries[g].name);
if (len > name_width) {
name_width = len;
}
}
name_width = 4*((name_width+1+4-1)/4)-1;

// yes we do need to define a suite, this does a bit of bookeeping
// such as setting up the define cache
test_define_suite(&(const struct test_suite){0});

printf("%-24s %7s %7s %7s %7s %11s\n",
"geometry", "read", "prog", "erase", "count", "size");
printf("%-*s %7s %7s %7s %7s %11s\n",
name_width, "geometry", "read", "prog", "erase", "count", "size");
for (size_t g = 0; builtin_geometries[g].name; g++) {
test_define_geometry(&builtin_geometries[g]);
test_define_flush();
printf("%-24s %7ju %7ju %7ju %7ju %11ju\n",
printf("%-*s %7ju %7ju %7ju %7ju %11ju\n",
name_width,
builtin_geometries[g].name,
READ_SIZE,
PROG_SIZE,
Expand Down Expand Up @@ -1669,18 +1727,29 @@ const test_powerloss_t *test_powerlosses = (const test_powerloss_t[]){
size_t test_powerloss_count = 1;

static void list_powerlosses(void) {
printf("%-24s %s\n", "scenario", "description");
// at least size so that names fit
unsigned name_width = 23;
for (size_t i = 0; builtin_powerlosses[i].name; i++) {
size_t len = strlen(builtin_powerlosses[i].name);
if (len > name_width) {
name_width = len;
}
}
name_width = 4*((name_width+1+4-1)/4)-1;

printf("%-*s %s\n", name_width, "scenario", "description");
size_t i = 0;
for (; builtin_powerlosses[i].name; i++) {
printf("%-24s %s\n",
printf("%-*s %s\n",
name_width,
builtin_powerlosses[i].name,
builtin_powerlosses_help[i]);
}

// a couple more options with special parsing
printf("%-24s %s\n", "1,2,3", builtin_powerlosses_help[i+0]);
printf("%-24s %s\n", "{1,2,3}", builtin_powerlosses_help[i+1]);
printf("%-24s %s\n", ":1248g1", builtin_powerlosses_help[i+2]);
printf("%-*s %s\n", name_width, "1,2,3", builtin_powerlosses_help[i+0]);
printf("%-*s %s\n", name_width, "{1,2,3}", builtin_powerlosses_help[i+1]);
printf("%-*s %s\n", name_width, ":1248g1", builtin_powerlosses_help[i+2]);
}


Expand Down

0 comments on commit 274222b

Please sign in to comment.