from decimal import Decimal import pytest from opengoods.units import ( UnitError, canonical_unit_code, kcal_to_kj, kj_to_kcal, normalize, ) def test_normalize_mass_kg_to_g(): result = normalize("1.5", "kg") assert result.dimension == "mass" assert result.canonical_unit == "g" assert result.canonical_value == Decimal("1500.0") def test_normalize_volume_litre_alias(): result = normalize(2, "升") assert result.dimension == "volume" assert result.canonical_value == Decimal("2000") assert result.canonical_unit == "ml" def test_normalize_energy_kcal_to_kj(): result = normalize("539", "kcal") assert result.dimension == "energy" assert result.canonical_unit == "kJ" assert result.canonical_value == Decimal("539") * Decimal("4.184") def test_canonical_unit_code_alias(): assert canonical_unit_code("公斤") == "kg" assert canonical_unit_code(" G ") == "g" def test_unknown_unit_raises(): with pytest.raises(UnitError): normalize(1, "parsec") def test_energy_roundtrip(): assert kcal_to_kj(1) == Decimal("4.184") assert kj_to_kcal(Decimal("4.184")) == Decimal("1")