优化生成流程
This commit is contained in:
@@ -6,7 +6,6 @@ import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from app.services.engine_service import load_engine, normalize_cdsl_for_engine, validate_cdsl
|
||||
from app.services.flange_sleeve_template import TEMPLATE_ID, build_flange_sleeve_cdsl
|
||||
from app.settings import get_settings
|
||||
|
||||
|
||||
@@ -23,21 +22,38 @@ class ProfileSchemaTests(unittest.TestCase):
|
||||
def test_schema_and_registered_profiles_stay_in_sync(self) -> None:
|
||||
self.assertEqual(set(self.schema["runtime_supported_profiles"]), set(self.engine.SHAPE_GENERATORS))
|
||||
|
||||
def test_legacy_profile_macros_require_explicit_adapter_lowering(self) -> None:
|
||||
legacy = {
|
||||
"schema": "cad.cdsl.llm.v1", "schema_version": "1.1.0", "kind": "part", "part_id": "legacy-rectangle",
|
||||
"meta": {"unit": "mm"},
|
||||
"geometry": {"sketches": [{
|
||||
"id": "base", "workplane": {"origin_mm": [0, 0, 0], "x_dir": [1, 0, 0], "normal": [0, 0, 1]},
|
||||
"profile": {"type": "rectangle", "center": [0, 0], "width_mm": 10, "height_mm": 10},
|
||||
}]},
|
||||
"features": [{"id": "base_add", "atomic_id": "extrude_add_blind", "depends_on": [], "sketch_id": "base", "params": {"distance_mm": 2}}],
|
||||
}
|
||||
with self.assertRaisesRegex(ValueError, "CDSL schema violation"):
|
||||
validate_cdsl(legacy, self.engine)
|
||||
from cdsl_importer.legacy_profile_adapter import lower_legacy_profiles
|
||||
|
||||
lowered = lower_legacy_profiles(legacy)
|
||||
self.assertEqual(lowered["geometry"]["sketches"][0]["profile"]["type"], "analytic_contours")
|
||||
validate_cdsl(lowered, self.engine)
|
||||
|
||||
def test_schema_and_executable_atomic_operations_stay_in_sync(self) -> None:
|
||||
self.assertEqual(set(self.schema["runtime_supported_atomic_ids"]), set(self.engine.SUPPORTED_ATOMIC_IDS))
|
||||
self.assertTrue(set(self.engine.SUPPORTED_ATOMIC_IDS).issubset(self.schema["feature_atomic_ids"]))
|
||||
self.assertEqual(set(self.engine.SUPPORTED_ATOMIC_IDS), set(self.schema["feature_atomic_ids"]))
|
||||
self.assertEqual(
|
||||
set(self.cdsl_schema["$defs"]["feature_atomic_ids"]["enum"]),
|
||||
set(self.schema["feature_atomic_ids"]),
|
||||
set(self.engine.SUPPORTED_ATOMIC_IDS),
|
||||
)
|
||||
|
||||
def test_machine_schema_and_human_contract_stay_in_sync(self) -> None:
|
||||
self.assertEqual(
|
||||
set(self.cdsl_schema["$defs"]["profile_type"]["enum"]),
|
||||
set(self.schema["profiles"]) - {"complex_arc_shape", "unknown_shape"},
|
||||
set(self.schema["runtime_supported_profiles"]),
|
||||
)
|
||||
self.assertEqual(set(self.cdsl_schema["$defs"]["motif_type"]["enum"]), set(self.schema["motif_types"]))
|
||||
self.assertEqual(set(self.cdsl_schema["$defs"]["layout_type"]["enum"]), set(self.schema["layout_types"]))
|
||||
self.assertEqual(set(self.schema["profiles"]), set(self.schema["runtime_supported_profiles"]))
|
||||
|
||||
def test_rejects_unsupported_atomic_operation_before_rebuild(self) -> None:
|
||||
cdsl = {
|
||||
@@ -135,39 +151,6 @@ class ProfileSchemaTests(unittest.TestCase):
|
||||
self.assertNotIn("point_mm", axis)
|
||||
self.assertIn("features[0].params.axis: point_mm -> origin_mm", repairs)
|
||||
|
||||
def test_flange_sleeve_template_is_schema_valid_and_runtime_buildable(self) -> None:
|
||||
cdsl, plan = build_flange_sleeve_cdsl({
|
||||
"template": TEMPLATE_ID,
|
||||
"name": "Template flange sleeve",
|
||||
"flange_width_mm": 120,
|
||||
"flange_height_mm": 120,
|
||||
"flange_thickness_mm": 14,
|
||||
"corner_chamfer_mm": 10,
|
||||
"tube_outer_diameter_mm": 70,
|
||||
"tube_straight_length_mm": 95,
|
||||
"tip_outer_diameter_mm": 62,
|
||||
"tip_length_mm": 28,
|
||||
"bore_diameter_mm": 46,
|
||||
"boss_outer_diameter_mm": 82,
|
||||
"boss_height_mm": 5,
|
||||
"mount_hole_diameter_mm": 12,
|
||||
"mount_counterbore_diameter_mm": 24,
|
||||
"mount_counterbore_depth_mm": 5,
|
||||
"mount_hole_u_mm": 42,
|
||||
"mount_hole_v_mm": 42,
|
||||
})
|
||||
|
||||
self.assertEqual(plan["name"], "Template flange sleeve")
|
||||
self.assertEqual(cdsl["features"][1]["depends_on"], ["flange_plate"])
|
||||
self.assertEqual(cdsl["geometry"]["sketches"][0]["workplane"]["x_dir"], [0.0, 1.0, 0.0])
|
||||
validate_cdsl(cdsl, self.engine)
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
step_path = Path(directory) / "flange-sleeve.step"
|
||||
result = self.engine.run_cdsl_only(cdsl, step_path)
|
||||
self.assertEqual(result["engine"], "cdsl_only")
|
||||
self.assertTrue(step_path.is_file())
|
||||
self.assertGreater(step_path.stat().st_size, 0)
|
||||
|
||||
def test_cdsl_only_rebuild_preserves_its_actual_failure(self) -> None:
|
||||
cdsl = {
|
||||
"schema": "cad.cdsl.llm.v1",
|
||||
@@ -192,11 +175,16 @@ class ProfileSchemaTests(unittest.TestCase):
|
||||
self.assertNotIn("engine.run_rebuild(cdsl_copy, step_path)", build_revision_source)
|
||||
|
||||
def test_all_official_samples_match_the_engine_schema(self) -> None:
|
||||
from cdsl_importer.legacy_profile_adapter import lower_legacy_profiles
|
||||
|
||||
samples = sorted(self.settings.library_root.glob("samples/**/model.cdsl.json"))
|
||||
self.assertGreater(len(samples), 0)
|
||||
for sample_path in samples:
|
||||
with self.subTest(sample=sample_path.parent.name):
|
||||
validate_cdsl(json.loads(sample_path.read_text(encoding="utf-8")), self.engine)
|
||||
legacy_sample = json.loads(sample_path.read_text(encoding="utf-8"))
|
||||
lowered = lower_legacy_profiles(legacy_sample)
|
||||
validate_cdsl(lowered, self.engine)
|
||||
self.assertTrue(self.engine.analyze_cdsl(lowered).runtime_eligible)
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user