Files
linuxcncWebWASM/scripts/test_kinematics_oracle_report.py

45 lines
1.9 KiB
Python

import json
import sys
import unittest
from pathlib import Path
from tempfile import TemporaryDirectory
sys.path.insert(0, str(Path(__file__).resolve().parent))
from generate_kinematics_oracle_report import generate
class KinematicsOracleReportTests(unittest.TestCase):
def make_tree(self):
directory = TemporaryDirectory()
root = Path(directory.name)
coverage = root / "coverage"
coverage.mkdir()
closure = {
"context_id": "test-context", "missing_required_test_roots": ["linuxcnc/unit_tests/kinematics"],
}
(coverage / "kinematics-source-closure.report.json").write_text(json.dumps(closure), encoding="utf-8")
sample = {
"sample_id": "kinematics-sample:cartesian:nominal-roundtrip", "family": "cartesian",
"configuration_id": "config:demo", "operation": "fk_ik_fk_roundtrip", "input": {"joint": [1.0]},
"expected": {"invariant": "pose_roundtrip", "absolute_tolerance": 1e-9},
"execution": {"status": "blocked", "reason": "missing official oracle"},
}
(coverage / "kinematics-oracle-samples.jsonl").write_text(json.dumps(sample) + "\n", encoding="utf-8")
return directory, root
def test_missing_official_root_blocks_without_fake_golden(self):
directory, root = self.make_tree()
self.addCleanup(directory.cleanup)
report = generate(root, root / "report.json", root / "schema.json")
self.assertEqual(report["status"], "blocked")
self.assertEqual(report["sample_count"], 1)
self.assertEqual(report["ready_count"], 0)
self.assertEqual(report["records"][0]["result"]["error_code"], "MISSING_OFFICIAL_ORACLE")
self.assertEqual(report["records"][0]["execution"]["status"], "blocked")
self.assertEqual(json.loads((root / "schema.json").read_text(encoding="utf-8"))["$id"], "linuxcnc-web-wasm/kinematics-golden.v1")
if __name__ == "__main__":
unittest.main()