use ddo::*;
use crate::{Golomb, GolombRanking, GolombRelax};
pub fn solve_golomb(n: usize) -> isize {
let problem = Golomb::new(n);
let relaxation = GolombRelax{pb: &problem};
let heuristic = GolombRanking;
let width = NbUnassignedWidth(problem.nb_variables());
let dominance = EmptyDominanceChecker::default();
let cutoff = NoCutoff;
let mut fringe = SimpleFringe::new(MaxUB::new(&heuristic));
let mut solver = DefaultCachingSolver::new(
&problem,
&relaxation,
&heuristic,
&width,
&dominance,
&cutoff,
&mut fringe,
);
let Completion{ is_exact: _, best_value } = solver.maximize();
best_value.map(|x| -x).unwrap_or(-1)
}
#[test]
fn golomb2() {
assert_eq!(solve_golomb(2), 1);
}
#[test]
fn golomb3() {
assert_eq!(solve_golomb(3), 3);
}
#[test]
fn golomb4() {
assert_eq!(solve_golomb(4), 6);
}
#[test]
fn golomb5() {
assert_eq!(solve_golomb(5), 11);
}
#[test]
fn golomb6() {
assert_eq!(solve_golomb(6), 17);
}
#[test]
fn golomb7() {
assert_eq!(solve_golomb(7), 25);
}
#[test]
fn golomb8() {
assert_eq!(solve_golomb(8), 34);
}
#[test]
fn golomb9() {
assert_eq!(solve_golomb(9), 44);
}