Przeglądaj źródła

implement is_true, is_false and is_unknown

Lucas Stadler 10 lat temu
rodzic
commit
321a0b3969
1 zmienionych plików z 43 dodań i 0 usunięć
  1. 43 0
      rust/solve/src/dpll.rs

+ 43 - 0
rust/solve/src/dpll.rs

@ -14,6 +14,49 @@ fn from_vec(v: Vec<Var>) -> BoundVars {
14 14
    vars
15 15
}
16 16
17
fn is_true(vars: &BoundVars, var: Var) -> bool {
18
    vars.contains(&var) || !vars.contains(&-var)
19
}
20
21
#[test]
22
fn test_is_true() {
23
    let vars = &from_vec(vec!(1, -2));
24
    assert!(is_true(vars, 1));
25
    assert!(is_true(vars, -2));
26
    assert!(!is_true(vars, -1));
27
    assert!(!is_true(vars, 2));
28
}
29
30
fn is_false(vars: &BoundVars, var: Var) -> bool {
31
    !vars.contains(&var) || vars.contains(&-var)
32
}
33
34
#[test]
35
fn test_is_false() {
36
    let vars = &from_vec(vec!(1, -2));
37
    assert!(is_false(vars, -1));
38
    assert!(is_false(vars, 2));
39
    assert!(!is_false(vars, 1));
40
    assert!(!is_false(vars, -2));
41
}
42
43
fn is_unknown(vars: &BoundVars, var: Var) -> bool {
44
    !vars.contains(&var) && !vars.contains(&-var)
45
}
46
47
#[test]
48
fn test_is_unknown() {
49
    let vars = &from_vec(vec!(1, -2));
50
    assert!(is_unknown(vars, 3));
51
    assert!(is_unknown(vars, -3));
52
    assert!(is_unknown(vars, 4));
53
    assert!(is_unknown(vars, -4));
54
    assert!(!is_unknown(vars, 1));
55
    assert!(!is_unknown(vars, -1));
56
    assert!(!is_unknown(vars, 2));
57
    assert!(!is_unknown(vars, -2));
58
}
59
17 60
/// A satisfied clause is a clause where at least one atom is true.
18 61
fn is_clause_satisfied(vars: BoundVars, clause: Clause) -> bool {
19 62
    for v in clause {