mirror of
https://github.com/littlefs-project/littlefs.git
synced 2025-12-06 23:52:44 +00:00
Tweaked cov.py, summary.py, to render fraction percents as notes
This matches how diff percentages are rendered, and simplifies the internal table rendering by making Frac less of a special case. It also allows for other type notes in the future. One concern is how all the notes are shoved to the side, which may make it a bit harder to find related percentages. If this becomes annoying we should probably look into interspersing all notes (including diff percentages) between the relevant columns. Before: function lines branches lfsr_rbyd_appendattr 230/231 99.6% 172/192 89.6% lfsr_rbyd_p_recolor 33/34 97.1% 11/12 91.7% lfs_alloc 40/42 95.2% 21/24 87.5% lfsr_rbyd_appendcompaction 54/57 94.7% 39/42 92.9% ... After: function lines branches lfsr_rbyd_appendattr 230/231 172/192 (99.6%, 89.6%) lfsr_rbyd_p_recolor 33/34 11/12 (97.1%, 91.7%) lfs_alloc 40/42 21/24 (95.2%, 87.5%) lfsr_rbyd_appendcompaction 54/57 39/42 (94.7%, 92.9%) ...
This commit is contained in:
@@ -63,10 +63,7 @@ class Int(co.namedtuple('Int', 'x')):
|
||||
def table(self):
|
||||
return '%7s' % (self,)
|
||||
|
||||
diff_none = '%7s' % '-'
|
||||
diff_table = table
|
||||
|
||||
def diff_diff(self, other):
|
||||
def diff(self, other):
|
||||
new = self.x if self else 0
|
||||
old = other.x if other else 0
|
||||
diff = new - old
|
||||
@@ -375,7 +372,7 @@ def table(Result, results, diff_results=None, *,
|
||||
header.append('')
|
||||
lines.append(header)
|
||||
|
||||
def table_entry(name, r, diff_r=None, ratios=[]):
|
||||
def table_entry(name, r, diff_r=None):
|
||||
entry = []
|
||||
entry.append(name)
|
||||
if diff_results is None:
|
||||
@@ -385,37 +382,43 @@ def table(Result, results, diff_results=None, *,
|
||||
else types[k].none)
|
||||
elif percent:
|
||||
for k in fields:
|
||||
entry.append(getattr(r, k).diff_table()
|
||||
entry.append(getattr(r, k).table()
|
||||
if getattr(r, k, None) is not None
|
||||
else types[k].diff_none)
|
||||
else types[k].none)
|
||||
else:
|
||||
for k in fields:
|
||||
entry.append(getattr(diff_r, k).diff_table()
|
||||
entry.append(getattr(diff_r, k).table()
|
||||
if getattr(diff_r, k, None) is not None
|
||||
else types[k].diff_none)
|
||||
else types[k].none)
|
||||
for k in fields:
|
||||
entry.append(getattr(r, k).diff_table()
|
||||
entry.append(getattr(r, k).table()
|
||||
if getattr(r, k, None) is not None
|
||||
else types[k].diff_none)
|
||||
else types[k].none)
|
||||
for k in fields:
|
||||
entry.append(types[k].diff_diff(
|
||||
entry.append(types[k].diff(
|
||||
getattr(r, k, None),
|
||||
getattr(diff_r, k, None)))
|
||||
if diff_results is None:
|
||||
entry.append('')
|
||||
elif percent:
|
||||
entry.append(' (%s)' % ', '.join(
|
||||
'+∞%' if t == +m.inf
|
||||
else '-∞%' if t == -m.inf
|
||||
else '%+.1f%%' % (100*t)
|
||||
for t in ratios))
|
||||
notes = []
|
||||
for k in fields:
|
||||
try:
|
||||
notes.extend(getattr(r, k).notes())
|
||||
except AttributeError:
|
||||
pass
|
||||
entry.append(' (%s)' % ', '.join(notes)
|
||||
if notes else '')
|
||||
else:
|
||||
ratios = [
|
||||
types[k].ratio(
|
||||
getattr(r, k, None),
|
||||
getattr(diff_r, k, None))
|
||||
for k in fields]
|
||||
entry.append(' (%s)' % ', '.join(
|
||||
'+∞%' if t == +m.inf
|
||||
else '-∞%' if t == -m.inf
|
||||
else '%+.1f%%' % (100*t)
|
||||
for t in ratios)
|
||||
if any(ratios) else '')
|
||||
if percent or any(ratios) else '')
|
||||
return entry
|
||||
|
||||
# entries
|
||||
@@ -424,34 +427,26 @@ def table(Result, results, diff_results=None, *,
|
||||
r = table.get(name)
|
||||
if diff_results is None:
|
||||
diff_r = None
|
||||
ratios = None
|
||||
else:
|
||||
diff_r = diff_table.get(name)
|
||||
ratios = [
|
||||
types[k].ratio(
|
||||
getattr(r, k, None),
|
||||
getattr(diff_r, k, None))
|
||||
for k in fields]
|
||||
if not all_ and not any(ratios):
|
||||
if not all_ and not any(
|
||||
types[k].ratio(
|
||||
getattr(r, k, None),
|
||||
getattr(diff_r, k, None))
|
||||
for k in fields):
|
||||
continue
|
||||
lines.append(table_entry(name, r, diff_r, ratios))
|
||||
lines.append(table_entry(name, r, diff_r))
|
||||
|
||||
# total
|
||||
r = next(iter(fold(Result, results, by=[])), None)
|
||||
if diff_results is None:
|
||||
diff_r = None
|
||||
ratios = None
|
||||
else:
|
||||
diff_r = next(iter(fold(Result, diff_results, by=[])), None)
|
||||
ratios = [
|
||||
types[k].ratio(
|
||||
getattr(r, k, None),
|
||||
getattr(diff_r, k, None))
|
||||
for k in fields]
|
||||
lines.append(table_entry('TOTAL', r, diff_r, ratios))
|
||||
lines.append(table_entry('TOTAL', r, diff_r))
|
||||
|
||||
# find the best widths, note that column 0 contains the names and column -1
|
||||
# the ratios, so those are handled a bit differently
|
||||
# find the best widths, note that column 0 contains the names and
|
||||
# column -1 the ratios/notes, so those are handled a bit differently
|
||||
widths = [
|
||||
((max(it.chain([w], (len(l[i]) for l in lines)))+1+4-1)//4)*4-1
|
||||
for w, i in zip(
|
||||
|
||||
Reference in New Issue
Block a user