packages feed

moonlight-triangulation-1.0.1.0: bindings/rust/tests/binding.rs

use moonlight_triangulation::Moonlight;

#[test]
fn immutable_mesh_algebra_and_dense_projection() {
    let engine = Moonlight::initialize().expect("runtime");
    let left = engine
        .delaunay(&[[0.0, 0.0], [2.0, 0.0], [0.0, 2.0], [2.0, 2.0]])
        .expect("left mesh");
    let right = engine
        .delaunay(&[[2.0, 0.0], [4.0, 0.0], [2.0, 2.0], [4.0, 2.0]])
        .expect("right mesh");
    let union = left.union(&right).expect("union");
    let intersection = left.intersection(&right).expect("intersection");
    let difference = left.difference(&right).expect("difference");
    let symmetric = left
        .symmetric_difference(&right)
        .expect("symmetric difference");
    let extended = left
        .insert_many(&[[1.0, 1.0], [3.0, 1.0]])
        .expect("batch insertion");

    assert_eq!(left.vertex_count().expect("left count"), 4);
    assert_eq!(union.vertex_count().expect("union count"), 6);
    assert_eq!(intersection.vertex_count().expect("intersection count"), 2);
    assert_eq!(difference.vertex_count().expect("difference count"), 2);
    assert_eq!(symmetric.vertex_count().expect("symmetric count"), 4);
    assert_eq!(extended.vertex_count().expect("extended count"), 6);
    assert_eq!(
        left.vertices().expect("vertices").len(),
        left.vertex_count().expect("vertex count")
    );
    assert_eq!(
        left.triangles().expect("triangles").len(),
        left.triangle_count().expect("triangle count")
    );
}

#[test]
fn invalid_coordinate_preserves_typed_witness() {
    let engine = Moonlight::initialize().expect("runtime");
    let failure = engine
        .delaunay(&[[0.0, 0.0], [f64::NAN, 1.0], [1.0, 0.0]])
        .err()
        .expect("invalid coordinate refusal");
    assert_eq!(failure.status, 4);
    assert_eq!(failure.code, 1);
    assert_eq!(failure.coordinate_error, 1);
    assert_eq!(failure.input_index, 1);
}