def test(self, f): self.case += 1 self.tested += 1 print("CASE %d: %s" % (self.case, f.toString())) cnf = CnfClause() try: start = now() cnf = f.toCnf() duration = now() - start except KeyboardInterrupt: raise KeyboardInterrupt() except: printException() if stopOnError: raise FailedTestException() return deg = self.formulaDeg(f) size = self.cnfSize(cnf) print('CNF: time: %12.9f f.deg: %3d cnf.size: %3d' % (duration, deg, size)) if not isinstance(cnf, Cnf): print('FAILED: not a Cnf: %s' % type(cnf)) print() return start = now() equiSatisfiable = self.satisfiableFormula(f) == self.satisfiableCnf( cnf) equivalent = self.formulaVars(f).issubset(self.cnfVars(cnf)) and \ all(self.formulaEval(f, i) == self.cnfEval(cnf, i) for i in self.interpretations(self.cnfVars(cnf))) duration = now() - start if equivalent: self.equiv += 1 self.size += size self.time += duration if equiSatisfiable: self.passed += 1 print('PASSED: testTime: %12.9f equiSatisfiable %s' % (duration, 'equivalent' if equivalent else '')) else: if len(cnf) < 20: print('FAILED: \n-----CNF-----\n%s%s' % (cnf.toString(), '-' * 13)) else: print('FAILED: \n-----CNF-----\n%s...\n%s' % (Cnf(cnf[:20]).toString(), '-' * 13)) if stopOnError: raise FailedTestException() print()
}, True), ({ 'a': False }, False), ]) t.testCnf(CnfLit.Not('a'), '-a', [ ({ 'a': True }, False), ({ 'a': False }, True), ]) t.testCnf(CnfClause([CnfLit('a'), CnfLit('a')]), 'a a', [ ({ 'a': True }, True), ({ 'a': False }, False), ]) t.testCnf(CnfClause([CnfLit('a'), CnfLit.Not('a')]), 'a -a', [ ({ 'a': True }, True), ({ 'a': False }, True),