import hashlib import json import subprocess import unittest from pathlib import Path import generate_rs274_closure_report ROOT = Path(__file__).resolve().parents[1] REPORT = ROOT / "coverage/rs274-interpreter-closure.report.json" class Rs274ClosureReportTests(unittest.TestCase): def test_native_interpreter_and_report(self): result = subprocess.run([str(ROOT / "build-native/sim_interpreter_test")], cwd=ROOT, check=False) self.assertEqual(result.returncode, 0) report = json.loads(REPORT.read_text(encoding="utf-8")) self.assertEqual(report["schema"], "rs274-interpreter-closure-report.v1") self.assertEqual(report["task_id"], "S1-01A") self.assertEqual(report["status"], "verified") self.assertTrue(report["diagnostics"]["transactional_block"]) unsigned = dict(report) self_hash = unsigned.pop("report_sha256") expected = hashlib.sha256(generate_rs274_closure_report.canonical(unsigned).encode("utf-8")).hexdigest() self.assertEqual(self_hash, expected) def test_required_outputs_are_hashed(self): report = json.loads(REPORT.read_text(encoding="utf-8")) paths = {item["path"] for item in report["outputs"]} self.assertEqual(paths, {path.as_posix() for path in generate_rs274_closure_report.OUTPUTS}) if __name__ == "__main__": unittest.main()