Clover Coverage Report
Coverage timestamp: mer. juin 27 2007 07:27:16 CEST
13   73   5   6,5
2   30   0,46   2
2     3  
1    
 
  SolutionCounter       Line # 42 13 5 0% 0.0
 
No Tests
 
1    /*
2    * SAT4J: a SATisfiability library for Java Copyright (C) 2004-2006 Daniel Le Berre
3    *
4    * Based on the original minisat specification from:
5    *
6    * An extensible SAT solver. Niklas E?n and Niklas S?rensson. Proceedings of the
7    * Sixth International Conference on Theory and Applications of Satisfiability
8    * Testing, LNCS 2919, pp 502-518, 2003.
9    *
10    * This library is free software; you can redistribute it and/or modify it under
11    * the terms of the GNU Lesser General Public License as published by the Free
12    * Software Foundation; either version 2.1 of the License, or (at your option)
13    * any later version.
14    *
15    * This library is distributed in the hope that it will be useful, but WITHOUT
16    * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17    * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
18    * details.
19    *
20    * You should have received a copy of the GNU Lesser General Public License
21    * along with this library; if not, write to the Free Software Foundation, Inc.,
22    * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23    *
24    */
25    package org.sat4j.tools;
26   
27    import org.sat4j.core.VecInt;
28    import org.sat4j.specs.ContradictionException;
29    import org.sat4j.specs.ISolver;
30    import org.sat4j.specs.IVecInt;
31    import org.sat4j.specs.TimeoutException;
32   
33    /**
34    * Another solver decorator that counts the number of solutions.
35    *
36    * Note that this approach is quite naive so do not expect it to work on large
37    * examples.
38    *
39    * @author leberre
40    *
41    */
 
42    public class SolutionCounter extends SolverDecorator {
43   
44    /**
45    *
46    */
47    private static final long serialVersionUID = 1L;
48   
 
49  0 toggle public SolutionCounter(ISolver solver) {
50  0 super(solver);
51    }
52   
 
53  0 toggle public long countSolutions() throws TimeoutException {
54  0 long nbsols = 0;
55  0 boolean trivialfalsity = false;
56   
57  0 while (!trivialfalsity && isSatisfiable()) {
58  0 nbsols++;
59  0 int[] last = model();
60  0 IVecInt clause = new VecInt(last.length);
61  0 for (int q : last) {
62  0 clause.push(-q);
63    }
64  0 try {
65    // System.out.println("Sol number "+nbsols+" adding " + clause);
66  0 addClause(clause);
67    } catch (ContradictionException e) {
68  0 trivialfalsity = true;
69    }
70    }
71  0 return nbsols;
72    }
73    }