use selen::prelude::*;
#[test]
fn test_int_eq_reif_true() {
let mut m = Model::default();
let x = m.int(1, 10);
let y = m.int(1, 10);
let b = m.bool();
m.eq_reif(x, y, b);
m.new(b.eq(1));
m.new(x.eq(5));
let solution = m.solve().expect("Should find solution");
assert_eq!(solution[x], Val::ValI(5));
assert_eq!(solution[y], Val::ValI(5));
assert_eq!(solution[b], Val::ValI(1));
}
#[test]
fn test_int_eq_reif_false() {
let mut m = Model::default();
let x = m.int(1, 10);
let y = m.int(1, 10);
let b = m.bool();
m.eq_reif(x, y, b);
m.new(b.eq(0));
m.new(x.eq(5));
let solution = m.solve().expect("Should find solution");
assert_eq!(solution[x], Val::ValI(5));
assert_ne!(solution[y], Val::ValI(5));
assert_eq!(solution[b], Val::ValI(0));
}
#[test]
fn test_int_eq_reif_inference_to_true() {
let mut m = Model::default();
let x = m.int(1, 10);
let y = m.int(1, 10);
let b = m.bool();
m.eq_reif(x, y, b);
m.new(x.eq(5));
m.new(y.eq(5));
let solution = m.solve().expect("Should find solution");
assert_eq!(solution[x], Val::ValI(5));
assert_eq!(solution[y], Val::ValI(5));
assert_eq!(solution[b], Val::ValI(1));
}
#[test]
fn test_int_eq_reif_inference_to_false() {
let mut m = Model::default();
let x = m.int(1, 10);
let y = m.int(1, 10);
let b = m.bool();
m.eq_reif(x, y, b);
m.new(x.eq(5));
m.new(y.eq(7));
let solution = m.solve().expect("Should find solution");
assert_eq!(solution[x], Val::ValI(5));
assert_eq!(solution[y], Val::ValI(7));
assert_eq!(solution[b], Val::ValI(0));
}
#[test]
fn test_int_ne_reif_true() {
let mut m = Model::default();
let x = m.int(1, 10);
let y = m.int(1, 10);
let b = m.bool();
m.ne_reif(x, y, b);
m.new(b.eq(1));
m.new(x.eq(5));
let solution = m.solve().expect("Should find solution");
assert_eq!(solution[x], Val::ValI(5));
assert_ne!(solution[y], Val::ValI(5));
assert_eq!(solution[b], Val::ValI(1));
}
#[test]
fn test_int_ne_reif_false() {
let mut m = Model::default();
let x = m.int(1, 10);
let y = m.int(1, 10);
let b = m.bool();
m.ne_reif(x, y, b);
m.new(b.eq(0));
m.new(x.eq(5));
let solution = m.solve().expect("Should find solution");
assert_eq!(solution[x], Val::ValI(5));
assert_eq!(solution[y], Val::ValI(5));
assert_eq!(solution[b], Val::ValI(0));
}