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.assertEquals;
33
34 import org.junit.Test;
35 import org.sat4j.core.VecInt;
36 import org.sat4j.minisat.SolverFactory;
37 import org.sat4j.specs.ContradictionException;
38 import org.sat4j.specs.ISolver;
39 import org.sat4j.specs.TimeoutException;
40
41 public class BugSAT43 {
42
43 @Test
44 public void testNoDeclaredVariables() throws ContradictionException,
45 TimeoutException {
46 ISolver solver = SolverFactory.newDefault();
47 assertEquals(0, solver.nVars());
48 assertEquals(0, solver.realNumberOfVariables());
49 for (int i = 0; i < 10; i++) {
50 solver.nextFreeVarId(true);
51 }
52 assertEquals(10, solver.nVars());
53 assertEquals(10, solver.realNumberOfVariables());
54 solver.addClause(new VecInt(new int[] { 1, 2, 3 }));
55 int[] model1 = solver.findModel();
56 assertEquals(3, model1.length);
57 int[] model2 = solver.modelWithInternalVariables();
58 assertEquals(3, model2.length);
59 }
60
61 @Test
62 public void testDeclaredVariables() throws ContradictionException,
63 TimeoutException {
64 ISolver solver = SolverFactory.newDefault();
65 solver.newVar(10);
66 assertEquals(10, solver.nVars());
67 assertEquals(10, solver.realNumberOfVariables());
68 solver.addClause(new VecInt(new int[] { 1, 2, 3 }));
69 int[] model1 = solver.findModel();
70 assertEquals(3, model1.length);
71 int[] model2 = solver.modelWithInternalVariables();
72 assertEquals(3, model2.length);
73 for (int i = 0; i < 10; i++) {
74 solver.nextFreeVarId(true);
75 }
76 assertEquals(10, solver.nVars());
77 assertEquals(20, solver.realNumberOfVariables());
78 model1 = solver.findModel();
79 assertEquals(3, model1.length);
80 System.out.println(new VecInt(model1));
81 model2 = solver.modelWithInternalVariables();
82 assertEquals(3, model2.length);
83 int[] clause = { 14, 16, 19 };
84 solver.addClause(new VecInt(clause));
85 model1 = solver.findModel();
86 assertEquals(3, model1.length);
87 System.out.println(new VecInt(model1));
88 model2 = solver.modelWithInternalVariables();
89 assertEquals(6, model2.length);
90 }
91
92 @Test
93 public void implicitDeclarationOfVariables() throws ContradictionException,
94 TimeoutException {
95 ISolver solver = SolverFactory.newDefault();
96 assertEquals(0, solver.nVars());
97 assertEquals(0, solver.realNumberOfVariables());
98 solver.addClause(new VecInt(new int[] { 1, 2, 3 }));
99 assertEquals(3, solver.nVars());
100 assertEquals(3, solver.realNumberOfVariables());
101 for (int i = 0; i < 10; i++) {
102 solver.nextFreeVarId(true);
103 }
104 assertEquals(13, solver.nVars());
105 assertEquals(13, solver.realNumberOfVariables());
106 int[] model1 = solver.findModel();
107 assertEquals(3, model1.length);
108 int[] model2 = solver.modelWithInternalVariables();
109 assertEquals(3, model2.length);
110 }
111 }