diff options
-rw-r--r-- | fietsboek/util.py | 8 | ||||
-rw-r--r-- | tests/unit/test_util.py | 16 |
2 files changed, 22 insertions, 2 deletions
diff --git a/fietsboek/util.py b/fietsboek/util.py index ecd2f31..acbb45d 100644 --- a/fietsboek/util.py +++ b/fietsboek/util.py @@ -210,12 +210,16 @@ def human_size(num_bytes: int) -> str: """ num_bytes = float(num_bytes) suffixes = ["B", "KiB", "MiB", "GiB"] + prefix = "" + if num_bytes < 0: + prefix = "-" + num_bytes = -num_bytes for suffix in suffixes: if num_bytes < 1024 or suffix == suffixes[-1]: if suffix == "B": # Don't do the decimal point for bytes - return f"{int(num_bytes)} {suffix}" - return f"{num_bytes:.1f} {suffix}" + return f"{prefix}{int(num_bytes)} {suffix}" + return f"{prefix}{num_bytes:.1f} {suffix}" num_bytes /= 1024 # Unreachable: return "" diff --git a/tests/unit/test_util.py b/tests/unit/test_util.py index 1a56911..6dc8e7d 100644 --- a/tests/unit/test_util.py +++ b/tests/unit/test_util.py @@ -88,6 +88,22 @@ def test_tour_metadata(gpx_file): def test_mps_to_kph(mps, kph): assert util.mps_to_kph(mps) == pytest.approx(kph, 0.1) +@pytest.mark.parametrize('num_bytes, expected', [ + (1, '1 B'), + (1023, '1023 B'), + (1024, '1.0 KiB'), + (1536, '1.5 KiB'), + (1024 ** 2, '1.0 MiB'), + (1024 ** 3, '1.0 GiB'), + (0, '0 B'), + # Negative sizes in itself are a bit weird, but they make sense as the + # difference between two size values, so they should still work. + (-1, '-1 B'), + (-1024, '-1.0 KiB'), +]) +def test_human_size(num_bytes, expected): + assert util.human_size(num_bytes) == expected + def test_tile_url(app_request): route_url = util.tile_url(app_request, "tile-proxy", provider="bobby") |