libmcl-sys 0.1.0

This system crate provides Rulst language bindings to the Minos Compute Library (MCL)
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);
    }
}