conspire 0.7.7

The Rust interface to conspire.
Documentation
use crate::geometry::{
    Coordinate, Coordinates,
    mesh::{Connectivity, Mesh, Verdict},
};

fn polyhedron() -> Mesh<3> {
    (
        vec![Connectivity::Polyhedral(
            (
                vec![vec![0_usize, 1, 2, 3, 4, 5]],
                vec![
                    vec![0_usize, 1, 2, 3],
                    vec![4, 5, 6, 7],
                    vec![0, 1, 5, 4],
                    vec![1, 2, 6, 5],
                    vec![2, 3, 7, 6],
                    vec![3, 0, 4, 7],
                ],
            )
                .into(),
        )],
        Coordinates::from([
            Coordinate::const_from([0.0, 0.0, 0.0]),
            Coordinate::const_from([1.0, 0.0, 0.0]),
            Coordinate::const_from([1.0, 1.0, 0.0]),
            Coordinate::const_from([0.0, 1.0, 0.0]),
            Coordinate::const_from([0.0, 0.0, 1.0]),
            Coordinate::const_from([1.0, 0.0, 1.0]),
            Coordinate::const_from([1.0, 1.0, 1.0]),
            Coordinate::const_from([0.0, 1.0, 1.0]),
        ]),
    )
        .into()
}

#[test]
fn polyhedra_have_no_metrics_yet() {
    let mesh = polyhedron();
    assert!(mesh.maximum_edge_ratios()[0][0].is_nan());
    assert!(mesh.maximum_skews()[0][0].is_nan());
    assert!(mesh.minimum_jacobians()[0][0].is_nan());
    assert!(mesh.minimum_scaled_jacobians()[0][0].is_nan());
    assert!(mesh.volumes()[0][0].is_nan());
}

#[test]
fn unsupported_blocks_keep_one_entry_per_element() {
    let mesh = polyhedron();
    let volumes = mesh.volumes();
    assert_eq!(volumes.len(), 1);
    assert_eq!(volumes[0].len(), 1);
}