use oximo_core::prelude::*;
use oximo_io::{to_lp_string, to_mps_string};
fn range_model() -> Model {
let m = Model::new("rng");
variable!(m, x >= 0.0);
variable!(m, y >= 0.0);
constraint!(m, band, 1.0 <= x + y <= 4.0);
objective!(m, Max, x + y);
assert_eq!(m.num_constraints(), 1);
m
}
#[test]
fn mps_emits_ranges_section() {
let s = to_mps_string(&range_model()).expect("mps writer");
let has =
|fields: &[&str]| s.lines().any(|line| line.split_whitespace().eq(fields.iter().copied()));
assert!(has(&["L", "band"]), "{s}");
assert!(has(&["RHS", "band", "4"]), "{s}");
assert!(s.contains("RANGES"), "{s}");
assert!(has(&["RNG", "band", "3"]), "{s}");
}
#[test]
fn lp_expands_range_to_two_rows() {
let s = to_lp_string(&range_model()).expect("lp writer");
assert!(s.contains("band_lo:"), "{s}");
assert!(s.contains("band_hi:"), "{s}");
assert!(s.contains(">= 1"), "{s}");
assert!(s.contains("<= 4"), "{s}");
}