runmat-meshing-core 0.6.0

Deterministic meshing preparation contracts for RunMat
Documentation
use super::*;
use fixtures::*;

#[test]
fn rejects_solid_mesh_without_boundary_source_face_provenance() {
    let mut mesh = solid_tetrahedron_mesh_with_plc_input_evidence();
    mesh.boundary_faces[0].provenance.clear();

    let err = validate_analysis_mesh(&mesh, QualityThresholds::default())
        .expect_err("solid boundary faces must carry source-face provenance");

    assert_eq!(
        err,
        AnalysisMeshValidationError::MissingBoundarySourceFaceProvenance {
            face_id: "f1".to_string(),
        }
    );
    assert_eq!(
        analysis_mesh_validation_error_code(&err),
        "missing_boundary_source_face_provenance"
    );
}

#[test]
fn accepts_solid_mesh_with_strict_boundary_source_edge_provenance() {
    let mesh = solid_tetrahedron_mesh_with_plc_input_evidence();

    validate_analysis_mesh_with_options(
        &mesh,
        AnalysisMeshValidationOptions {
            require_boundary_source_edge_provenance: true,
            ..AnalysisMeshValidationOptions::default()
        },
    )
    .expect("strict source-edge provenance should pass when recovered edge evidence is present");
}

#[test]
fn rejects_solid_mesh_without_enough_boundary_source_edge_provenance() {
    let mut mesh = solid_tetrahedron_mesh_with_plc_input_evidence();
    mesh.boundary_edges[0].provenance.clear();

    let err = validate_analysis_mesh_with_options(
        &mesh,
        AnalysisMeshValidationOptions {
            require_boundary_source_edge_provenance: true,
            ..AnalysisMeshValidationOptions::default()
        },
    )
    .expect_err("solid boundary edges must recover protected source-edge provenance");

    assert_eq!(
        err,
        AnalysisMeshValidationError::MissingBoundarySourceEdgeProvenance {
            recovered_edge_count: 0,
            required_edge_count: 1,
        }
    );
    assert_eq!(
        analysis_mesh_validation_error_code(&err),
        "missing_boundary_source_edge_provenance"
    );
}