libmcl-sys 0.1.2-rc3

This system crate provides Rust language bindings to the Minos Compute Library (MCL)
Documentation
use libmcl_sys::*;

#[test]
fn null_hdl() {
    unsafe {
        let nreqs: usize = 10;
        let mut ret = 0;
        let mut hdls: Vec<*mut mcl_handle> = Vec::<*mut mcl_handle>::new();

        mcl_init(1, MCL_NULL.into());

        println!("Synchronous Test...");

        for i in 0..nreqs {
            hdls.push(mcl_task_create());

            if mcl_null(hdls[i]) == 1 {
                println!("Error submitting request {} ", i);
                continue;
            }

            if mcl_wait(hdls[i]) != 0 {
                println!("Request {} timed out!", i);
            }
        }

        for i in 0..nreqs {
            if (*hdls[i]).status != MCL_REQ_COMPLETED.into() {
                println!("Request {} status={}", i, (*hdls[i]).status);
                ret = 1;
            }
        }

        for i in 0..nreqs {
            mcl_hdl_free(hdls[i]);
        }

        hdls.clear();

        println!("Asynchronous Test...");

        for i in 0..nreqs {
            hdls.push(mcl_task_create());

            if mcl_null(hdls[i]) == 1 {
                println!("Error submitting request {} ", i);
                continue;
            }
        }
        mcl_wait_all();

        for i in 0..nreqs {
            if (*hdls[i]).status != MCL_REQ_COMPLETED.into() {
                println!("Request {} status={}", i, (*hdls[i]).status);
                ret = 1;
            }
        }

        for i in 0..nreqs {
            mcl_hdl_free(hdls[i]);
        }

        mcl_finit();
        assert_eq!(ret, 0);
    }
}