use highs_sys::*;
use std::convert::TryInto;
#[test]
fn highs_call() {
let numcol: usize = 2;
let numrow: usize = 3;
let nnz: usize = 5;
let colcost: &[f64] = &[2.0, 3.0];
let collower: &[f64] = &[0.0, 1.0];
let colupper: &[f64] = &[3.0, 1.0e30];
let rowlower: &[f64] = &[-1.0e30, 10.0, 8.0];
let rowupper: &[f64] = &[6.0, 14.0, 1.0e30];
let astart: &[HighsInt] = &[0, 2];
let aindex: &[HighsInt] = &[1, 2, 0, 1, 2];
let avalue: &[f64] = &[1.0, 2.0, 1.0, 2.0, 1.0];
let colvalue: &mut [f64] = &mut vec![0.; numcol];
let coldual: &mut [f64] = &mut vec![0.; numcol];
let rowvalue: &mut [f64] = &mut vec![0.; numrow];
let rowdual: &mut [f64] = &mut vec![0.; numrow];
let colbasisstatus: &mut [HighsInt] = &mut vec![0; numcol];
let rowbasisstatus: &mut [HighsInt] = &mut vec![0; numrow];
let modelstatus: &mut HighsInt = &mut 0;
let offset = 0.0;
let status: HighsInt = unsafe {
Highs_lpCall(
numcol.try_into().unwrap(),
numrow.try_into().unwrap(),
nnz.try_into().unwrap(),
MATRIX_FORMAT_COLUMN_WISE,
OBJECTIVE_SENSE_MINIMIZE,
offset,
colcost.as_ptr(),
collower.as_ptr(),
colupper.as_ptr(),
rowlower.as_ptr(),
rowupper.as_ptr(),
astart.as_ptr(),
aindex.as_ptr(),
avalue.as_ptr(),
colvalue.as_mut_ptr(),
coldual.as_mut_ptr(),
rowvalue.as_mut_ptr(),
rowdual.as_mut_ptr(),
colbasisstatus.as_mut_ptr(),
rowbasisstatus.as_mut_ptr(),
modelstatus,
)
};
assert_eq!(status, STATUS_OK);
assert_eq!(colvalue, &[2., 4.]);
}