domain-level constraints
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
from physcom.engine.constraint_resolver import ConstraintResolver
|
||||
from physcom.models.combination import Combination
|
||||
from physcom.models.domain import DomainConstraint
|
||||
from physcom.models.entity import Entity, Dependency
|
||||
|
||||
|
||||
@@ -140,3 +141,22 @@ def test_energy_density_no_constraint_if_no_provider():
|
||||
result = resolver.resolve(combo)
|
||||
density_violations = [v for v in result.violations if "energy density" in v]
|
||||
assert len(density_violations) == 0
|
||||
|
||||
|
||||
def test_domain_constraint_blocks_wrong_medium(spaceship, solar_sail, solar_radiation):
|
||||
"""Spaceship (space medium) should be blocked in a ground-only domain."""
|
||||
resolver = ConstraintResolver()
|
||||
combo = Combination(entities=[spaceship, solar_sail, solar_radiation])
|
||||
constraints = [DomainConstraint("medium", ["ground", "air"])]
|
||||
result = resolver.check_domain_constraints(combo, constraints)
|
||||
assert result.status == "p1_fail"
|
||||
assert any("medium" in v for v in result.violations)
|
||||
|
||||
|
||||
def test_domain_constraint_allows_matching_medium(bicycle, human_pedalling, food_calories):
|
||||
"""Bicycle (ground medium) should pass a ground+air domain constraint."""
|
||||
resolver = ConstraintResolver()
|
||||
combo = Combination(entities=[bicycle, human_pedalling, food_calories])
|
||||
constraints = [DomainConstraint("medium", ["ground", "air"])]
|
||||
result = resolver.check_domain_constraints(combo, constraints)
|
||||
assert result.status == "valid"
|
||||
|
||||
Reference in New Issue
Block a user