hyf

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

commit 605430fb559707903304ba3081d2cb525341aff8
parent 65d05af52ee61a2a1371e848859b299eb2d15aab
Author: triesap <tyson@radroots.org>
Date:   Mon, 21 Sep 2026 13:54:25 +0000

core: implement per-lot quantity feasibility

Diffstat:
Msrc/hyf_application/match_checks.mojo | 17+++++++++++++++++
Mtests/test_application.mojo | 14++++++++++++++
2 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/src/hyf_application/match_checks.mojo b/src/hyf_application/match_checks.mojo @@ -118,3 +118,20 @@ def check_price(ceiling: Price, offered: Price) raises -> ConstraintAssessment: if price_compare(offered, ceiling) <= 0: return constraint_assessment("price", "pass", True, "price_within_ceiling") return constraint_assessment("price", "fail", True, "price_above_ceiling") + + +def check_quantity( + required: Quantity, + available: Quantity, + available_known: Bool, + partial_allowed: Bool, +) raises -> ConstraintAssessment: + if not available_known: + return constraint_assessment("quantity", "unknown", True, "stock_unknown") + if quantity_compare(available, required) >= 0: + return constraint_assessment("quantity", "pass", True, "quantity_sufficient") + if partial_allowed: + return constraint_assessment( + "quantity", "pass", True, "partial_permitted" + ) + return constraint_assessment("quantity", "fail", True, "quantity_insufficient") diff --git a/tests/test_application.mojo b/tests/test_application.mojo @@ -475,3 +475,17 @@ def test_applicable_price_and_minimum_order_checks() raises: assert_equal(check_price(ceiling, _known_price(550, 2, "CAD", "per_unit")).result, "fail") assert_equal(check_price(ceiling, _unknown_price()).result, "unknown") assert_equal(check_price(_unknown_price(), _known_price(1, 2, "CAD", "per_unit")).result, "pass") + + +from hyf_application.match_checks import check_quantity +from hyf_core.domain.quantity import new_quantity + + +def test_per_lot_quantity_feasibility() raises: + var required = new_quantity(50, 0, "kg", "mass", "exact") + var enough = new_quantity(50, 0, "kg", "mass", "exact") + var short = new_quantity(30, 0, "kg", "mass", "exact") + assert_equal(check_quantity(required, enough, True, False).result, "pass") + assert_equal(check_quantity(required, short, True, False).result, "fail") + assert_equal(check_quantity(required, short, True, True).result, "pass") + assert_equal(check_quantity(required, short, False, False).result, "unknown")