import json import math import unittest from pathlib import Path ROOT = Path(__file__).resolve().parents[2] / "reports/site-models/nellmapius-ext-25/2026-10-21" class Nellmapius(unittest.TestCase): @classmethod def setUpClass(cls): cls.road = json.loads((ROOT / "bushveld.json").read_text()) cls.report = json.loads((ROOT / "validation.json").read_text()) def test_area_is_conserved_and_every_section_has_area(self): total = sum(a["area"] for a in self.road["areas"]) self.assertAlmostEqual(total, self.report["roadAreaM2"], delta=1) self.assertGreater(total, 5000); self.assertLess(total, 5500) keys = {s["key"] for s in self.road["sections"]} self.assertEqual(len(keys), len(self.road["sections"])) self.assertEqual({a["section"] for a in self.road["areas"]}, keys) self.assertTrue(all(k["section"] in keys for k in self.road["kerbs"])) def test_kerbs_are_measured_once(self): kerb = sum(k["length"] for k in self.road["kerbs"]) self.assertAlmostEqual(kerb, self.report["kerbM"], delta=1) self.assertGreater(kerb, 1500); self.assertLess(kerb, 2200) # two edges of ~900 m of road def test_benchmarks_are_real_levels_and_plane_fits_them(self): self.assertEqual({p["name"] for p in self.road["pegs"]}, {"ST18", "BM3", "ST17", "BM2"}) self.assertLess(max(abs(r) for r in self.report["planeResidualsM"]), 0.25) def test_no_invented_services_or_levels(self): s = json.loads((ROOT / "services.json").read_text()); e = json.loads((ROOT / "earthworks.json").read_text()) self.assertEqual(s["stormwater"]["pipes"], []); self.assertEqual(s["sewer"]["manholes"], []); self.assertEqual(e["volumes"], []) self.assertIn("indicative plane", " ".join(self.road["notes"]).lower()) if __name__ == "__main__": unittest.main()