hyf

Context-aware query service for Radroots
git clone https://radroots.dev/git/hyf.git
Log | Files | Refs | README | LICENSE

commit c3bc4fb27054eb6a7aaa7e75ab6285f47d44a6c5
parent 72042b42bdfe41c1170914d5bcdcf801c40a85f1
Author: triesap <tyson@radroots.org>
Date:   Mon, 21 Sep 2026 12:56:19 +0000

core: preserve approximation through normalization

Diffstat:
Msrc/hyf_core/domain/units.mojo | 9+++++++++
Mtests/test_domain.mojo | 13+++++++++++++
2 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/src/hyf_core/domain/units.mojo b/src/hyf_core/domain/units.mojo @@ -71,3 +71,12 @@ def apply_conversion(quantity: Quantity, rule: ConversionRule) raises -> Quantit result.unit = String(rule.to_unit) result.dimension = String(unit_dimension(rule.to_unit)) return result^ + + +def normalize_quantity_with_rule( + quantity: Quantity, rule: ConversionRule +) raises -> Quantity: + var result = apply_conversion(quantity, rule) + if result.qualifier != quantity.qualifier: + raise Error("normalization must preserve the approximation qualifier") + return result^ diff --git a/tests/test_domain.mojo b/tests/test_domain.mojo @@ -184,3 +184,16 @@ def test_pack_conversion_known_and_rejections() raises: ) with assert_raises(): _ = pack_rule("tomato.roma", "box", "mystery", 5, 0, "pack-1") + + +from hyf_core.domain.units import normalize_quantity_with_rule + + +def test_normalization_preserves_approximation() raises: + var approximate = new_quantity(80, 0, "lb", "mass", "approximate") + var rule = conversion_rule("lb", "kg", 45359237, 100000000, "test-1") + var normalized = normalize_quantity_with_rule(approximate, rule) + assert_equal(normalized.qualifier, "approximate") + assert_equal(normalized.unit, "kg") + var exact = new_quantity(80, 0, "lb", "mass", "exact") + assert_equal(normalize_quantity_with_rule(exact, rule).qualifier, "exact")