msgpass 0.5.0

Thin wrapper to a Message Passing Interface (MPI)
Documentation
use msgpass::*;
use std::env;

fn main() -> Result<(), StrError> {
    let np = match env::var("CI") {
        Ok(_) => 2,
        Err(_) => 4,
    };

    mpi_init()?;

    let mut comm = Communicator::new()?;
    let rank = comm.rank()?;
    let size = comm.size()?;

    assert!(rank <= np);
    assert_eq!(size, np);

    if np == 2 {
        let mut sub = Communicator::new_subset(&[0])?;
        if rank == 0 {
            assert_eq!(sub.rank()?, 0);
            assert_eq!(sub.size()?, 1);
        }
    } else {
        let mut sub = Communicator::new_subset(&[1, 3])?;
        if rank == 1 || rank == 3 {
            let sub_rank = sub.rank()?;
            let sub_size = sub.size()?;
            assert!(sub_rank == 0 || sub_rank == 1);
            assert_eq!(sub_size, 2);
        }
    }

    mpi_finalize()?;

    if rank == 0 {
        println!("... success ...");
    }
    Ok(())
}