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 super::*;
14 use std::mem::MaybeUninit;
15
16 #[test]
17 fn test_create() {
18 let mut scip_ptr = MaybeUninit::uninit();
19 unsafe { SCIPcreate(scip_ptr.as_mut_ptr()) };
20 let mut scip_ptr = unsafe { scip_ptr.assume_init() };
21
22 unsafe { SCIPincludeDefaultPlugins(scip_ptr) };
24
25 unsafe { SCIPcreateProbBasic(scip_ptr, "test".as_ptr() as *const i8) };
26
27 let mut var_ptr = MaybeUninit::uninit();
29 unsafe {
30 SCIPcreateVarBasic(
31 scip_ptr,
32 var_ptr.as_mut_ptr(),
33 "x".as_ptr() as *const i8,
34 0.0,
35 1.0,
36 1.0,
37 SCIP_Vartype_SCIP_VARTYPE_BINARY,
38 )
39 };
40 let mut var_ptr = unsafe { var_ptr.assume_init() };
41 unsafe { SCIPaddVar(scip_ptr, var_ptr) };
42
43 let mut cons_ptr = MaybeUninit::uninit();
45 unsafe {
46 SCIPcreateConsBasicLinear(
47 scip_ptr,
48 cons_ptr.as_mut_ptr(),
49 "c".as_ptr() as *const i8,
50 1,
51 &mut var_ptr,
52 &mut 1.0,
53 1.0,
54 1.0,
55 )
56 };
57 let mut cons_ptr = unsafe { cons_ptr.assume_init() };
58 unsafe { SCIPaddCons(scip_ptr, cons_ptr) };
59
60 unsafe { SCIPsolve(scip_ptr) };
61
62 let obj_val = unsafe { SCIPgetPrimalbound(scip_ptr) };
63 let eps = unsafe { SCIPfeastol(scip_ptr) };
64 assert!((obj_val - 1.0).abs() < eps);
65
66 unsafe { SCIPreleaseVar(scip_ptr, &mut var_ptr) };
67 unsafe { SCIPreleaseCons(scip_ptr, &mut cons_ptr) };
68 unsafe { SCIPfree(&mut scip_ptr) };
69 }
70}