Add convenience functions for unify.
This commit is contained in:
parent
f265a165dd
commit
93cf70c0ca
@ -60,7 +60,6 @@ impl Constraint for Unify {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use ::Puzzle;
|
use ::Puzzle;
|
||||||
use super::Unify;
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_unify_alldifferent() {
|
fn test_unify_alldifferent() {
|
||||||
@ -69,7 +68,7 @@ mod tests {
|
|||||||
let v1 = puzzle.new_var_with_candidates(&[1,2]);
|
let v1 = puzzle.new_var_with_candidates(&[1,2]);
|
||||||
|
|
||||||
puzzle.all_different(&[v0, v1]);
|
puzzle.all_different(&[v0, v1]);
|
||||||
puzzle.add_constraint(Unify::new(v0, v1));
|
puzzle.unify(v0, v1);
|
||||||
|
|
||||||
let search = puzzle.step();
|
let search = puzzle.step();
|
||||||
assert!(search.is_none());
|
assert!(search.is_none());
|
||||||
@ -83,7 +82,7 @@ mod tests {
|
|||||||
let v2 = puzzle.new_var_with_candidates(&[1,2,3,4]);
|
let v2 = puzzle.new_var_with_candidates(&[1,2,3,4]);
|
||||||
|
|
||||||
puzzle.equals(v0 + 2 * v1 + v2, 6);
|
puzzle.equals(v0 + 2 * v1 + v2, 6);
|
||||||
puzzle.add_constraint(Unify::new(v0, v1));
|
puzzle.unify(v0, v1);
|
||||||
|
|
||||||
let search = puzzle.step().expect("contradiction");
|
let search = puzzle.step().expect("contradiction");
|
||||||
assert_eq!(search[v0], 1);
|
assert_eq!(search[v0], 1);
|
||||||
@ -98,8 +97,8 @@ mod tests {
|
|||||||
let v1 = puzzle.new_var_with_candidates(&[1,2,3,4]);
|
let v1 = puzzle.new_var_with_candidates(&[1,2,3,4]);
|
||||||
let v2 = puzzle.new_var_with_candidates(&[1,2,3,4]);
|
let v2 = puzzle.new_var_with_candidates(&[1,2,3,4]);
|
||||||
|
|
||||||
puzzle.add_constraint(Unify::new(v0, v1));
|
puzzle.unify(v0, v1);
|
||||||
puzzle.add_constraint(Unify::new(v1, v2));
|
puzzle.unify(v1, v2);
|
||||||
|
|
||||||
let search = puzzle.step().expect("contradiction");
|
let search = puzzle.step().expect("contradiction");
|
||||||
assert_eq!(search[v0], 1);
|
assert_eq!(search[v0], 1);
|
||||||
|
@ -333,6 +333,23 @@ impl Puzzle {
|
|||||||
self.add_constraint(constraint::Equality::new(lhs.into() - rhs.into()));
|
self.add_constraint(constraint::Equality::new(lhs.into() - rhs.into()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Add a Unify constraint.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// let mut send_more_money = puzzle_solver::Puzzle::new();
|
||||||
|
/// let carry = send_more_money.new_vars_with_candidates_1d(4, &[0,1]);
|
||||||
|
/// let vars = send_more_money.new_vars_with_candidates_1d(8,
|
||||||
|
/// &[0,1,2,3,4,5,6,7,8,9]);
|
||||||
|
///
|
||||||
|
/// let m = vars[4];
|
||||||
|
/// send_more_money.unify(m, carry[3]);
|
||||||
|
/// ```
|
||||||
|
pub fn unify(&mut self, var1: VarToken, var2: VarToken) {
|
||||||
|
self.add_constraint(constraint::Unify::new(var1, var2));
|
||||||
|
}
|
||||||
|
|
||||||
/// Find any solution to the given puzzle.
|
/// Find any solution to the given puzzle.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
|
Loading…
Reference in New Issue
Block a user