use rustsat::{
    encodings::pb::{BoundUpper, DbGte},
    instances::{BasicVarManager, Cnf, ManageVars},
    lit,
    types::{Lit, Var},
};
macro_rules! lits {
    () => {
        [
            (lit![0], 24),
            (lit![1], 30),
            (lit![2], 13),
            (lit![3], 11),
            (lit![4], 42),
            (lit![5], 6),
            (lit![6], 44),
            (lit![7], 14),
            (lit![8], 46),
            (lit![9], 9),
            (lit![10], 31),
            (lit![11], 31),
            (lit![12], 25),
            (lit![13], 24),
            (lit![14], 16),
            (lit![15], 50),
            (lit![16], 18),
            (lit![17], 23),
            (lit![18], 37),
            (lit![19], 11),
            (lit![20], 34),
            (lit![21], 1),
            (lit![22], 34),
            (lit![23], 46),
            (lit![24], 49),
            (lit![25], 6),
            (lit![26], 28),
            (lit![27], 46),
            (lit![28], 3),
            (lit![29], 9),
            (lit![30], 27),
            (lit![31], 35),
            (lit![32], 46),
            (lit![33], 9),
            (lit![34], 36),
            (lit![35], 4),
            (lit![36], 29),
            (lit![37], 46),
            (lit![38], 30),
            (lit![39], 28),
            (lit![40], 35),
            (lit![41], 30),
            (lit![42], 42),
            (lit![43], 4),
            (lit![44], 29),
            (lit![45], 5),
            (lit![46], 40),
            (lit![47], 46),
            (lit![48], 46),
            (lit![49], 35),
        ]
    };
}
fn build_full_ub<PBE: BoundUpper + FromIterator<(Lit, usize)>>(lits: &[(Lit, usize)]) {
    let mut enc = PBE::from_iter(lits.iter().copied());
    let max_var = lits
        .iter()
        .fold(Var::new(0), |mv, (lit, _)| std::cmp::max(lit.var(), mv));
    let mut var_manager = BasicVarManager::default();
    var_manager.increase_next_free(max_var + 1);
    let mut collector = Cnf::new();
    enc.encode_ub(.., &mut collector, &mut var_manager).unwrap();
}
fn main() {
    for idx in 0..1 {
        build_full_ub::<DbGte>(&lits!());
        println!("iteration {}", idx);
    }
}