startin 0.8.3

A Delaunay triangulator for terrains.
Documentation
use startin;

#[test]
fn empty() {
    let dt = startin::Triangulation::new();
    assert_eq!(0, dt.number_of_vertices());
    assert_eq!(0, dt.number_of_triangles());
}

#[test]
fn one_pt() {
    let mut dt = startin::Triangulation::new();
    let re = dt.insert_one_pt(2.2, 2.3, 4.5);
    assert!(re.is_ok());
    assert_eq!(1, re.unwrap());
    assert_eq!(1, dt.number_of_vertices());
    assert_eq!(0, dt.number_of_triangles());
    assert_eq!(
        Err(startin::StartinError::EmptyTriangulation),
        dt.locate(0.5, 0.5)
    );
}

#[test]
fn infinite() {
    let mut dt = startin::Triangulation::new();
    let _re = dt.insert_one_pt(1., 1., 1.);
    let _re = dt.insert_one_pt(2., 1., 2.);
    let _re = dt.insert_one_pt(2., 2., 3.);
    let _re = dt.insert_one_pt(1., 2., 4.);
    let _re = dt.insert_one_pt(1.5, 1.5, 5.);

    assert_eq!(5, dt.number_of_vertices());
    assert_eq!(4, dt.number_of_triangles());
    assert_eq!(8, dt.all_triangles().len());
    assert_eq!(4, dt.all_finite_triangles().len());
}

#[test]
fn duplicates() {
    let mut dt = startin::Triangulation::new();
    let _re = dt.insert_one_pt(2.5, 6.3, 4.5);
    let _re = dt.insert_one_pt(2.2, 2.3, 4.5);
    let re2 = dt.insert_one_pt(2.2, 2.3, 4.5);
    assert!(re2.is_err());
    assert_eq!((2, false), re2.unwrap_err());
    assert_eq!(2, dt.number_of_vertices());
    assert_eq!(0, dt.number_of_triangles());
}

#[test]
fn remove_and_invalid() {
    let mut dt = startin::Triangulation::new();
    let _ = dt.insert_one_pt(1.5, 1.3, 4.5);
    let _ = dt.insert_one_pt(2.2, 2.3, 4.5);
    let _ = dt.insert_one_pt(3.2, 7.3, 4.5);
    assert_eq!(3, dt.number_of_vertices());
    assert_eq!(1, dt.number_of_triangles());

    let _ = dt.remove(2);
    assert_eq!(2, dt.number_of_vertices());
    assert_eq!(0, dt.number_of_triangles());

    let _ = dt.insert_one_pt(4.2, 17.3, 4.5);
    assert_eq!(3, dt.number_of_vertices());
    assert_eq!(1, dt.number_of_triangles());
}

#[test]
fn grid() {
    let mut dt = startin::Triangulation::new();
    for i in 0..10 {
        for j in 0..10 {
            let _re = dt.insert_one_pt(i as f64, j as f64, 1.0);
        }
    }
    assert!(dt.is_valid());
}