1 package org.sat4j.maxsat; 2 3 import static org.junit.Assert.assertEquals; 4 import static org.junit.Assert.assertTrue; 5 6 import java.math.BigInteger; 7 8 import org.junit.Test; 9 import org.sat4j.core.VecInt; 10 import org.sat4j.pb.OptToPBSATAdapter; 11 import org.sat4j.pb.PseudoOptDecorator; 12 import org.sat4j.specs.ContradictionException; 13 import org.sat4j.specs.IVecInt; 14 import org.sat4j.specs.TimeoutException; 15 16 public class BugSAT65 { 17 18 @Test 19 public void testOneSatisfiedConstraint() throws TimeoutException, ContradictionException { 20 WeightedMaxSatDecorator wms = new WeightedMaxSatDecorator(SolverFactory.newDefault()); 21 wms.newVar(2); 22 wms.setExpectedNumberOfClauses(3); 23 IVecInt clause = new VecInt().push(-1).push(1); 24 wms.addSoftClause(clause); 25 clause.clear(); 26 clause.push(2); 27 wms.addSoftClause(clause); 28 clause.clear(); 29 clause.push(-2); 30 wms.addSoftClause(clause); 31 OptToPBSATAdapter problem = new OptToPBSATAdapter(new PseudoOptDecorator(wms,false,false)); 32 assertTrue(problem.isSatisfiable()); 33 assertEquals(BigInteger.ONE,problem.getCurrentObjectiveValue()); 34 } 35 36 @Test 37 public void testOneSatisfiedConstraintImplicant() throws TimeoutException, ContradictionException { 38 WeightedMaxSatDecorator wms = new WeightedMaxSatDecorator(SolverFactory.newDefault()); 39 wms.newVar(2); 40 wms.setExpectedNumberOfClauses(3); 41 IVecInt clause = new VecInt().push(-1).push(1); 42 wms.addSoftClause(clause); 43 clause.clear(); 44 clause.push(2); 45 wms.addSoftClause(clause); 46 clause.clear(); 47 clause.push(-2); 48 wms.addSoftClause(clause); 49 OptToPBSATAdapter problem = new OptToPBSATAdapter(new PseudoOptDecorator(wms,false,true)); 50 assertTrue(problem.isSatisfiable()); 51 assertEquals(BigInteger.ONE,problem.getCurrentObjectiveValue()); 52 } 53 54 @Test 55 public void testTwoSatisfiedConstraint() throws TimeoutException, ContradictionException { 56 WeightedMaxSatDecorator wms = new WeightedMaxSatDecorator(SolverFactory.newDefault()); 57 wms.newVar(2); 58 wms.setExpectedNumberOfClauses(4); 59 IVecInt clause = new VecInt().push(-1).push(1); 60 wms.addSoftClause(clause); 61 clause.clear(); 62 clause.push(2).push(-2); 63 wms.addSoftClause(clause); 64 clause.clear(); 65 clause.push(2); 66 wms.addSoftClause(clause); 67 clause.clear(); 68 clause.push(-2); 69 wms.addSoftClause(clause); 70 OptToPBSATAdapter problem = new OptToPBSATAdapter(new PseudoOptDecorator(wms,false,false)); 71 assertTrue(problem.isSatisfiable()); 72 assertEquals(BigInteger.ONE,problem.getCurrentObjectiveValue()); 73 } 74 75 @Test 76 public void testTwoSatisfiedConstraintImplicant() throws TimeoutException, ContradictionException { 77 WeightedMaxSatDecorator wms = new WeightedMaxSatDecorator(SolverFactory.newDefault()); 78 wms.newVar(2); 79 wms.setExpectedNumberOfClauses(4); 80 IVecInt clause = new VecInt().push(-1).push(1); 81 wms.addSoftClause(clause); 82 clause.clear(); 83 clause.push(2).push(-2); 84 wms.addSoftClause(clause); 85 clause.clear(); 86 clause.push(2); 87 wms.addSoftClause(clause); 88 clause.clear(); 89 clause.push(-2); 90 wms.addSoftClause(clause); 91 OptToPBSATAdapter problem = new OptToPBSATAdapter(new PseudoOptDecorator(wms,false,true)); 92 assertTrue(problem.isSatisfiable()); 93 assertEquals(BigInteger.ONE,problem.getCurrentObjectiveValue()); 94 } 95 96 @Test 97 public void testOneSatisfiedConstraintMSTwoImplicant() throws TimeoutException, ContradictionException { 98 WeightedMaxSatDecorator wms = new WeightedMaxSatDecorator(SolverFactory.newDefault()); 99 wms.newVar(2); 100 wms.setExpectedNumberOfClauses(4); 101 IVecInt clause = new VecInt().push(-1).push(1); 102 wms.addSoftClause(clause); 103 clause.clear(); 104 clause.push(1); 105 wms.addSoftClause(clause); 106 clause.clear(); 107 clause.push(2); 108 wms.addSoftClause(clause); 109 clause.clear(); 110 clause.push(-2); 111 wms.addSoftClause(clause); 112 clause.clear(); 113 clause.push(-1); 114 wms.addSoftClause(clause); 115 OptToPBSATAdapter problem = new OptToPBSATAdapter(new PseudoOptDecorator(wms,false,true)); 116 assertTrue(problem.isSatisfiable()); 117 assertEquals(BigInteger.valueOf(2),problem.getCurrentObjectiveValue()); 118 } 119 120 @Test 121 public void testOneSatisfiedConstraintMSTwo() throws TimeoutException, ContradictionException { 122 WeightedMaxSatDecorator wms = new WeightedMaxSatDecorator(SolverFactory.newDefault()); 123 wms.newVar(2); 124 wms.setExpectedNumberOfClauses(4); 125 IVecInt clause = new VecInt().push(-1).push(1); 126 wms.addSoftClause(clause); 127 clause.clear(); 128 clause.push(1); 129 wms.addSoftClause(clause); 130 clause.clear(); 131 clause.push(2); 132 wms.addSoftClause(clause); 133 clause.clear(); 134 clause.push(-2); 135 wms.addSoftClause(clause); 136 clause.clear(); 137 clause.push(-1); 138 wms.addSoftClause(clause); 139 OptToPBSATAdapter problem = new OptToPBSATAdapter(new PseudoOptDecorator(wms,false,false)); 140 assertTrue(problem.isSatisfiable()); 141 assertEquals(BigInteger.valueOf(2),problem.getCurrentObjectiveValue()); 142 } 143 }