|
|
@ -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 {
|