use crate::solver::Basis;
use std::collections::BTreeMap;
#[derive(Clone, Debug)]
pub(crate) struct Node {
pub bound_changes: Vec<(usize, f64, f64)>,
pub basis: Basis,
pub lp_bound: f64,
pub depth: u32,
pub parent_id: u64,
pub branch_var: Option<usize>,
pub branch_up: bool,
pub branch_frac: f64,
}
pub(crate) fn effective_bounds(changes: &[(usize, f64, f64)]) -> Vec<(usize, f64, f64)> {
let mut map: BTreeMap<usize, (f64, f64)> = BTreeMap::new();
for &(v, lo, hi) in changes {
map.insert(v, (lo, hi));
}
map.into_iter().map(|(v, (lo, hi))| (v, lo, hi)).collect()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn effective_bounds_later_entries_win() {
let changes = vec![(3, 0.0, 7.0), (1, 0.0, 1.0), (3, 2.0, 5.0)];
assert_eq!(
effective_bounds(&changes),
vec![(1, 0.0, 1.0), (3, 2.0, 5.0)]
);
assert_eq!(effective_bounds(&[]), vec![]);
}
}