45 lines
1.9 KiB
Python
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()
|