1#![allow(non_upper_case_globals)]
4#![allow(non_camel_case_types)]
5#![allow(non_snake_case)]
6#![allow(dead_code)]
7#![allow(improper_ctypes)]
8
9include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
10
11#[cfg(test)]
12mod tests {
13 use std::ffi::CString;
14 use super::*;
15 use std::mem::MaybeUninit;
16
17 #[test]
18 fn test_create() {
19 let mut scip_ptr = MaybeUninit::uninit();
20 unsafe { SCIPcreate(scip_ptr.as_mut_ptr()) };
21 let mut scip_ptr = unsafe { scip_ptr.assume_init() };
22
23 unsafe { SCIPincludeDefaultPlugins(scip_ptr) };
25
26 let name = CString::new("test").unwrap();
27 unsafe { SCIPcreateProbBasic(scip_ptr, name.as_ptr()) };
28
29 let mut var_ptr = MaybeUninit::uninit();
31 unsafe {
32 SCIPcreateVarBasic(
33 scip_ptr,
34 var_ptr.as_mut_ptr(),
35 CString::new("x").unwrap().as_ptr(),
36 0.0,
37 1.0,
38 1.0,
39 SCIP_Vartype_SCIP_VARTYPE_BINARY,
40 )
41 };
42 let mut var_ptr = unsafe { var_ptr.assume_init() };
43 unsafe { SCIPaddVar(scip_ptr, var_ptr) };
44
45 let mut cons_ptr = MaybeUninit::uninit();
47 unsafe {
48 SCIPcreateConsBasicLinear(
49 scip_ptr,
50 cons_ptr.as_mut_ptr(),
51 CString::new("c").unwrap().as_ptr(),
52 1,
53 &mut var_ptr,
54 &mut 1.0,
55 1.0,
56 1.0,
57 )
58 };
59 let mut cons_ptr = unsafe { cons_ptr.assume_init() };
60 unsafe { SCIPaddCons(scip_ptr, cons_ptr) };
61
62 unsafe { SCIPsolve(scip_ptr) };
63
64 let obj_val = unsafe { SCIPgetPrimalbound(scip_ptr) };
65 let eps = unsafe { SCIPfeastol(scip_ptr) };
66 assert!((obj_val - 1.0).abs() < eps);
67
68 unsafe { SCIPreleaseVar(scip_ptr, &mut var_ptr) };
69 unsafe { SCIPreleaseCons(scip_ptr, &mut cons_ptr) };
70 unsafe { SCIPfree(&mut scip_ptr) };
71 }
72}