Commit e2d0349 1 parent 570616e commit e2d0349 Copy full SHA for e2d0349
File tree 2 files changed +22
-1
lines changed
2 files changed +22
-1
lines changed Original file line number Diff line number Diff line change @@ -110,11 +110,14 @@ class Trail {
110
110
111
111
bool backtrack () {
112
112
if (!trail_lim.empty ()) {
113
- for (int i = trail.size ()-1 ; i > trail_lim.back (); i--) {
113
+ if (verb) std::cout << " Backtracking to position " << trail_lim.back () << std::endl;
114
+ for (int i = trail.size ()-1 ; i >= (int )trail_lim.back (); i--) {
115
+ if (verb) std::cout << " Unassigning " << trail[i] << " at position " << i << std::endl;
114
116
val[trail[i].var ()] = UNASSIGNED;
115
117
}
116
118
trail.resize (trail_lim.back ());
117
119
trail_lim.pop_back ();
120
+ head = trail.size ();
118
121
return true ;
119
122
}
120
123
return false ;
Original file line number Diff line number Diff line change @@ -26,4 +26,22 @@ TEST_CASE("Trail") {
26
26
CHECK (trail.init (f));
27
27
CHECK (trail.propagate ());
28
28
}
29
+
30
+ SUBCASE (" backtrack" ) {
31
+ CNFFormula f;
32
+ f.readClause ({ Lit (1 , true ), Lit (2 ) });
33
+ f.readClause ({ Lit (2 , true ), Lit (3 ) });
34
+ Trail trail {};
35
+ CHECK (trail.init (f));
36
+ CHECK (trail.push (Lit (1 , false )));
37
+ CHECK (trail.propagate ());
38
+ CHECK (trail[0 ] == Lit (1 , false ));
39
+ CHECK (trail[1 ] == Lit (2 , false ));
40
+ CHECK (trail[2 ] == Lit (3 , false ));
41
+ CHECK (trail.backtrack ());
42
+ CHECK (trail.push (Lit (2 , true )));
43
+ CHECK (trail.propagate ());
44
+ CHECK (trail[0 ] == Lit (2 , true ));
45
+ CHECK (trail[1 ] == Lit (1 , true ));
46
+ }
29
47
}
You can’t perform that action at this time.
0 commit comments