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
+16 -10
View File
@@ -243,14 +243,20 @@ def table(results, diff_results=None, *,
reverse=False)
# print header
print('%-36s' % ('%s%s' % (
'file' if by_file else 'function',
' (%d added, %d removed)' % (
sum(1 for n in table if n not in diff_table),
sum(1 for n in diff_table if n not in table))
if diff_results is not None and not percent else '')
if not summary else ''),
end='')
if not summary:
title = '%s%s' % (
'file' if by_file else 'function',
' (%d added, %d removed)' % (
sum(1 for n in table if n not in diff_table),
sum(1 for n in diff_table if n not in table))
if diff_results is not None and not percent else '')
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:
print(' %s' % ('size'.rjust(len(IntField.none))))
elif percent:
@@ -273,7 +279,7 @@ def table(results, diff_results=None, *,
if not ratio and not all_:
continue
print('%-36s' % name, end='')
print('%-*s ' % (name_width, name), end='')
if diff_results is None:
print(' %s' % (
r.code_size.table()
@@ -312,7 +318,7 @@ def table(results, diff_results=None, *,
r.code_size if 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:
print(' %s' % (
r.code_size.table()
+18 -16
View File
@@ -320,12 +320,12 @@ def table(results, diff_results=None, *,
else ['function'])
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.function: r
for r in results}
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.function: r
for r in diff_results or []}
@@ -359,16 +359,20 @@ def table(results, diff_results=None, *,
reverse=False)
# print header
print('%-36s' % ('%s%s' % (
'line' if by_line
else 'file' if by_file
else 'function',
' (%d added, %d removed)' % (
sum(1 for n in table if n not in diff_table),
sum(1 for n in diff_table if n not in table))
if diff_results is not None and not percent else '')
if not summary else ''),
end='')
if not summary:
title = '%s%s' % (
'line' if by_line else 'file' if by_file else 'function',
' (%d added, %d removed)' % (
sum(1 for n in table if n not in diff_table),
sum(1 for n in diff_table if n not in table))
if diff_results is not None and not percent else '')
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:
print(' %s %s' % (
'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_:
continue
print('%-36s' % (
':'.join('%s' % n for n in name)
if by_line else name), end='')
print('%-*s ' % (name_width, name), end='')
if diff_results is None:
print(' %s %s' % (
r.coverage_lines.table()
@@ -460,7 +462,7 @@ def table(results, diff_results=None, *,
r.coverage_branches if 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:
print(' %s %s' % (
r.coverage_lines.table()
+16 -10
View File
@@ -244,14 +244,20 @@ def table(results, diff_results=None, *,
reverse=False)
# print header
print('%-36s' % ('%s%s' % (
'file' if by_file else 'function',
' (%d added, %d removed)' % (
sum(1 for n in table if n not in diff_table),
sum(1 for n in diff_table if n not in table))
if diff_results is not None and not percent else '')
if not summary else ''),
end='')
if not summary:
title = '%s%s' % (
'file' if by_file else 'function',
' (%d added, %d removed)' % (
sum(1 for n in table if n not in diff_table),
sum(1 for n in diff_table if n not in table))
if diff_results is not None and not percent else '')
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:
print(' %s' % ('size'.rjust(len(IntField.none))))
elif percent:
@@ -274,7 +280,7 @@ def table(results, diff_results=None, *,
if not ratio and not all_:
continue
print('%-36s' % name, end='')
print('%-*s ' % (name_width, name), end='')
if diff_results is None:
print(' %s' % (
r.data_size.table()
@@ -313,7 +319,7 @@ def table(results, diff_results=None, *,
r.data_size if 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:
print(' %s' % (
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 (),
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
if not tree:
print('%-*s' % (width, '%s%s' % (
if not summary:
title = '%s%s' % (
'file' if by_file else 'function',
' (%d added, %d removed)' % (
sum(1 for n in table if n not in diff_table),
sum(1 for n in diff_table if n not in table))
if diff_results is not None and not percent else '')
if not summary 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
# 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:
print(' %s %s' % (
'frame'.rjust(len(IntField.none)),
@@ -376,7 +383,7 @@ def table(results, calls, diff_results=None, *,
continue
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:
print()
elif diff_results is None:
@@ -444,7 +451,7 @@ def table(results, calls, diff_results=None, *,
r.stack_limit if 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:
print(' %s %s' % (
r.stack_frame.table()
+16 -10
View File
@@ -286,14 +286,20 @@ def table(results, diff_results=None, *,
reverse=False)
# print header
print('%-36s' % ('%s%s' % (
'file' if by_file else 'struct',
' (%d added, %d removed)' % (
sum(1 for n in table if n not in diff_table),
sum(1 for n in diff_table if n not in table))
if diff_results is not None and not percent else '')
if not summary else ''),
end='')
if not summary:
title = '%s%s' % (
'file' if by_file else 'struct',
' (%d added, %d removed)' % (
sum(1 for n in table if n not in diff_table),
sum(1 for n in diff_table if n not in table))
if diff_results is not None and not percent else '')
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:
print(' %s' % ('size'.rjust(len(IntField.none))))
elif percent:
@@ -316,7 +322,7 @@ def table(results, diff_results=None, *,
if not ratio and not all_:
continue
print('%-36s' % name, end='')
print('%-*s ' % (name_width, name), end='')
if diff_results is None:
print(' %s' % (
r.struct_size.table()
@@ -355,7 +361,7 @@ def table(results, diff_results=None, *,
r.struct_size if 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:
print(' %s' % (
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
table = {tuple(r.get(k,'') for k in by): r for r in results}
diff_table = {tuple(r.get(k,'') for k in by): r for r in diff_results or []}
table = {
','.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
names = list(table.keys() | diff_table.keys())
@@ -446,30 +450,40 @@ def table(results, total, diff_results=None, diff_total=None, *,
reverse=False)
# print header
print('%-36s' % ('%s%s' % (
','.join(k for k in by),
' (%d added, %d removed)' % (
sum(1 for n in table if n not in diff_table),
sum(1 for n in diff_table if n not in table))
if diff_results is not None and not percent else '')
if not summary else ''),
end='')
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)))
if not summary:
title = '%s%s' % (
','.join(by),
' (%d added, %d removed)' % (
sum(1 for n in table if n not in diff_table),
sum(1 for n in diff_table if n not in table))
if diff_results is not None and not percent else '')
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:
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' % (
' '.join(('o'+k).rjust(len(types[k].diff_none))
for k in fields),
' '.join(('n'+k).rjust(len(types[k].diff_none))
for k in fields),
' '.join(('d'+k).rjust(len(types[k].diff_none))
for k in fields)))
' '.join(('o'+k).rjust(w) for w, k in zip(widths, fields)),
' '.join(('n'+k).rjust(w) for w, k in zip(widths, fields)),
' '.join(('d'+k).rjust(w) for w, k in zip(widths, fields))))
# print entries
if not summary:
@@ -482,17 +496,21 @@ def table(results, total, diff_results=None, diff_total=None, *,
if not any(ratios) and not all_:
continue
print('%-36s' % ','.join(name), end='')
print('%-*s ' % (name_width, name), end='')
if diff_results is None:
print(' %s' % (
' '.join(r[k].table()
if k in r else types[k].none
for k in fields)))
' '.join(
(r[k].table()
if k in r
else types[k].none).rjust(w)
for w, k in zip(widths, fields))))
elif percent:
print(' %s%s' % (
' '.join(r[k].diff_table()
if k in r else types[k].diff_none
for k in fields),
' '.join(
(r[k].diff_table().rjust(w)
if k in r
else types[k].diff_none).rjust(w)
for w, k in zip(widths, fields)),
' (%s)' % ', '.join(
'+∞%' 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)))
else:
print(' %s %s %s%s' % (
' '.join(diff_r[k].diff_table()
if k in diff_r else types[k].diff_none
for k in fields),
' '.join(r[k].diff_table()
if k in r else types[k].diff_none
for k in 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
for k in fields),
' '.join(
(diff_r[k].diff_table()
if k in diff_r
else types[k].diff_none).rjust(w)
for w, k in zip(widths, fields)),
' '.join(
(r[k].diff_table()
if k in r
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(
'+∞%' 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))
for k in fields]
print('%-36s' % 'TOTAL', end='')
print('%-*s ' % (name_width, 'TOTAL'), end='')
if diff_results is None:
print(' %s' % (
' '.join(r[k].table()
if k in r else types[k].none
for k in fields)))
' '.join(
(r[k].table()
if k in r
else types[k].none).rjust(w)
for w, k in zip(widths, fields))))
elif percent:
print(' %s%s' % (
' '.join(r[k].diff_table()
if k in r else types[k].diff_none
for k in fields),
' '.join(
(r[k].diff_table().rjust(w)
if k in r
else types[k].diff_none).rjust(w)
for w, k in zip(widths, fields)),
' (%s)' % ', '.join(
'+∞%' 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)))
else:
print(' %s %s %s%s' % (
' '.join(diff_r[k].diff_table()
if k in diff_r else types[k].diff_none
for k in fields),
' '.join(r[k].diff_table()
if k in r else types[k].diff_none
for k in 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
for k in fields),
' '.join(
(diff_r[k].diff_table()
if k in diff_r
else types[k].diff_none).rjust(w)
for w, k in zip(widths, fields)),
' '.join(
(r[k].diff_table()
if k in r
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(
'+∞%' if t == +m.inf
else '-∞%' if t == -m.inf