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 junit.framework.TestCase;
33
34 import org.sat4j.core.VecInt;
35 import org.sat4j.minisat.SolverFactory;
36 import org.sat4j.specs.ContradictionException;
37 import org.sat4j.specs.ISolver;
38 import org.sat4j.specs.IVecInt;
39 import org.sat4j.specs.TimeoutException;
40 import org.sat4j.tools.SingleSolutionDetector;
41
42 public class SingleSolutionTest extends TestCase {
43
44 public SingleSolutionTest(String name) {
45 super(name);
46 }
47
48 @Override
49 protected void setUp() throws Exception {
50 this.solver = SolverFactory.newDefault();
51 this.detector = new SingleSolutionDetector(this.solver);
52 this.detector.newVar(3);
53 }
54
55
56
57
58
59 public void testHasASingleSolution() throws ContradictionException,
60 TimeoutException {
61 IVecInt clause = new VecInt();
62 clause.push(1).push(2);
63 this.detector.addClause(clause);
64 clause.clear();
65 clause.push(-1).push(-2);
66 this.detector.addClause(clause);
67 assertTrue(this.detector.isSatisfiable());
68 assertFalse(this.detector.hasASingleSolution());
69 }
70
71
72
73
74
75 public void testHasNoSingleSolution() throws ContradictionException,
76 TimeoutException {
77 IVecInt clause = new VecInt();
78 clause.push(1).push(2);
79 this.detector.addClause(clause);
80 clause.clear();
81 clause.push(-1).push(-2);
82 this.detector.addClause(clause);
83 assertTrue(this.detector.isSatisfiable());
84 clause.clear();
85 clause.push(-1).push(2);
86 this.detector.addClause(clause);
87 assertTrue(this.detector.isSatisfiable());
88 assertTrue(this.detector.hasASingleSolution());
89 clause.clear();
90 clause.push(1).push(-2);
91 this.detector.addClause(clause);
92 assertFalse(this.detector.isSatisfiable());
93 try {
94 assertFalse(this.detector.hasASingleSolution());
95 fail();
96 } catch (UnsupportedOperationException e) {
97
98 }
99 }
100
101
102
103
104
105 public void testHasNoSingleSolutionUNSAT() throws ContradictionException,
106 TimeoutException {
107 IVecInt clause = new VecInt();
108 clause.push(1).push(2);
109 this.detector.addClause(clause);
110 clause.clear();
111 clause.push(-1).push(-2);
112 this.detector.addClause(clause);
113 assertTrue(this.detector.isSatisfiable());
114 clause.clear();
115 clause.push(-1).push(2);
116 this.detector.addClause(clause);
117 assertTrue(this.detector.isSatisfiable());
118 clause.clear();
119 clause.push(1).push(-2);
120 this.detector.addClause(clause);
121 assertFalse(this.detector.isSatisfiable());
122 try {
123 assertFalse(this.detector.hasASingleSolution());
124 fail();
125 } catch (UnsupportedOperationException e) {
126
127 }
128 }
129
130
131
132
133
134 public void testHasASingleSolutionIVecInt() throws ContradictionException,
135 TimeoutException {
136 IVecInt clause = new VecInt();
137 clause.push(1).push(2);
138 this.detector.addClause(clause);
139 IVecInt assumptions = new VecInt();
140 assumptions.push(1);
141 assertTrue(this.detector.isSatisfiable(assumptions));
142 assertFalse(this.detector.hasASingleSolution(assumptions));
143 clause.clear();
144 clause.push(-1).push(2);
145 this.detector.addClause(clause);
146 assertTrue(this.detector.isSatisfiable(assumptions));
147 assertTrue(this.detector.hasASingleSolution(assumptions));
148 clause.clear();
149 clause.push(-1).push(-2);
150 this.detector.addClause(clause);
151 assertFalse(this.detector.isSatisfiable(assumptions));
152 try {
153 assertFalse(this.detector.hasASingleSolution(assumptions));
154 fail();
155 } catch (UnsupportedOperationException e) {
156
157 }
158 }
159
160 private ISolver solver;
161
162 private SingleSolutionDetector detector;
163 }