axiolid-construct 0.3.6

Solid generation: profiles, lofts, sweeps, revolutions and half-space clipping
Documentation
use axiolid_construct::{GenerationOutput, GenerationRequest, TessellationRequest};
use axiolid_core::{Tolerance, Vec3};
use axiolid_mesh::TriMesh;

#[test]
fn exact_and_tessellation_are_distinct_explicit_contracts() {
    let exact = GenerationRequest::ExactBRep;
    assert!(matches!(exact, GenerationRequest::ExactBRep));

    let requested = TessellationRequest::new(Tolerance::METRE);
    assert_eq!(requested.tolerance(), Tolerance::METRE);
    let mesh = TriMesh::new(vec![Vec3::ZERO, Vec3::X, Vec3::Y], vec![0, 1, 2]);
    let produced = requested.bind(mesh.clone());
    assert_eq!(produced.tolerance(), requested.tolerance());
    assert_eq!(produced.mesh(), &mesh);
    assert!(matches!(
        GenerationRequest::Tessellation(requested),
        GenerationRequest::Tessellation(_)
    ));

    assert_ne!(
        GenerationOutput::ExactBRep,
        GenerationOutput::Tessellation,
        "a caller must select the output model; exact construction never falls back to a mesh"
    );
}