use copper::views::ViewExt;
fn main() {
let mut m = copper::Model::default();
let n_monitors = m.new_var(1, 3).unwrap();
let monitor_price = 100;
let monitor_score = 250;
let gpu_prices = [150, 250, 500];
let gpu_scores = [100, 400, 800];
let gpus: Vec<_> = m.new_vars_binary(gpu_scores.len()).collect();
let gpu_price = m.sum_iter(gpus.iter().zip(gpu_prices).map(|(x, price)| x.times(price)));
let gpu_score = m.sum_iter(gpus.iter().zip(gpu_scores).map(|(x, score)| x.times(score)));
let price = m.add(gpu_price, n_monitors.times(monitor_price));
let score = m.add(gpu_score, n_monitors.times(monitor_score));
let n_gpus = m.sum(&gpus);
m.equals(n_gpus, 1);
m.less_than_or_equals(price, 600);
let solution = m.maximize(score).unwrap();
assert_eq!(solution[n_monitors], 3);
assert_eq!(solution.get_values_binary(&gpus), vec![false, true, false]);
assert_eq!(solution[score], 1150);
assert_eq!(solution[price], 550);
}