1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package org.sat4j;
31
32 import static org.junit.Assert.assertNotNull;
33 import static org.junit.Assert.assertNull;
34
35 import java.util.ArrayList;
36 import java.util.Collection;
37
38 import org.junit.Test;
39 import org.junit.runner.RunWith;
40 import org.junit.runners.Parameterized;
41 import org.junit.runners.Parameterized.Parameters;
42 import org.sat4j.core.VecInt;
43 import org.sat4j.minisat.SolverFactory;
44 import org.sat4j.specs.ContradictionException;
45 import org.sat4j.specs.IConstr;
46 import org.sat4j.specs.ISolver;
47 import org.sat4j.specs.TimeoutException;
48
49 @RunWith(Parameterized.class)
50 public class BugSAT34 {
51
52 ISolver system;
53 String solvername;
54
55 public BugSAT34(ISolver system, String solvername) {
56 this.system = system;
57 this.solvername = solvername;
58 }
59
60 @Parameters
61 public static Collection<Object[]> generateSolvers() {
62 Collection<Object[]> solvers = new ArrayList<Object[]>();
63 for (String name : SolverFactory.instance().solverNames()) {
64 if (!"DimacsOutput".equals(name)) {
65 solvers.add(new Object[] {
66 SolverFactory.instance().createSolverByName(name), name });
67 }
68 }
69 return solvers;
70 }
71
72 @Test
73 public void testUnitClause() {
74 this.system.newVar(3);
75 try {
76
77 this.system.addClause(new VecInt(new int[] { 1, 2, -3 }));
78 this.system.addClause(new VecInt(new int[] { -1, 3 }));
79 this.system.addClause(new VecInt(new int[] { -2, 3 }));
80
81 this.system.addClause(new VecInt(new int[] { -1, -2 }));
82
83 IConstr unit = this.system.addClause(new VecInt(new int[] { 2 }));
84 assertNotNull(this.solvername + " has unit clause problem", unit);
85
86 IConstr cl = this.system.addAtLeast(new VecInt(new int[] { 3 }), 1);
87 assertNotNull(this.solvername + " has unit clause problem", cl);
88 int[] model = this.system.findModel();
89 assertNotNull(this.solvername + " has a model problem", model);
90 this.system.removeConstr(cl);
91
92 cl = this.system.addAtLeast(new VecInt(new int[] { 3 }), 1);
93 assertNotNull(this.solvername + " has unit clause problem", cl);
94
95
96 IConstr r = this.system.addClause(new VecInt(new int[] { 1 }));
97 assertNotNull(r);
98 assertNotNull(this.solvername + " has unit clause problem", r);
99 model = this.system.findModel();
100 assertNull(this.solvername + " has a model problem", model);
101 } catch (ContradictionException e) {
102 } catch (TimeoutException e) {
103 }
104 ;
105 }
106
107 }