Przeglądaj źródła

use is_true and is_false in the is_clause_* functions

Lucas Stadler 10 lat temu
rodzic
commit
77c4e49916
1 zmienionych plików z 11 dodań i 11 usunięć
  1. 11 11
      rust/solve/src/dpll.rs

+ 11 - 11
rust/solve/src/dpll.rs

74
}
74
}
75
75
76
/// A satisfied clause is a clause where at least one atom is true.
76
/// A satisfied clause is a clause where at least one atom is true.
77
fn is_clause_satisfied(vars: BoundVars, clause: Clause) -> bool {
77
fn is_clause_satisfied(vars: &BoundVars, clause: Clause) -> bool {
78
    for v in clause {
78
    for v in clause {
79
        if vars.contains(&v) {
79
        if is_true(vars, v) {
80
            return true
80
            return true
81
        }
81
        }
82
    }
82
    }
86
86
87
#[test]
87
#[test]
88
fn test_is_clause_satisfied() {
88
fn test_is_clause_satisfied() {
89
    assert!(is_clause_satisfied(from_vec(vec!(1)), vec!(1)));
90
    assert!(!is_clause_satisfied(empty_vars(), vec!(1)));
89
    assert!(is_clause_satisfied(&from_vec(vec!(1)), vec!(1)));
90
    assert!(!is_clause_satisfied(&empty_vars(), vec!(1)));
91
}
91
}
92
92
93
/// A conflict clause is a clause whose atoms each are false.
93
/// A conflict clause is a clause whose atoms each are false.
94
fn is_clause_conflict(vars: BoundVars, clause: Clause) -> bool {
94
fn is_clause_conflict(vars: &BoundVars, clause: Clause) -> bool {
95
    for v in clause {
95
    for v in clause {
96
        if vars.contains(&v) {
96
        if is_true(vars, v) {
97
            return false
97
            return false
98
        }
98
        }
99
    }
99
    }
103
103
104
#[test]
104
#[test]
105
fn test_is_clause_conflict() {
105
fn test_is_clause_conflict() {
106
    assert!(is_clause_conflict(empty_vars(), vec!(1)));
107
    assert!(is_clause_conflict(empty_vars(), vec!(1, 2, 3)));
108
    assert!(is_clause_conflict(from_vec(vec!(4)), vec!(1, 2, 3)));
109
    assert!(!is_clause_conflict(from_vec(vec!(1)), vec!(1)));
110
    assert!(!is_clause_conflict(from_vec(vec!(2)), vec!(1, 2)));
106
    assert!(is_clause_conflict(&empty_vars(), vec!(1)));
107
    assert!(is_clause_conflict(&empty_vars(), vec!(1, 2, 3)));
108
    assert!(is_clause_conflict(&from_vec(vec!(4)), vec!(1, 2, 3)));
109
    assert!(!is_clause_conflict(&from_vec(vec!(1)), vec!(1)));
110
    assert!(!is_clause_conflict(&from_vec(vec!(2)), vec!(1, 2)));
111
}
111
}