Added some automatic sizing for field-names in scripts/runners

This commit is contained in:
Christopher Haster
2022-09-27 15:25:53 -05:00
parent a2fb7089dd
commit 274222b518
8 changed files with 331 additions and 143 deletions
+71 -13
View File
@@ -665,7 +665,7 @@ void perm_count(
// operations we can do // operations we can do
static void summary(void) { static void summary(void) {
printf("%-36s %7s %7s %7s %11s\n", printf("%-23s %7s %7s %7s %11s\n",
"", "flags", "suites", "cases", "perms"); "", "flags", "suites", "cases", "perms");
size_t suites = 0; size_t suites = 0;
size_t cases = 0; size_t cases = 0;
@@ -707,7 +707,7 @@ static void summary(void) {
sprintf(flag_buf, "%s%s", sprintf(flag_buf, "%s%s",
(flags & BENCH_REENTRANT) ? "r" : "", (flags & BENCH_REENTRANT) ? "r" : "",
(!flags) ? "-" : ""); (!flags) ? "-" : "");
printf("%-36s %7s %7zu %7zu %11s\n", printf("%-23s %7s %7zu %7zu %11s\n",
"TOTAL", "TOTAL",
flag_buf, flag_buf,
suites, suites,
@@ -716,8 +716,18 @@ static void summary(void) {
} }
static void list_suites(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 t = 0; t < bench_id_count; t++) {
for (size_t i = 0; i < BENCH_SUITE_COUNT; i++) { for (size_t i = 0; i < BENCH_SUITE_COUNT; i++) {
bench_define_suite(&bench_suites[i]); bench_define_suite(&bench_suites[i]);
@@ -756,7 +766,8 @@ static void list_suites(void) {
sprintf(flag_buf, "%s%s", sprintf(flag_buf, "%s%s",
(bench_suites[i].flags & BENCH_REENTRANT) ? "r" : "", (bench_suites[i].flags & BENCH_REENTRANT) ? "r" : "",
(!bench_suites[i].flags) ? "-" : ""); (!bench_suites[i].flags) ? "-" : "");
printf("%-36s %7s %7zu %11s\n", printf("%-*s %7s %7zu %11s\n",
name_width,
bench_suites[i].name, bench_suites[i].name,
flag_buf, flag_buf,
cases, cases,
@@ -766,8 +777,19 @@ static void list_suites(void) {
} }
static void list_cases(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 t = 0; t < bench_id_count; t++) {
for (size_t i = 0; i < BENCH_SUITE_COUNT; i++) { for (size_t i = 0; i < BENCH_SUITE_COUNT; i++) {
bench_define_suite(&bench_suites[i]); bench_define_suite(&bench_suites[i]);
@@ -799,7 +821,8 @@ static void list_cases(void) {
? "r" : "", ? "r" : "",
(!bench_suites[i].cases[j].flags) (!bench_suites[i].cases[j].flags)
? "-" : ""); ? "-" : "");
printf("%-36s %7s %11s\n", printf("%-*s %7s %11s\n",
name_width,
bench_suites[i].cases[j].name, bench_suites[i].cases[j].name,
flag_buf, flag_buf,
perm_buf); perm_buf);
@@ -809,8 +832,17 @@ static void list_cases(void) {
} }
static void list_suite_paths(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 t = 0; t < bench_id_count; t++) {
for (size_t i = 0; i < BENCH_SUITE_COUNT; i++) { for (size_t i = 0; i < BENCH_SUITE_COUNT; i++) {
size_t cases = 0; size_t cases = 0;
@@ -823,6 +855,8 @@ static void list_suite_paths(void) {
|| strcmp(bench_ids[t].name, || strcmp(bench_ids[t].name,
bench_suites[i].cases[j].name) == 0)) { bench_suites[i].cases[j].name) == 0)) {
continue; continue;
cases += 1;
} }
} }
@@ -831,7 +865,8 @@ static void list_suite_paths(void) {
continue; continue;
} }
printf("%-36s %s\n", printf("%-*s %s\n",
name_width,
bench_suites[i].name, bench_suites[i].name,
bench_suites[i].path); bench_suites[i].path);
} }
@@ -839,8 +874,19 @@ static void list_suite_paths(void) {
} }
static void list_case_paths(void) { 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 t = 0; t < bench_id_count; t++) {
for (size_t i = 0; i < BENCH_SUITE_COUNT; i++) { for (size_t i = 0; i < BENCH_SUITE_COUNT; i++) {
for (size_t j = 0; j < bench_suites[i].case_count; j++) { for (size_t j = 0; j < bench_suites[i].case_count; j++) {
@@ -853,7 +899,8 @@ static void list_case_paths(void) {
continue; continue;
} }
printf("%-36s %s\n", printf("%-*s %s\n",
name_width,
bench_suites[i].cases[j].name, bench_suites[i].cases[j].name,
bench_suites[i].cases[j].path); bench_suites[i].cases[j].path);
} }
@@ -1099,16 +1146,27 @@ const bench_geometry_t *bench_geometries = builtin_geometries;
size_t bench_geometry_count = 5; size_t bench_geometry_count = 5;
static void list_geometries(void) { 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 // yes we do need to define a suite, this does a bit of bookeeping
// such as setting up the define cache // such as setting up the define cache
bench_define_suite(&(const struct bench_suite){0}); bench_define_suite(&(const struct bench_suite){0});
printf("%-24s %7s %7s %7s %7s %11s\n", printf("%-*s %7s %7s %7s %7s %11s\n",
"geometry", "read", "prog", "erase", "count", "size"); name_width, "geometry", "read", "prog", "erase", "count", "size");
for (size_t g = 0; builtin_geometries[g].name; g++) { for (size_t g = 0; builtin_geometries[g].name; g++) {
bench_define_geometry(&builtin_geometries[g]); bench_define_geometry(&builtin_geometries[g]);
bench_define_flush(); 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, builtin_geometries[g].name,
READ_SIZE, READ_SIZE,
PROG_SIZE, PROG_SIZE,
+87 -18
View File
@@ -691,7 +691,7 @@ void perm_count(
// operations we can do // operations we can do
static void summary(void) { static void summary(void) {
printf("%-36s %7s %7s %7s %11s\n", printf("%-23s %7s %7s %7s %11s\n",
"", "flags", "suites", "cases", "perms"); "", "flags", "suites", "cases", "perms");
size_t suites = 0; size_t suites = 0;
size_t cases = 0; size_t cases = 0;
@@ -735,7 +735,7 @@ static void summary(void) {
sprintf(flag_buf, "%s%s", sprintf(flag_buf, "%s%s",
(flags & TEST_REENTRANT) ? "r" : "", (flags & TEST_REENTRANT) ? "r" : "",
(!flags) ? "-" : ""); (!flags) ? "-" : "");
printf("%-36s %7s %7zu %7zu %11s\n", printf("%-23s %7s %7zu %7zu %11s\n",
"TOTAL", "TOTAL",
flag_buf, flag_buf,
suites, suites,
@@ -744,8 +744,18 @@ static void summary(void) {
} }
static void list_suites(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 t = 0; t < test_id_count; t++) {
for (size_t i = 0; i < TEST_SUITE_COUNT; i++) { for (size_t i = 0; i < TEST_SUITE_COUNT; i++) {
test_define_suite(&test_suites[i]); test_define_suite(&test_suites[i]);
@@ -786,7 +796,8 @@ static void list_suites(void) {
sprintf(flag_buf, "%s%s", sprintf(flag_buf, "%s%s",
(test_suites[i].flags & TEST_REENTRANT) ? "r" : "", (test_suites[i].flags & TEST_REENTRANT) ? "r" : "",
(!test_suites[i].flags) ? "-" : ""); (!test_suites[i].flags) ? "-" : "");
printf("%-36s %7s %7zu %11s\n", printf("%-*s %7s %7zu %11s\n",
name_width,
test_suites[i].name, test_suites[i].name,
flag_buf, flag_buf,
cases, cases,
@@ -796,8 +807,19 @@ static void list_suites(void) {
} }
static void list_cases(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 t = 0; t < test_id_count; t++) {
for (size_t i = 0; i < TEST_SUITE_COUNT; i++) { for (size_t i = 0; i < TEST_SUITE_COUNT; i++) {
test_define_suite(&test_suites[i]); test_define_suite(&test_suites[i]);
@@ -831,7 +853,8 @@ static void list_cases(void) {
? "r" : "", ? "r" : "",
(!test_suites[i].cases[j].flags) (!test_suites[i].cases[j].flags)
? "-" : ""); ? "-" : "");
printf("%-36s %7s %11s\n", printf("%-*s %7s %11s\n",
name_width,
test_suites[i].cases[j].name, test_suites[i].cases[j].name,
flag_buf, flag_buf,
perm_buf); perm_buf);
@@ -841,8 +864,17 @@ static void list_cases(void) {
} }
static void list_suite_paths(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 t = 0; t < test_id_count; t++) {
for (size_t i = 0; i < TEST_SUITE_COUNT; i++) { for (size_t i = 0; i < TEST_SUITE_COUNT; i++) {
size_t cases = 0; size_t cases = 0;
@@ -856,6 +888,8 @@ static void list_suite_paths(void) {
test_suites[i].cases[j].name) == 0)) { test_suites[i].cases[j].name) == 0)) {
continue; continue;
} }
cases += 1;
} }
// no tests found? // no tests found?
@@ -863,7 +897,8 @@ static void list_suite_paths(void) {
continue; continue;
} }
printf("%-36s %s\n", printf("%-*s %s\n",
name_width,
test_suites[i].name, test_suites[i].name,
test_suites[i].path); test_suites[i].path);
} }
@@ -871,8 +906,19 @@ static void list_suite_paths(void) {
} }
static void list_case_paths(void) { 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 t = 0; t < test_id_count; t++) {
for (size_t i = 0; i < TEST_SUITE_COUNT; i++) { for (size_t i = 0; i < TEST_SUITE_COUNT; i++) {
for (size_t j = 0; j < test_suites[i].case_count; j++) { for (size_t j = 0; j < test_suites[i].case_count; j++) {
@@ -885,7 +931,8 @@ static void list_case_paths(void) {
continue; continue;
} }
printf("%-36s %s\n", printf("%-*s %s\n",
name_width,
test_suites[i].cases[j].name, test_suites[i].cases[j].name,
test_suites[i].cases[j].path); test_suites[i].cases[j].path);
} }
@@ -1139,16 +1186,27 @@ const test_geometry_t *test_geometries = builtin_geometries;
size_t test_geometry_count = 5; size_t test_geometry_count = 5;
static void list_geometries(void) { 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 // yes we do need to define a suite, this does a bit of bookeeping
// such as setting up the define cache // such as setting up the define cache
test_define_suite(&(const struct test_suite){0}); test_define_suite(&(const struct test_suite){0});
printf("%-24s %7s %7s %7s %7s %11s\n", printf("%-*s %7s %7s %7s %7s %11s\n",
"geometry", "read", "prog", "erase", "count", "size"); name_width, "geometry", "read", "prog", "erase", "count", "size");
for (size_t g = 0; builtin_geometries[g].name; g++) { for (size_t g = 0; builtin_geometries[g].name; g++) {
test_define_geometry(&builtin_geometries[g]); test_define_geometry(&builtin_geometries[g]);
test_define_flush(); 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, builtin_geometries[g].name,
READ_SIZE, READ_SIZE,
PROG_SIZE, PROG_SIZE,
@@ -1669,18 +1727,29 @@ const test_powerloss_t *test_powerlosses = (const test_powerloss_t[]){
size_t test_powerloss_count = 1; size_t test_powerloss_count = 1;
static void list_powerlosses(void) { 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; size_t i = 0;
for (; builtin_powerlosses[i].name; i++) { for (; builtin_powerlosses[i].name; i++) {
printf("%-24s %s\n", printf("%-*s %s\n",
name_width,
builtin_powerlosses[i].name, builtin_powerlosses[i].name,
builtin_powerlosses_help[i]); builtin_powerlosses_help[i]);
} }
// a couple more options with special parsing // a couple more options with special parsing
printf("%-24s %s\n", "1,2,3", builtin_powerlosses_help[i+0]); printf("%-*s %s\n", name_width, "1,2,3", builtin_powerlosses_help[i+0]);
printf("%-24s %s\n", "{1,2,3}", builtin_powerlosses_help[i+1]); printf("%-*s %s\n", name_width, "{1,2,3}", builtin_powerlosses_help[i+1]);
printf("%-24s %s\n", ":1248g1", builtin_powerlosses_help[i+2]); printf("%-*s %s\n", name_width, ":1248g1", builtin_powerlosses_help[i+2]);
} }
+16 -10
View File
@@ -243,14 +243,20 @@ def table(results, diff_results=None, *,
reverse=False) reverse=False)
# print header # print header
print('%-36s' % ('%s%s' % ( if not summary:
'file' if by_file else 'function', title = '%s%s' % (
' (%d added, %d removed)' % ( 'file' if by_file else 'function',
sum(1 for n in table if n not in diff_table), ' (%d added, %d removed)' % (
sum(1 for n in diff_table if n not in table)) sum(1 for n in table if n not in diff_table),
if diff_results is not None and not percent else '') sum(1 for n in diff_table if n not in table))
if not summary else ''), if diff_results is not None and not percent else '')
end='') name_width = max(it.chain([23, len(title)], (len(n) for n in names)))
else:
title = ''
name_width = 23
name_width = 4*((name_width+1+4-1)//4)-1
print('%-*s ' % (name_width, title), end='')
if diff_results is None: if diff_results is None:
print(' %s' % ('size'.rjust(len(IntField.none)))) print(' %s' % ('size'.rjust(len(IntField.none))))
elif percent: elif percent:
@@ -273,7 +279,7 @@ def table(results, diff_results=None, *,
if not ratio and not all_: if not ratio and not all_:
continue continue
print('%-36s' % name, end='') print('%-*s ' % (name_width, name), end='')
if diff_results is None: if diff_results is None:
print(' %s' % ( print(' %s' % (
r.code_size.table() r.code_size.table()
@@ -312,7 +318,7 @@ def table(results, diff_results=None, *,
r.code_size if r else None, r.code_size if r else None,
diff_r.code_size if diff_r else None) diff_r.code_size if diff_r else None)
print('%-36s' % 'TOTAL', end='') print('%-*s ' % (name_width, 'TOTAL'), end='')
if diff_results is None: if diff_results is None:
print(' %s' % ( print(' %s' % (
r.code_size.table() r.code_size.table()
+18 -16
View File
@@ -320,12 +320,12 @@ def table(results, diff_results=None, *,
else ['function']) else ['function'])
table = { table = {
(r.file, r.line) if by_line '%s:%s' % (r.file, r.line) if by_line
else r.file if by_file else r.file if by_file
else r.function: r else r.function: r
for r in results} for r in results}
diff_table = { diff_table = {
(r.file, r.line) if by_line '%s:%s' % (r.file, r.line) if by_line
else r.file if by_file else r.file if by_file
else r.function: r else r.function: r
for r in diff_results or []} for r in diff_results or []}
@@ -359,16 +359,20 @@ def table(results, diff_results=None, *,
reverse=False) reverse=False)
# print header # print header
print('%-36s' % ('%s%s' % ( if not summary:
'line' if by_line title = '%s%s' % (
else 'file' if by_file 'line' if by_line else 'file' if by_file else 'function',
else 'function', ' (%d added, %d removed)' % (
' (%d added, %d removed)' % ( sum(1 for n in table if n not in diff_table),
sum(1 for n in table if n not in diff_table), sum(1 for n in diff_table if n not in table))
sum(1 for n in diff_table if n not in table)) if diff_results is not None and not percent else '')
if diff_results is not None and not percent else '') name_width = max(it.chain([23, len(title)], (len(n) for n in names)))
if not summary else ''), else:
end='') title = ''
name_width = 23
name_width = 4*((name_width+1+4-1)//4)-1
print('%-*s ' % (name_width, title), end='')
if diff_results is None: if diff_results is None:
print(' %s %s' % ( print(' %s %s' % (
'hits/line'.rjust(len(FracField.none)), 'hits/line'.rjust(len(FracField.none)),
@@ -401,9 +405,7 @@ def table(results, diff_results=None, *,
if not line_ratio and not branch_ratio and not all_: if not line_ratio and not branch_ratio and not all_:
continue continue
print('%-36s' % ( print('%-*s ' % (name_width, name), end='')
':'.join('%s' % n for n in name)
if by_line else name), end='')
if diff_results is None: if diff_results is None:
print(' %s %s' % ( print(' %s %s' % (
r.coverage_lines.table() r.coverage_lines.table()
@@ -460,7 +462,7 @@ def table(results, diff_results=None, *,
r.coverage_branches if r else None, r.coverage_branches if r else None,
diff_r.coverage_branches if diff_r else None) diff_r.coverage_branches if diff_r else None)
print('%-36s' % 'TOTAL', end='') print('%-*s ' % (name_width, 'TOTAL'), end='')
if diff_results is None: if diff_results is None:
print(' %s %s' % ( print(' %s %s' % (
r.coverage_lines.table() r.coverage_lines.table()
+16 -10
View File
@@ -244,14 +244,20 @@ def table(results, diff_results=None, *,
reverse=False) reverse=False)
# print header # print header
print('%-36s' % ('%s%s' % ( if not summary:
'file' if by_file else 'function', title = '%s%s' % (
' (%d added, %d removed)' % ( 'file' if by_file else 'function',
sum(1 for n in table if n not in diff_table), ' (%d added, %d removed)' % (
sum(1 for n in diff_table if n not in table)) sum(1 for n in table if n not in diff_table),
if diff_results is not None and not percent else '') sum(1 for n in diff_table if n not in table))
if not summary else ''), if diff_results is not None and not percent else '')
end='') name_width = max(it.chain([23, len(title)], (len(n) for n in names)))
else:
title = ''
name_width = 23
name_width = 4*((name_width+1+4-1)//4)-1
print('%-*s ' % (name_width, title), end='')
if diff_results is None: if diff_results is None:
print(' %s' % ('size'.rjust(len(IntField.none)))) print(' %s' % ('size'.rjust(len(IntField.none))))
elif percent: elif percent:
@@ -274,7 +280,7 @@ def table(results, diff_results=None, *,
if not ratio and not all_: if not ratio and not all_:
continue continue
print('%-36s' % name, end='') print('%-*s ' % (name_width, name), end='')
if diff_results is None: if diff_results is None:
print(' %s' % ( print(' %s' % (
r.data_size.table() r.data_size.table()
@@ -313,7 +319,7 @@ def table(results, diff_results=None, *,
r.data_size if r else None, r.data_size if r else None,
diff_r.data_size if diff_r else None) diff_r.data_size if diff_r else None)
print('%-36s' % 'TOTAL', end='') print('%-*s ' % (name_width, 'TOTAL'), end='')
if diff_results is None: if diff_results is None:
print(' %s' % ( print(' %s' % (
r.data_size.table() r.data_size.table()
+17 -10
View File
@@ -329,20 +329,27 @@ def table(results, calls, diff_results=None, *,
names.sort(key=lambda n: (table[n].stack_frame,) if n in table else (), names.sort(key=lambda n: (table[n].stack_frame,) if n in table else (),
reverse=False) reverse=False)
# adjust the name width based on the expected call depth, note that we
# can't always find the depth due to recursion
width = 36 + (4*depth if not m.isinf(depth) else 0)
# print header # print header
if not tree: if not summary:
print('%-*s' % (width, '%s%s' % ( title = '%s%s' % (
'file' if by_file else 'function', 'file' if by_file else 'function',
' (%d added, %d removed)' % ( ' (%d added, %d removed)' % (
sum(1 for n in table if n not in diff_table), sum(1 for n in table if n not in diff_table),
sum(1 for n in diff_table if n not in table)) sum(1 for n in diff_table if n not in table))
if diff_results is not None and not percent else '') if diff_results is not None and not percent else '')
if not summary else ''), name_width = max(it.chain([23, len(title)], (len(n) for n in names)))
end='') else:
title = ''
name_width = 23
name_width = 4*((name_width+1+4-1)//4)-1
# adjust the name width based on the expected call depth, note that we
# can't always find the depth due to recursion
if not m.isinf(depth):
name_width += 4*depth
if not tree:
print('%-*s ' % (name_width, title), end='')
if diff_results is None: if diff_results is None:
print(' %s %s' % ( print(' %s %s' % (
'frame'.rjust(len(IntField.none)), 'frame'.rjust(len(IntField.none)),
@@ -376,7 +383,7 @@ def table(results, calls, diff_results=None, *,
continue continue
is_last = (i == len(names_)-1) is_last = (i == len(names_)-1)
print('%-*s' % (width, prefixes[0+is_last] + name), end='') print('%-*s ' % (name_width, prefixes[0+is_last]+name), end='')
if tree: if tree:
print() print()
elif diff_results is None: elif diff_results is None:
@@ -444,7 +451,7 @@ def table(results, calls, diff_results=None, *,
r.stack_limit if r else None, r.stack_limit if r else None,
diff_r.stack_limit if diff_r else None) diff_r.stack_limit if diff_r else None)
print('%-*s' % (width, 'TOTAL'), end='') print('%-*s ' % (name_width, 'TOTAL'), end='')
if diff_results is None: if diff_results is None:
print(' %s %s' % ( print(' %s %s' % (
r.stack_frame.table() r.stack_frame.table()
+16 -10
View File
@@ -286,14 +286,20 @@ def table(results, diff_results=None, *,
reverse=False) reverse=False)
# print header # print header
print('%-36s' % ('%s%s' % ( if not summary:
'file' if by_file else 'struct', title = '%s%s' % (
' (%d added, %d removed)' % ( 'file' if by_file else 'struct',
sum(1 for n in table if n not in diff_table), ' (%d added, %d removed)' % (
sum(1 for n in diff_table if n not in table)) sum(1 for n in table if n not in diff_table),
if diff_results is not None and not percent else '') sum(1 for n in diff_table if n not in table))
if not summary else ''), if diff_results is not None and not percent else '')
end='') name_width = max(it.chain([23, len(title)], (len(n) for n in names)))
else:
title = ''
name_width = 23
name_width = 4*((name_width+1+4-1)//4)-1
print('%-*s ' % (name_width, title), end='')
if diff_results is None: if diff_results is None:
print(' %s' % ('size'.rjust(len(IntField.none)))) print(' %s' % ('size'.rjust(len(IntField.none))))
elif percent: elif percent:
@@ -316,7 +322,7 @@ def table(results, diff_results=None, *,
if not ratio and not all_: if not ratio and not all_:
continue continue
print('%-36s' % name, end='') print('%-*s ' % (name_width, name), end='')
if diff_results is None: if diff_results is None:
print(' %s' % ( print(' %s' % (
r.struct_size.table() r.struct_size.table()
@@ -355,7 +361,7 @@ def table(results, diff_results=None, *,
r.struct_size if r else None, r.struct_size if r else None,
diff_r.struct_size if diff_r else None) diff_r.struct_size if diff_r else None)
print('%-36s' % 'TOTAL', end='') print('%-*s ' % (name_width, 'TOTAL'), end='')
if diff_results is None: if diff_results is None:
print(' %s' % ( print(' %s' % (
r.struct_size.table() r.struct_size.table()
+90 -56
View File
@@ -422,8 +422,12 @@ def table(results, total, diff_results=None, diff_total=None, *,
**_): **_):
all_, all = all, __builtins__.all all_, all = all, __builtins__.all
table = {tuple(r.get(k,'') for k in by): r for r in results} table = {
diff_table = {tuple(r.get(k,'') for k in by): r for r in diff_results or []} ','.join(r.get(k,'') for k in by): r
for r in results}
diff_table = {
','.join(r.get(k,'') for k in by): r
for r in diff_results or []}
# sort, note that python's sort is stable # sort, note that python's sort is stable
names = list(table.keys() | diff_table.keys()) names = list(table.keys() | diff_table.keys())
@@ -446,30 +450,40 @@ def table(results, total, diff_results=None, diff_total=None, *,
reverse=False) reverse=False)
# print header # print header
print('%-36s' % ('%s%s' % ( if not summary:
','.join(k for k in by), title = '%s%s' % (
' (%d added, %d removed)' % ( ','.join(by),
sum(1 for n in table if n not in diff_table), ' (%d added, %d removed)' % (
sum(1 for n in diff_table if n not in table)) sum(1 for n in table if n not in diff_table),
if diff_results is not None and not percent else '') sum(1 for n in diff_table if n not in table))
if not summary else ''), if diff_results is not None and not percent else '')
end='') name_width = max(it.chain([23, len(title)], (len(n) for n in names)))
if diff_results is None:
print(' %s' % (
' '.join(k.rjust(len(types[k].none))
for k in fields)))
elif percent:
print(' %s' % (
' '.join(k.rjust(len(types[k].diff_none))
for k in fields)))
else: else:
title = ''
name_width = 23
name_width = 4*((name_width+1+4-1)//4)-1
print('%-*s ' % (name_width, title), end='')
if diff_results is None:
widths = [
4*((max(len(types[k].none), len(k))+1+4-1)//4)-1
for k in fields]
print(' %s' % (
' '.join(k.rjust(w) for w, k in zip(widths, fields))))
elif percent:
widths = [
4*((max(len(types[k].diff_none), len(k))+1+4-1)//4)-1
for k in fields]
print(' %s' % (
' '.join(k.rjust(w) for w, k in zip(widths, fields))))
else:
widths = [
4*((max(len(types[k].diff_none), 1+len(k))+1+4-1)//4)-1
for k in fields]
print(' %s %s %s' % ( print(' %s %s %s' % (
' '.join(('o'+k).rjust(len(types[k].diff_none)) ' '.join(('o'+k).rjust(w) for w, k in zip(widths, fields)),
for k in fields), ' '.join(('n'+k).rjust(w) for w, k in zip(widths, fields)),
' '.join(('n'+k).rjust(len(types[k].diff_none)) ' '.join(('d'+k).rjust(w) for w, k in zip(widths, fields))))
for k in fields),
' '.join(('d'+k).rjust(len(types[k].diff_none))
for k in fields)))
# print entries # print entries
if not summary: if not summary:
@@ -482,17 +496,21 @@ def table(results, total, diff_results=None, diff_total=None, *,
if not any(ratios) and not all_: if not any(ratios) and not all_:
continue continue
print('%-36s' % ','.join(name), end='') print('%-*s ' % (name_width, name), end='')
if diff_results is None: if diff_results is None:
print(' %s' % ( print(' %s' % (
' '.join(r[k].table() ' '.join(
if k in r else types[k].none (r[k].table()
for k in fields))) if k in r
else types[k].none).rjust(w)
for w, k in zip(widths, fields))))
elif percent: elif percent:
print(' %s%s' % ( print(' %s%s' % (
' '.join(r[k].diff_table() ' '.join(
if k in r else types[k].diff_none (r[k].diff_table().rjust(w)
for k in fields), if k in r
else types[k].diff_none).rjust(w)
for w, k in zip(widths, fields)),
' (%s)' % ', '.join( ' (%s)' % ', '.join(
'+∞%' if t == +m.inf '+∞%' if t == +m.inf
else '-∞%' if t == -m.inf else '-∞%' if t == -m.inf
@@ -500,15 +518,21 @@ def table(results, total, diff_results=None, diff_total=None, *,
for t in ratios))) for t in ratios)))
else: else:
print(' %s %s %s%s' % ( print(' %s %s %s%s' % (
' '.join(diff_r[k].diff_table() ' '.join(
if k in diff_r else types[k].diff_none (diff_r[k].diff_table()
for k in fields), if k in diff_r
' '.join(r[k].diff_table() else types[k].diff_none).rjust(w)
if k in r else types[k].diff_none for w, k in zip(widths, fields)),
for k in fields), ' '.join(
' '.join(types[k].diff_diff(r.get(k), diff_r.get(k)) (r[k].diff_table()
if k in r or k in diff_r else types[k].diff_none if k in r
for k in fields), else types[k].diff_none).rjust(w)
for w, k in zip(widths, fields)),
' '.join(
(types[k].diff_diff(r.get(k), diff_r.get(k))
if k in r or k in diff_r
else types[k].diff_none).rjust(w)
for w, k in zip(widths, fields)),
' (%s)' % ', '.join( ' (%s)' % ', '.join(
'+∞%' if t == +m.inf '+∞%' if t == +m.inf
else '-∞%' if t == -m.inf else '-∞%' if t == -m.inf
@@ -524,17 +548,21 @@ def table(results, total, diff_results=None, diff_total=None, *,
ratios = [types[k].ratio(r.get(k), diff_r.get(k)) ratios = [types[k].ratio(r.get(k), diff_r.get(k))
for k in fields] for k in fields]
print('%-36s' % 'TOTAL', end='') print('%-*s ' % (name_width, 'TOTAL'), end='')
if diff_results is None: if diff_results is None:
print(' %s' % ( print(' %s' % (
' '.join(r[k].table() ' '.join(
if k in r else types[k].none (r[k].table()
for k in fields))) if k in r
else types[k].none).rjust(w)
for w, k in zip(widths, fields))))
elif percent: elif percent:
print(' %s%s' % ( print(' %s%s' % (
' '.join(r[k].diff_table() ' '.join(
if k in r else types[k].diff_none (r[k].diff_table().rjust(w)
for k in fields), if k in r
else types[k].diff_none).rjust(w)
for w, k in zip(widths, fields)),
' (%s)' % ', '.join( ' (%s)' % ', '.join(
'+∞%' if t == +m.inf '+∞%' if t == +m.inf
else '-∞%' if t == -m.inf else '-∞%' if t == -m.inf
@@ -542,15 +570,21 @@ def table(results, total, diff_results=None, diff_total=None, *,
for t in ratios))) for t in ratios)))
else: else:
print(' %s %s %s%s' % ( print(' %s %s %s%s' % (
' '.join(diff_r[k].diff_table() ' '.join(
if k in diff_r else types[k].diff_none (diff_r[k].diff_table()
for k in fields), if k in diff_r
' '.join(r[k].diff_table() else types[k].diff_none).rjust(w)
if k in r else types[k].diff_none for w, k in zip(widths, fields)),
for k in fields), ' '.join(
' '.join(types[k].diff_diff(r.get(k), diff_r.get(k)) (r[k].diff_table()
if k in r or k in diff_r else types[k].diff_none if k in r
for k in fields), else types[k].diff_none).rjust(w)
for w, k in zip(widths, fields)),
' '.join(
(types[k].diff_diff(r.get(k), diff_r.get(k))
if k in r or k in diff_r
else types[k].diff_none).rjust(w)
for w, k in zip(widths, fields)),
' (%s)' % ', '.join( ' (%s)' % ', '.join(
'+∞%' if t == +m.inf '+∞%' if t == +m.inf
else '-∞%' if t == -m.inf else '-∞%' if t == -m.inf