35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
import pytest
|
|
|
|
from idea41_monoidalscheduler_category_theoretic.dsl import ResourceType, Morphism, MonoidalCategory
|
|
from idea41_monoidalscheduler_category_theoretic.optimizer import LocalProblem, solve_local_problem
|
|
|
|
|
|
def test_basic_dsl_build_and_tensor_compose():
|
|
a = ResourceType(name="RobotArm", capacity=10.0)
|
|
b = ResourceType(name="Conveyor", capacity=5.0)
|
|
|
|
m1 = Morphism(name="arm_to_conv", input_type=a, output_type=b, latency_ms=2.0)
|
|
m2 = Morphism(name="conv_to_arm", input_type=b, output_type=a, latency_ms=3.0)
|
|
|
|
cat1 = MonoidalCategory(objects=[a], morphisms=[m1])
|
|
cat2 = MonoidalCategory(objects=[b], morphisms=[m2])
|
|
|
|
tensor = cat1.tensor(cat2)
|
|
composed = tensor.compose(cat1)
|
|
|
|
assert len(composed.objects) >= 1
|
|
assert len(composed.morphisms) >= 1
|
|
|
|
|
|
def test_solve_local_problem_basic_feasibility():
|
|
lp = LocalProblem(
|
|
name="demo",
|
|
resources={"R1": 5.0, "R2": 0.0},
|
|
constraints={"c1": 1.0},
|
|
)
|
|
res = solve_local_problem(lp)
|
|
assert res["problem"] == "demo"
|
|
assert isinstance(res["feasible"], bool)
|
|
# With non-negative inputs, our stub should be feasible
|
|
assert res["feasible"] is True
|