conspire 0.7.1

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

const CONNECTIVITY: [[usize; 3]; 12] = [
    [0, 2, 1],
    [0, 3, 2],
    [4, 5, 6],
    [4, 6, 7],
    [0, 1, 5],
    [0, 5, 4],
    [3, 6, 2],
    [3, 7, 6],
    [0, 4, 7],
    [0, 7, 3],
    [1, 2, 6],
    [1, 6, 5],
];

const UNIT_CUBE: [[f64; 3]; 8] = [
    [0.0, 0.0, 0.0],
    [1.0, 0.0, 0.0],
    [1.0, 1.0, 0.0],
    [0.0, 1.0, 0.0],
    [0.0, 0.0, 1.0],
    [1.0, 0.0, 1.0],
    [1.0, 1.0, 1.0],
    [0.0, 1.0, 1.0],
];

fn two_cubes() -> Tessellation {
    let mut coordinates = Coordinates::new();
    for shift in [0.0, 2.0] {
        UNIT_CUBE.iter().for_each(|point| {
            coordinates.push(Coordinate::const_from([
                point[0] + shift,
                point[1],
                point[2],
            ]))
        });
    }
    let mut connectivity = CONNECTIVITY.to_vec();
    connectivity.extend(CONNECTIVITY.iter().map(|t| [t[0] + 8, t[1] + 8, t[2] + 8]));
    let connectivities = vec![Connectivity::Triangular(connectivity.into())];
    Tessellation::from(Mesh::from((connectivities, coordinates)))
}

#[test]
fn solid_voxelization_inside_outside() {
    let voxels = Voxels::from_tessellation(&two_cubes(), 1.0);
    assert_eq!(*voxels.nel(), [3, 1, 1]);
    assert_eq!(voxels.data(), [1, 0, 1]);
}