mirror of
https://github.com/kuhyx/utils.git
synced 2026-11-10 19:07:17 +01:00
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WzxdWXTUM9dpnCS2wtFkx4
72 lines
2.5 KiB
Python
72 lines
2.5 KiB
Python
"""Tests for scripts/conformance_diff.py (100 % branch coverage)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
import conformance_diff
|
|
import pytest
|
|
|
|
if TYPE_CHECKING:
|
|
from pathlib import Path
|
|
|
|
|
|
def previous_report(conf: float | None = 50.0) -> dict:
|
|
return {
|
|
"surfaces": [{"name": ".", "token_usages": 1, "raw_literals": 1, "conformance": conf}],
|
|
"totals": {"name": "TOTAL", "token_usages": 1, "raw_literals": 1, "conformance": conf},
|
|
}
|
|
|
|
|
|
def current_report() -> dict:
|
|
return {
|
|
"surfaces": [
|
|
{"name": ".", "files": 1, "token_usages": 3, "raw_literals": 1, "conformance": 75.0},
|
|
{"name": "new", "files": 1, "token_usages": 2, "raw_literals": 0, "conformance": None},
|
|
],
|
|
"totals": {"name": "TOTAL", "files": 2, "token_usages": 5, "raw_literals": 1, "conformance": 83.3},
|
|
}
|
|
|
|
|
|
def test_delta_rows() -> None:
|
|
rows = {r["name"]: r for r in conformance_diff.delta(current_report(), previous_report())["rows"]}
|
|
assert rows["."] == {"name": ".", "token_usages": 2.0, "raw_literals": 0.0, "conformance": 25.0}
|
|
assert rows["new"]["token_usages"] == 2.0
|
|
assert rows["new"]["conformance"] is None
|
|
assert rows["TOTAL"]["conformance"] == 33.3
|
|
|
|
|
|
def test_delta_missing_previous_conformance() -> None:
|
|
rows = conformance_diff.delta(current_report(), previous_report(None))["rows"]
|
|
assert rows[0]["conformance"] is None
|
|
|
|
|
|
def test_num_and_fmt() -> None:
|
|
assert conformance_diff._num("x") == 0.0
|
|
assert conformance_diff._num(2) == 2.0
|
|
assert conformance_diff._fmt(None) == "-"
|
|
assert conformance_diff._fmt(2.5) == "2.5"
|
|
assert conformance_diff._fmt(2, signed=True) == "+2"
|
|
|
|
|
|
def test_table_without_and_with_delta() -> None:
|
|
plain = conformance_diff.table(current_report(), None)
|
|
assert plain.splitlines()[0].split() == ["surface", "files", "tokens", "raw", "conf%"]
|
|
assert "TOTAL" in plain
|
|
diff = conformance_diff.delta(current_report(), previous_report())
|
|
text = conformance_diff.table(current_report(), diff)
|
|
assert "d.conf" in text
|
|
assert "+25" in text
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"payload",
|
|
["[]", "{}", '{"surfaces": 1, "totals": {}}', '{"surfaces": [1], "totals": {}}',
|
|
'{"surfaces": [], "totals": 1}'],
|
|
)
|
|
def test_load_previous_rejects_bad_shape(tmp_path: Path, payload: str) -> None:
|
|
path = tmp_path / "p.json"
|
|
path.write_text(payload, encoding="utf-8")
|
|
with pytest.raises(ValueError, match="not a conformance report"):
|
|
conformance_diff.load_previous(path)
|