conspire 0.7.0

The Rust interface to conspire.
Documentation
use crate::{
    geometry::{
        Coordinate, Coordinates,
        grid::Voxels,
        mesh::{Connectivities, Connectivity, Mesh},
    },
    math::{Set, TensorVec},
};

#[test]
fn tetrahedron() {
    let mut coordinates = Coordinates::new();
    [
        [0.0, 0.0, 0.0],
        [4.0, 0.0, 0.0],
        [0.0, 4.0, 0.0],
        [0.0, 0.0, 4.0],
    ]
    .into_iter()
    .for_each(|point| coordinates.push(Coordinate::const_from(point)));
    let connectivity = Connectivity::Tetrahedral(vec![[0, 1, 2, 3]].into());
    let mesh = Mesh::from((
        Connectivities::from((vec![connectivity], vec![5])),
        Set::from(coordinates),
    ));
    let voxels = Voxels::from_finite_elements(&mesh, 1.0);
    assert_eq!(*voxels.nel(), [4, 4, 4]);
    assert_eq!(voxels.data()[0], 5);
    assert_eq!(voxels.data()[3 + 12 + 48], 0);
}

#[test]
fn round_trips_hex_mesh() {
    let data: Vec<usize> = (1..=8).collect();
    let mesh = Mesh::from_voxels(Voxels::new(data.clone(), [2, 2, 2]), None);
    let voxels = Voxels::from_finite_elements(&mesh, 1.0);
    assert_eq!(*voxels.nel(), [2, 2, 2]);
    assert_eq!(voxels.data(), data);
}

#[test]
fn unfilled_voxels_are_void() {
    let data: Vec<usize> = (1..=8).collect();
    let mesh = Mesh::from_voxels(Voxels::new(data, [2, 2, 2]), Some(&[8]));
    let voxels = Voxels::from_finite_elements(&mesh, 1.0);
    assert_eq!(*voxels.nel(), [2, 2, 2]);
    assert_eq!(voxels.data()[1 + 2 + 4], 0);
    assert_eq!(voxels.data()[0], 1);
}