Release Fenris 0.5.0 with Chalktone dashboard and dotted activity plots
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
"""Visible geometry and evidence boundaries of the terminal volume plot."""
|
||||
from fenris.activity_plot import VolumePoint, volume_plot
|
||||
from fenris.themes import get_graph_colors
|
||||
|
||||
|
||||
def plot(points, selected=-1, width=48, height=10):
|
||||
return volume_plot(points, width, height, selected, get_graph_colors("chalktone"))
|
||||
|
||||
|
||||
def test_trace_fits_viewport_and_uses_time_not_sample_index():
|
||||
points = [VolumePoint(t, v, str(t)) for t, v in ((0, 0), (3, 50), (30, 100))]
|
||||
text, columns, unit = plot(points)
|
||||
assert unit == "B"
|
||||
assert len(text.plain.splitlines()) == 10
|
||||
assert all(len(line) <= 48 for line in text.plain.splitlines())
|
||||
assert columns[1] - columns[0] < (columns[2] - columns[0]) / 5
|
||||
assert any(0x2801 <= ord(c) <= 0x28ff for c in text.plain)
|
||||
assert not any(c in text.plain for c in "█▒░")
|
||||
assert "100.00" in text.plain and "0.00" in text.plain
|
||||
|
||||
|
||||
def test_gap_breaks_trace_while_measured_zero_stays_on_axis():
|
||||
text, columns, _ = plot([
|
||||
VolumePoint(0, 0, "00:00"), VolumePoint(1, None, "00:03", "gap"),
|
||||
VolumePoint(2, 100, "00:06"),
|
||||
])
|
||||
rows = text.plain.splitlines()
|
||||
assert "?" in rows[-2]
|
||||
# No invented intermediate dots on either side of the missing measurement.
|
||||
for row in rows[:-2]:
|
||||
assert all(c == " " for c in row[columns[0] + 1:columns[-1]])
|
||||
assert 0x2801 <= ord(rows[-3][columns[0]]) <= 0x28ff
|
||||
|
||||
|
||||
def test_partial_and_unallocated_totals_are_isolated_and_labelled():
|
||||
text, columns, unit = plot([
|
||||
VolumePoint(0, 1_000_000, "01", "partial"),
|
||||
VolumePoint(1, 2_000_000, "02", "unallocated"),
|
||||
VolumePoint(2, 3_000_000, "03"),
|
||||
])
|
||||
assert unit == "MB"
|
||||
assert "~" in text.plain and "u" in text.plain
|
||||
for row in text.plain.splitlines()[:-2]:
|
||||
assert all(c == " " for c in row[columns[0] + 1:columns[1]])
|
||||
|
||||
|
||||
def test_many_intervals_and_selection_fit_small_plot_without_losing_points():
|
||||
points = [VolumePoint(i, i % 9 * 1_000_000, str(i)) for i in range(180)]
|
||||
text, columns, _ = plot(points, selected=100, width=32, height=6)
|
||||
assert len(columns) == len(points)
|
||||
assert text.plain.splitlines()[-2][columns[100]] == "▼"
|
||||
assert all(len(row) == 32 for row in text.plain.splitlines())
|
||||
Reference in New Issue
Block a user