hyf

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

commit 9c7fa5606ba4d9abd230eee2efeb4b057ad13372
parent ec1d857aae82dba1d3964e8736d488202bbf3d1f
Author: triesap <tyson@radroots.org>
Date:   Mon, 21 Sep 2026 13:48:55 +0000

core: associate quantities with farm products

Diffstat:
Asrc/hyf_application/farm_quantity.mojo | 37+++++++++++++++++++++++++++++++++++++
Mtests/test_application.mojo | 20++++++++++++++++++++
2 files changed, 57 insertions(+), 0 deletions(-)

diff --git a/src/hyf_application/farm_quantity.mojo b/src/hyf_application/farm_quantity.mojo @@ -0,0 +1,37 @@ + + +@fieldwise_init +struct ProductQuantityAssociation(Copyable, Movable): + var product_phrase: String + var quantity_value: Int + var quantity_scale: Int + var unit: String + var qualifier: String + var unreserved_verified: Bool + + +def associate_quantity( + product_phrase: String, + quantity_value: Int, + quantity_scale: Int, + unit: String, + qualifier: String, +) raises -> ProductQuantityAssociation: + if String(product_phrase).strip().byte_length() == 0: + raise Error("association requires a product phrase") + if quantity_scale < 0 or quantity_scale > 9: + raise Error("association scale must be between 0 and 9") + if qualifier != "exact" and qualifier != "approximate": + raise Error("association qualifier must be exact or approximate") + return ProductQuantityAssociation( + product_phrase=String(product_phrase), + quantity_value=quantity_value, + quantity_scale=quantity_scale, + unit=String(unit), + qualifier=String(qualifier), + unreserved_verified=False, + ) + + +def reported_quantity_is_unreserved_stock() -> Bool: + return False diff --git a/tests/test_application.mojo b/tests/test_application.mojo @@ -62,3 +62,23 @@ def test_product_specific_supply_status_per_crop() raises: assert_true(status_is_forecast(forecast[0].status)) var unknown = interpret_product_statuses(products, "probably") assert_equal(unknown[0].status, "unclear") + + +from hyf_application.farm_quantity import ( + ProductQuantityAssociation, + associate_quantity, + reported_quantity_is_unreserved_stock, +) + + +def test_quantity_association_per_product_without_swap() raises: + var tomatoes = associate_quantity("roma tomatoes", 80, 0, "lb", "approximate") + var basil = associate_quantity("basil", 0, 0, "bunch", "exact") + assert_equal(tomatoes.product_phrase, "roma tomatoes") + assert_equal(tomatoes.quantity_value, 80) + assert_equal(tomatoes.qualifier, "approximate") + assert_equal(basil.product_phrase, "basil") + assert_true(tomatoes.quantity_value != basil.quantity_value) + assert_true(not reported_quantity_is_unreserved_stock()) + with assert_raises(): + _ = associate_quantity("", 1, 0, "kg", "exact")