from catopt_query.canonical import CanonicalPlan from catopt_query.solver import optimize_across_shards from catopt_query.protocol import PlanDelta def test_solver_composes_plans(): p1 = CanonicalPlan(projection=["a"], predicates=["a>0"], estimated_cost=1.0) p2 = CanonicalPlan(projection=["b"], predicates=["b<5"], estimated_cost=2.0) delta = optimize_across_shards([p1, p2], bandwidth_budget=10.0) assert isinstance(delta, PlanDelta) assert "projections" in delta.changes assert "aggregated_cost" in delta.changes