Skip to content

Commit

Permalink
tests: add tests for FlipLit trait
Browse files Browse the repository at this point in the history
  • Loading branch information
chrjabs committed Jul 8, 2024
1 parent 916dbb6 commit 0692ba7
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 0 deletions.
1 change: 1 addition & 0 deletions cadical/tests/flipping.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
rustsat_solvertests::flipping_tests!(rustsat_cadical::CaDiCaL);
45 changes: 45 additions & 0 deletions solvertests/src/integration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -237,3 +237,48 @@ pub fn phasing(input: MacroInput) -> TokenStream {
});
ts
}

pub fn flipping(input: MacroInput) -> TokenStream {
let slv = input.slv;
let ignoretok = |idx: usize| -> Option<Attribute> {
if input.bools.len() > idx && input.bools[idx] {
Some(parse_quote! {#[ignore]})
} else {
None
}
};
let mut ts = quote! {
macro_rules! init_slv {
($slv:ty) => {
<$slv>::default()
};
($init:expr) => {
$init
};
}
};
let ignore = ignoretok(0);
ts.extend(quote! {
#[test]
#ignore
fn flipping_lits() {
use rustsat::{
clause, lit,
solvers::{FlipLit, Solve, SolveIncremental, SolverResult},
};
let mut solver = init_slv!(#slv);
solver.add_clause(clause![lit![0]]).unwrap();
solver.add_clause(clause![lit![1], lit![2]]).unwrap();
assert_eq!(
solver.solve_assumps(&[lit![1], lit![2]]).unwrap(),
SolverResult::Sat
);
assert!(!solver.is_flippable(!lit![0]).unwrap());
assert!(solver.is_flippable(!lit![1]).unwrap());
assert!(solver.is_flippable(!lit![2]).unwrap());
assert!(solver.flip_lit(!lit![1]).unwrap());
assert!(!solver.is_flippable(!lit![2]).unwrap());
}
});
ts
}
6 changes: 6 additions & 0 deletions solvertests/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,9 @@ pub fn phasing_tests(tokens: TokenStream) -> TokenStream {
let input = parse_macro_input!(tokens as MacroInput);
integration::phasing(input).into()
}

#[proc_macro]
pub fn flipping_tests(tokens: TokenStream) -> TokenStream {
let input = parse_macro_input!(tokens as MacroInput);
integration::flipping(input).into()
}

0 comments on commit 0692ba7

Please sign in to comment.