def test_majority(self): cnf = cnfformula.CNF([[(True, 'x'), (False, 'y')]]) lift = cnfformula.MajoritySubstitution(cnf, 3) self.assertCnfEqual( lift, cnfformula.CNF([ [(True, '{x}^0'), (True, '{x}^1'), (False, '{y}^0'), (False, '{y}^1')], [(True, '{x}^1'), (True, '{x}^2'), (False, '{y}^0'), (False, '{y}^1')], [(True, '{x}^2'), (True, '{x}^0'), (False, '{y}^0'), (False, '{y}^1')], [(True, '{x}^0'), (True, '{x}^1'), (False, '{y}^1'), (False, '{y}^2')], [(True, '{x}^1'), (True, '{x}^2'), (False, '{y}^1'), (False, '{y}^2')], [(True, '{x}^2'), (True, '{x}^0'), (False, '{y}^1'), (False, '{y}^2')], [(True, '{x}^0'), (True, '{x}^1'), (False, '{y}^2'), (False, '{y}^0')], [(True, '{x}^1'), (True, '{x}^2'), (False, '{y}^2'), (False, '{y}^0')], [(True, '{x}^2'), (True, '{x}^0'), (False, '{y}^2'), (False, '{y}^0')], ])) lift2 = cnfformula.MajoritySubstitution(cnf, 3) self.assertCnfEqual(lift, lift2)
def test_inequality_pos_clause(self) : cnf = cnfformula.CNF([[(True,'x')]]) lift = cnfformula.NotAllEqualSubstitution(cnf, 3) self.assertCnfEqual(lift,cnfformula.CNF([ [(True,'{x}^0'),(True,'{x}^1'),(True,'{x}^2')], [(False,'{x}^0'),(False,'{x}^1'),(False,'{x}^2')] ]))
def test_variable_and_polarity_flip(self) : cnf = cnfformula.CNF([[(True,'x'),(True,'y'),(False,'z')]]) variable_permutation = ['y','z','x'] clause_permutation = list(range(1)) polarity_flip = [1,-1,-1] shuffle = cnfshuffle.Shuffle(cnf, variable_permutation, clause_permutation, polarity_flip) expected = cnfformula.CNF([[(False,'y'),(True,'z'),(True,'x')]]) self.assertCnfEqual(expected,shuffle)
def test_eq_vs_neq(self): cnf = cnfformula.CNF([[(False, 'x'), (True, 'y')], [(True, 'z'), (True, 't')], [(False, 'u'), (False, 'v')]]) cnfneg = cnfformula.CNF([[(True, 'x'), (False, 'y')], [(False, 'z'), (False, 't')], [(True, 'u'), (True, 'v')]]) lifteq = cnfformula.AllEqualSubstitution(cnf, 4) liftneq = cnfformula.NotAllEqualSubstitution(cnfneg, 4) self.assertCnfEqual(lifteq, liftneq)
def test_if_then_else(self) : cnf = cnfformula.CNF([[(True,'x'),(False,'y')]]) lift = cnfformula.IfThenElseSubstitution(cnf) self.assertCnfEqual(lift,cnfformula.CNF([ [(False,'{x}^0'),(True,'{x}^1'),(False,'{y}^0'),(False,'{y}^1')], [(False,'{x}^0'),(True,'{x}^1'),(True,'{y}^0'),(False,'{y}^2')], [(True,'{x}^0'),(True,'{x}^2'),(False,'{y}^0'),(False,'{y}^1')], [(True,'{x}^0'),(True,'{x}^2'),(True,'{y}^0'),(False,'{y}^2')], ])) lift2 = cnfformula.IfThenElseSubstitution(cnf) self.assertCnfEqual(lift,lift2)
def test_equality(self) : cnf = cnfformula.CNF([[(False,'x'),(True,'y')]]) lift = cnfformula.AllEqualSubstitution(cnf, 2) self.assertCnfEqual(lift,cnfformula.CNF([ [(True,'{x}^0'),(True,'{x}^1'),(True,'{y}^0'),(False,'{y}^1')], [(False,'{x}^0'),(False,'{x}^1'),(True,'{y}^0'),(False,'{y}^1')], [(True,'{x}^0'),(True,'{x}^1'),(False,'{y}^0'),(True,'{y}^1')], [(False,'{x}^0'),(False,'{x}^1'),(False,'{y}^0'),(True,'{y}^1')], ])) lift2 = cnfformula.AllEqualSubstitution(cnf, 2) self.assertCnfEqual(lift,lift2)
def test_polarity_flip(self): cnf = cnfformula.CNF([[(True, 'x'), (True, 'y'), (False, 'z')]]) variables_permutation = list(cnf.variables()) constraints_permutation = list(range(1)) polarity_flips = [1, -1, -1] shuffle = cnfshuffle.Shuffle( cnf, variables_permutation=variables_permutation, constraints_permutation=constraints_permutation, polarity_flips=polarity_flips) expected = cnfformula.CNF([[(True, 'x'), (False, 'y'), (True, 'z')]]) self.assertCnfEqual(expected, shuffle)
def cnf_from_variables_and_clauses(variables, clauses): cnf = cnfformula.CNF() for variable in variables: cnf.add_variable(variable) for clause in clauses: cnf.add_clause(clause) return cnf
def test_variable_permutation(self) : cnf = cnfformula.CNF([[(True,'x'),(True,'y'),(False,'z')]]) variable_permutation = ['y','z','x'] clause_permutation = list(range(1)) polarity_flip = [1]*3 shuffle = cnfshuffle.Shuffle(cnf, variable_permutation, clause_permutation, polarity_flip) self.assertSequenceEqual(list(shuffle.variables()),variable_permutation) self.assertSequenceEqual(list(shuffle.clauses()),list(cnf.clauses()))
def test_safe_clause_insetion(self): F = cnfformula.CNF() F.add_variable("S") F.add_variable("U") F.add_clause([(True, "S"), (False, "T")]) self.assertTrue(len(list(F.variables())), 2) F.add_clause([(True, "T"), (False, "U")], strict=True) self.assertTrue(len(list(F.variables())), 3) self.assertRaises(ValueError, F.add_clause, [(True, "T"), (False, "V")], strict=True)
def test_one_var_cnf(self): dimacs = StringIO.StringIO("c Hej!\np cnf 1 2\n1 0\n-1 0\n") cnf = cnfutils.dimacs2cnf(dimacs) self.assertCnfEqual(cnf, cnfformula.CNF([[(True, 1)], [(False, 1)]]))
def test_one_clause_cnf(self): dimacs = StringIO.StringIO("c Hej!\np cnf 2 1\n1 -2 0\n") cnf = cnfutils.dimacs2cnf(dimacs) self.assertCnfEqual(cnf, cnfformula.CNF([[(True, 1), (False, 2)]]))
def test_commented_empty_cnf(self): dimacs = StringIO.StringIO("c Hej!\np cnf 0 0\n") cnf = cnfutils.dimacs2cnf(dimacs) self.assertCnfEqual(cnf, cnfformula.CNF())
def test_empty_cnf(self): dimacs = io.StringIO("p cnf 0 0\n") cnf = cnfutils.dimacs2cnf(dimacs) self.assertCnfEqual(cnf, cnfformula.CNF())
def test_empty(self): F = cnfformula.CNF() self.assertTrue(F._check_coherence()) self.assertListEqual(list(F.variables()), []) self.assertListEqual(list(F.clauses()), [])
def test_exactly_one(self): cnf = cnfformula.CNF([[(True, 'x'), (False, 'y')]]) lift = cnfformula.ExactlyOneSubstitution(cnf, 2) lift2 = cnfformula.ExactlyOneSubstitution(cnf, 2) self.assertCnfEqual(lift, lift2)