mpi 0.6.0

Message Passing Interface bindings for Rust
Documentation
use mpi::traits::Equivalence;

fn main() {
    let (_universe, threading) = mpi::initialize_with_threading(mpi::Threading::Multiple).unwrap();

    if threading != mpi::Threading::Multiple {
        // Silently return - MPI implementation may not support `threading::Multiple`
        return;
    }

    // This checks that rsmpi does not panic when attempting to lazily create the `DatatypeRef` on
    // another thread.
    assert!(std::thread::spawn(move || {
        #[derive(Equivalence)]
        struct EnsureNoPanicEquivalenceInitialization(i32);
        EnsureNoPanicEquivalenceInitialization::equivalent_datatype();
    })
    .join()
    .is_ok());
}