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.maxsat;
31
32 import static org.junit.Assert.assertArrayEquals;
33 import static org.junit.Assert.assertEquals;
34 import static org.junit.Assert.assertNotNull;
35 import static org.junit.Assert.assertTrue;
36 import static org.junit.Assert.fail;
37
38 import java.net.URL;
39
40 import org.junit.Before;
41 import org.junit.Test;
42 import org.sat4j.maxsat.reader.WDimacsReader;
43 import org.sat4j.pb.PseudoOptDecorator;
44 import org.sat4j.specs.IOptimizationProblem;
45 import org.sat4j.specs.IProblem;
46 import org.sat4j.tools.OptToSatAdapter;
47
48 public class MarcelBugsTests {
49
50 private WeightedMaxSatDecorator maxsat;
51 private WDimacsReader reader;
52
53 @Before
54 public void init() {
55 this.maxsat = new WeightedMaxSatDecorator(SolverFactory.newLight());
56 this.reader = new WDimacsReader(this.maxsat);
57 }
58
59 @Test
60 public void testProblemWithDuplicatedOppositeLiterals2() {
61 testProblemWithExpectedAnswer("Inconsistent2.wcnf", new int[] { -1, 2,
62 3 }, 5);
63 }
64
65 @Test
66 public void testProblemWithDuplicatedOppositeLiterals1() {
67 testProblemWithExpectedAnswer("Inconsistent1.wcnf",
68 new int[] { 1, 2, 3 }, 4);
69 }
70
71 @Test
72 public void testSimpleProblemWithTwoOppositeLiterals() {
73 testProblemWithExpectedAnswer("Inconsistent_Example.wcnf",
74 new int[] { -1 }, 1);
75 }
76
77 @Test
78 public void testProblemWithNegatedLiterals() {
79 testProblemWithExpectedAnswer("Example.wcnf",
80 new int[] { 1, 2, -3, 4 }, 0);
81 }
82
83 @Test
84 public void testProblemWithDuplicatedLiterals() {
85 testProblemWithExpectedAnswer("AnotherExample.wcnf", new int[] { 1 }, 2);
86 }
87
88 private void testProblemWithExpectedAnswer(String filename,
89 int[] expectation, int expectedValue) {
90 URL url = MarcelBugsTests.class.getResource(filename);
91 try {
92 IProblem problem = this.reader.parseInstance(url.getFile());
93 assertNotNull(problem);
94 IOptimizationProblem optproblem = new PseudoOptDecorator(
95 this.maxsat);
96 IProblem satproblem = new OptToSatAdapter(optproblem);
97 assertTrue(satproblem.isSatisfiable());
98 int[] model = satproblem.model();
99 assertNotNull(model);
100 assertArrayEquals(expectation, model);
101 assertEquals(expectedValue, optproblem.getObjectiveValue()
102 .intValue());
103
104 } catch (Exception e) {
105 fail(" Problem when reading instance : " + e);
106 }
107 }
108 }