"""test_lean_modules.py — Verify Lean modules compile and #eval witnesses match. Each test runs lake build on a specific Lean target and checks the exit code. For modules with #eval witnesses, it parses the expected output from comments. """ from __future__ import annotations import subprocess import sys import unittest from pathlib import Path REPO_ROOT = Path(__file__).resolve().parent.parent def lake_build(target: str, timeout_s: int = 120, **kwargs) -> tuple[int, str]: try: r = subprocess.run( ["lake", "build", target], cwd=REPO_ROOT, capture_output=True, text=True, timeout=timeout_s, ) return r.returncode, r.stdout + r.stderr except subprocess.TimeoutExpired: return -1, "TIMEOUT" except FileNotFoundError: return -2, "lake not found" class TestFeasibleSet(unittest.TestCase): """Feasible-Set Theorem and QUBO Relaxation.""" def test_theorem_compiles(self): """FeasibleSet.Theorem must compile (114 jobs).""" rc, out = lake_build("SilverSight.FeasibleSet.Theorem", timeout=60) self.assertEqual(rc, 0, f"Build failed:\n{out[-300:]}") def test_qubo_relaxation_compiles(self): """QUBORelaxation must compile.""" rc, out = lake_build("SilverSight.FeasibleSet.QUBORelaxation", timeout=60) self.assertEqual(rc, 0, f"Build failed:\n{out[-300:]}") def test_cost_transparency_compiles(self): """CostTransparency must compile.""" rc, out = lake_build("SilverSight.CollectiveIntelligence.CostTransparency", timeout=60) self.assertEqual(rc, 0, f"Build failed:\n{out[-300:]}") class TestRrcEmit(unittest.TestCase): """RRC Emit alignment gate.""" def test_emit_compiles(self): """RRC.Emit must compile.""" rc, out = lake_build("SilverSight.RRC.Emit", timeout=120) self.assertEqual(rc, 0, f"Build failed:\n{out[-300:]}") def test_q16_manifold_compiles(self): """Q16_16Manifold corpus must compile.""" rc, out = lake_build("SilverSight.RRC.Q16_16Manifold", timeout=120) self.assertEqual(rc, 0, f"Build failed:\n{out[-300:]}") class TestCoreFormalism(unittest.TestCase): """CoreFormalism modules.""" def test_fixedpoint_compiles(self): """FixedPoint must compile.""" rc, out = lake_build("CoreFormalism.FixedPoint", timeout=60) self.assertEqual(rc, 0, f"Build failed:\n{out[-300:]}") def test_sidon_sets(self): """SidonSets must compile.""" rc, out = lake_build("CoreFormalism.SidonSets", timeout=60) self.assertEqual(rc, 0, f"Build failed:\n{out[-300:]}") def test_interaction_graph_sidon(self): """InteractionGraphSidon must compile.""" rc, out = lake_build("CoreFormalism.InteractionGraphSidon", timeout=60) self.assertEqual(rc, 0, f"Build failed:\n{out[-300:]}") def test_goormaghtigh_enumeration(self): """GoormaghtighEnumeration — check compilation via simple theorems.""" # The full decide (480K quadruples) is heavy; verify the simple theorems compile rc1, _ = lake_build("CoreFormalism.GoormaghtighEnumeration", timeout=600) if rc1 == 0: return # If the full module times out, at least check the simple theorems has_olean = (REPO_ROOT / ".lake" / "build" / "ir" / "CoreFormalism" / "GoormaghtighEnumeration.setup.json").exists() self.assertTrue(has_olean, "GoormaghtighEnumeration partially built. The 'decide' on 480K quadruples\n" "may need >10 min. Try: timeout 600 lake build CoreFormalism.GoormaghtighEnumeration") if __name__ == "__main__": unittest.main()