# ============================================================ # 算法库目录完整性黄金测试(plan.md §9.5 / 矩阵 86 行剩余项) # 覆盖:A-E 五类齐全、ML/元启发目录资产如实登记(available=False)、 # LNS 随 round-36 交付翻转为真实可用、健康检查如实报告。 # ============================================================ from __future__ import annotations from server.agent_core.algolib import get_algolib, reset_algolib_registry def _registry(): reset_algolib_registry() return get_algolib() def test_catalog_covers_all_five_categories(): """A-E 五类算法资产目录齐全。""" reg = _registry() items = reg.list() assert {it["category"] for it in items} == {"A", "B", "C", "D", "E"} for cat in "ABCDE": assert any(it["category"] == cat for it in items), f"缺少 {cat} 类资产" # 启发式/精确/元启发/ML/集成各有代表 assert any(it["algo_id"].startswith("rule.") for it in items) assert any(it["algo_id"] in ("cp_sat", "milp") for it in items) assert any(it["category"] == "C" for it in items) # 元启发 assert any(it["category"] == "D" for it in items) # ML assert any(it["category"] == "E" for it in items) # 集成 def test_ml_and_metahueristic_assets_registered_truthfully(): """ML/元启发目录资产如实登记:未落地 available=False,健康检查报告未就绪。""" reg = _registry() for algo_id in ("milp", "ml.worktime_regression", "ml.due_date_survival"): item = reg.get(algo_id) assert item is not None, f"{algo_id} 未登记" assert item["available"] is False, f"{algo_id} 未落地却宣称可用" assert item["entrypoint"] in ("", None) # 无真实入口 health = {h["algo_id"]: h for h in reg.health()} assert "ok" in health["ml.worktime_regression"] def test_lns_flipped_to_available_after_round36(): """LNS 已交付(round-36 lns.py)→ 目录 available=True + 入口 + 黄金测试。""" reg = _registry() lns = reg.get("lns") assert lns is not None assert lns["available"] is True assert lns["entrypoint"] == "server.aps_domain.lns:lns_local_repair" assert any("test_rush_lns.py" in t for t in lns["golden_tests"]) health = {h["algo_id"]: h for h in reg.health("lns")} assert health["lns"]["available"] is True # 查询:available=True 的 C 类资产可被编排器选到 found = reg.query(category="C", available=True) assert any(it["algo_id"] == "lns" for it in found) def test_nsga2_flipped_to_available_after_round40(): """NSGA-II 已交付(round-40 nsga2_engine.py)→ 目录 available=True + 入口 + 黄金测试。""" reg = _registry() nsga2 = reg.get("nsga2") assert nsga2 is not None assert nsga2["available"] is True assert nsga2["entrypoint"] == "server.engines.nsga2_engine:solve_nsga2" assert any("test_nsga2_engine.py" in t for t in nsga2["golden_tests"]) health = {h["algo_id"]: h for h in reg.health("nsga2")} assert health["nsga2"]["available"] is True def test_query_filters_and_categories_label(): """query 过滤与类别标签可用(编排器选型入口)。""" reg = _registry() cats = reg.categories() assert set(cats) == {"A", "B", "C", "D", "E"} assert "元启发" in cats["C"] available_only = reg.query(available=True) assert all(it["available"] is True for it in available_only) ml = reg.query(category="D") assert all(it["category"] == "D" for it in ml) assert ml and all(it["available"] is False for it in ml) # ML 资产如实登记未落地