runmat-meshing-core 0.6.0

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

#[test]
fn rejects_recovered_source_edge_count_that_exceeds_typed_input_count() {
    let mut mesh = valid_tetrahedron_mesh();
    mesh.backend
        .tetrahedron_boundary_edge_source_edge_recovery_item_count = 1;
    mesh.backend
        .tetrahedron_recovered_boundary_edge_source_edge_recovery_item_count = 2;

    let err = validate_analysis_mesh(&mesh, Default::default())
        .expect_err("recovered source-edge evidence cannot exceed typed inputs");

    assert_eq!(
        err,
        AnalysisMeshValidationError::InconsistentTetrahedronRecoveryEvidence {
            family: "boundary_edge_source_edge".to_string(),
            recovered_count: 2,
            input_count: 1,
        }
    );
    assert_eq!(
        analysis_mesh_validation_error_code(&err),
        "inconsistent_tetrahedron_recovery_evidence"
    );
}

#[test]
fn rejects_recovered_cad_curve_source_edge_count_that_exceeds_input_count() {
    let mut mesh = valid_tetrahedron_mesh();
    mesh.backend
        .tetrahedron_cad_curve_source_edge_recovery_item_count = 1;
    mesh.backend
        .tetrahedron_recovered_cad_curve_source_edge_recovery_item_count = 2;

    let err = validate_analysis_mesh(&mesh, Default::default())
        .expect_err("recovered CAD curve source-edge evidence cannot exceed CAD-backed inputs");

    assert_eq!(
        err,
        AnalysisMeshValidationError::InconsistentTetrahedronRecoveryEvidence {
            family: "cad_curve_source_edge".to_string(),
            recovered_count: 2,
            input_count: 1,
        }
    );
}

#[test]
fn rejects_cad_curve_interior_edge_source_edge_count_that_exceeds_interior_edge_input_count() {
    let mut mesh = valid_tetrahedron_mesh();
    mesh.backend
        .tetrahedron_interior_edge_source_edge_recovery_item_count = 1;
    mesh.backend
        .tetrahedron_cad_curve_interior_edge_source_edge_recovery_item_count = 2;

    let err = validate_analysis_mesh(&mesh, Default::default())
        .expect_err("CAD curve interior-edge evidence cannot exceed interior-edge inputs");

    assert_eq!(
        err,
        AnalysisMeshValidationError::InconsistentTetrahedronRecoveryItemEvidence {
            family: "cad_curve_interior_edge_source_edge".to_string(),
            item_count: 2,
            input_count: 1,
        }
    );
}

#[test]
fn rejects_recovered_cad_curve_interior_edge_source_edge_count_that_exceeds_cad_input_count() {
    let mut mesh = valid_tetrahedron_mesh();
    mesh.backend
        .tetrahedron_interior_edge_source_edge_recovery_item_count = 1;
    mesh.backend
        .tetrahedron_cad_curve_interior_edge_source_edge_recovery_item_count = 1;
    mesh.backend
        .tetrahedron_recovered_cad_curve_interior_edge_source_edge_recovery_item_count = 2;

    let err = validate_analysis_mesh(&mesh, Default::default())
        .expect_err("recovered CAD curve interior-edge evidence cannot exceed CAD inputs");

    assert_eq!(
        err,
        AnalysisMeshValidationError::InconsistentTetrahedronRecoveryEvidence {
            family: "cad_curve_interior_edge_source_edge".to_string(),
            recovered_count: 2,
            input_count: 1,
        }
    );
}