1#![allow(non_snake_case)]
9#![allow(non_upper_case_globals)]
10
11include!("../src-generated/bindings.rs");
12
13#[cfg(test)]
14mod tests {
15 #[test]
16 fn smoke_test() {
17 use std::ffi::CStr;
18 use crate::*;
19
20 unsafe {
21 let term_manager = bitwuzla_term_manager_new();
22
23 let s = bitwuzla_mk_bv_sort(term_manager, 16);
24 let a = bitwuzla_mk_const(term_manager, s, b"a\0" as *const _ as _);
25 let b = bitwuzla_mk_const(term_manager, s, b"b\0" as *const _ as _);
26 let c = bitwuzla_mk_const(term_manager, s, b"c\0" as *const _ as _);
27
28 let a_lt_b = bitwuzla_mk_term2(term_manager, BITWUZLA_KIND_BV_SLT, a, b);
29 let a_plus_c = bitwuzla_mk_term2(term_manager, BITWUZLA_KIND_BV_ADD, a, c);
30 let b_plus_c = bitwuzla_mk_term2(term_manager, BITWUZLA_KIND_BV_ADD, b, c);
31 let a_plus_c_gt_b_plus_c = bitwuzla_mk_term2(term_manager, BITWUZLA_KIND_BV_SGT, a_plus_c, b_plus_c);
32
33 let options = bitwuzla_options_new();
34 bitwuzla_set_option(options, BITWUZLA_OPT_PRODUCE_MODELS, 1);
35
36 let bzla = bitwuzla_new(term_manager, options);
37 bitwuzla_assert(bzla, a_lt_b);
38 bitwuzla_assert(bzla, a_plus_c_gt_b_plus_c);
39
40 assert_eq!(bitwuzla_check_sat(bzla), BITWUZLA_SAT);
41
42 let a = CStr::from_ptr(bitwuzla_term_value_get_str(bitwuzla_get_value(bzla, a))).to_str().unwrap().to_string();
43 let b = CStr::from_ptr(bitwuzla_term_value_get_str(bitwuzla_get_value(bzla, b))).to_str().unwrap().to_string();
44 let c = CStr::from_ptr(bitwuzla_term_value_get_str(bitwuzla_get_value(bzla, c))).to_str().unwrap().to_string();
45
46 let a = u16::from_str_radix(&a, 2).unwrap() as i16;
47 let b = u16::from_str_radix(&b, 2).unwrap() as i16;
48 let c = u16::from_str_radix(&c, 2).unwrap() as i16;
49
50 assert!(a.checked_add(c).is_none() || b.checked_add(c).is_none());
51
52 bitwuzla_delete(bzla);
53 bitwuzla_options_delete(options);
54 bitwuzla_term_manager_delete(term_manager);
55 }
56 }
57}