Files
zk-data-agent/tests/test_format_utils.py
T

115 lines
3.5 KiB
Python

"""Tests for ``src/format_utils.py``."""
from __future__ import annotations
import unittest
from src.format_utils import (
format_duration,
format_file_size,
format_number,
format_seconds_short,
format_tokens,
)
class FormatFileSizeTest(unittest.TestCase):
def test_bytes(self) -> None:
self.assertEqual(format_file_size(0), '0 bytes')
self.assertEqual(format_file_size(512), '512 bytes')
def test_kb_with_decimal(self) -> None:
self.assertEqual(format_file_size(1536), '1.5KB')
def test_kb_trims_trailing_zero(self) -> None:
self.assertEqual(format_file_size(2048), '2KB')
def test_mb(self) -> None:
self.assertEqual(format_file_size(5 * 1024 * 1024), '5MB')
def test_gb(self) -> None:
self.assertEqual(format_file_size(2 * 1024 * 1024 * 1024), '2GB')
class FormatSecondsShortTest(unittest.TestCase):
def test_basic(self) -> None:
self.assertEqual(format_seconds_short(1234), '1.2s')
def test_under_one(self) -> None:
self.assertEqual(format_seconds_short(450), '0.5s')
class FormatDurationTest(unittest.TestCase):
def test_zero(self) -> None:
self.assertEqual(format_duration(0), '0s')
def test_sub_second(self) -> None:
self.assertEqual(format_duration(0.5), '0.0s')
def test_seconds_only(self) -> None:
self.assertEqual(format_duration(5_000), '5s')
def test_minutes_seconds(self) -> None:
self.assertEqual(format_duration(125_000), '2m 5s')
def test_hours(self) -> None:
self.assertEqual(format_duration(3_725_000), '1h 2m 5s')
def test_days(self) -> None:
# 1d 2h 3m
ms = 86_400_000 + 2 * 3_600_000 + 3 * 60_000 + 0
self.assertEqual(format_duration(ms), '1d 2h 3m')
def test_hide_trailing_zeros_minutes(self) -> None:
self.assertEqual(
format_duration(120_000, hide_trailing_zeros=True), '2m',
)
def test_hide_trailing_zeros_hours(self) -> None:
self.assertEqual(
format_duration(3_600_000, hide_trailing_zeros=True), '1h',
)
def test_most_significant_only_picks_largest_unit(self) -> None:
self.assertEqual(format_duration(125_000, most_significant_only=True), '2m')
self.assertEqual(
format_duration(3_725_000, most_significant_only=True), '1h',
)
def test_rounding_carry_over(self) -> None:
# 59,500 ms rounds seconds=60 → carries to 1m 0s
self.assertEqual(format_duration(59_500 + 60_000), '2m 0s')
class FormatNumberTest(unittest.TestCase):
def test_below_thousand(self) -> None:
self.assertEqual(format_number(900), '900')
self.assertEqual(format_number(0), '0')
def test_thousands_with_decimal(self) -> None:
self.assertEqual(format_number(1321), '1.3k')
def test_thousand_keeps_decimal(self) -> None:
self.assertEqual(format_number(1000), '1.0k')
def test_millions(self) -> None:
self.assertEqual(format_number(2_500_000), '2.5m')
def test_billions(self) -> None:
self.assertEqual(format_number(3_700_000_000), '3.7b')
class FormatTokensTest(unittest.TestCase):
def test_trims_decimal_zero(self) -> None:
self.assertEqual(format_tokens(1000), '1k')
def test_keeps_meaningful_decimal(self) -> None:
self.assertEqual(format_tokens(1321), '1.3k')
def test_below_thousand(self) -> None:
self.assertEqual(format_tokens(450), '450')
if __name__ == '__main__':
unittest.main()