Fix rounding to 0
This commit is contained in:
46
tests/test_conversion_chart.py
Normal file
46
tests/test_conversion_chart.py
Normal file
@@ -0,0 +1,46 @@
|
||||
import math
|
||||
import re
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
CALCULATORS_TS = ROOT / "hdyc-svelte" / "src" / "lib" / "data" / "calculators.ts"
|
||||
NUMERIC_SAMPLES = [0.1, 0.5, 1, 2, 5, 10, 20, 50, 100]
|
||||
TARGET_SLUG = "angstroms-to-nautical-miles"
|
||||
|
||||
|
||||
def _parse_factor(slug: str) -> float:
|
||||
text = CALCULATORS_TS.read_text(encoding="utf-8")
|
||||
match = re.search(rf'"slug": "{slug}".*?"factor": ([0-9.eE+-]+)', text, flags=re.S)
|
||||
if not match:
|
||||
raise AssertionError(f"Could not find calculator definition for '{slug}'")
|
||||
return float(match.group(1))
|
||||
|
||||
|
||||
def _js_fmt(value: float) -> str:
|
||||
if not math.isfinite(value):
|
||||
return str(value)
|
||||
if value == 0:
|
||||
return "0"
|
||||
abs_val = abs(value)
|
||||
if abs_val < 1e-6:
|
||||
return f"{value:.6e}"
|
||||
rounded = float(f"{value:.6f}")
|
||||
if rounded.is_integer():
|
||||
return str(int(rounded))
|
||||
return repr(rounded)
|
||||
|
||||
|
||||
class QuickConversionChartRoundingTests(unittest.TestCase):
|
||||
def test_angstroms_to_nautical_miles_chart_does_not_round_to_zero(self) -> None:
|
||||
factor = _parse_factor(TARGET_SLUG)
|
||||
outputs = [_js_fmt(sample * factor) for sample in NUMERIC_SAMPLES]
|
||||
self.assertTrue(
|
||||
any(output != "0" for output in outputs),
|
||||
f"{TARGET_SLUG} quick conversion chart rounded every sample down to 0: {outputs}",
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user