def testRelated(self): cs = ConstraintSet() aa1 = cs.new_bool(name="AA1") aa2 = cs.new_bool(name="AA2") bb1 = cs.new_bool(name="BB1") bb2 = cs.new_bool(name="BB2") cs.add(Operators.OR(aa1, aa2)) cs.add(Operators.OR(bb1, bb2)) self.assertTrue(self.solver.check(cs)) # No BB variables related to AA self.assertNotIn("BB", cs.related_to(aa1).to_string()) self.assertNotIn("BB", cs.related_to(aa2).to_string()) self.assertNotIn("BB", cs.related_to(aa1 == aa2).to_string()) self.assertNotIn("BB", cs.related_to(aa1 == False).to_string()) # No AA variables related to BB self.assertNotIn("AA", cs.related_to(bb1).to_string()) self.assertNotIn("AA", cs.related_to(bb2).to_string()) self.assertNotIn("AA", cs.related_to(bb1 == bb2).to_string()) self.assertNotIn("AA", cs.related_to(bb1 == False).to_string()) # Nothing is related to tautologies? self.assertEqual("", cs.related_to(simplify(bb1 == bb1)).to_string()) # But if the tautollogy can not get simplified we have to ask the solver # and send in all the other stuff self.assertNotIn("AA", cs.related_to(bb1 == bb1).to_string())
def test_ITE(self): cs = ConstraintSet() a = cs.new_bool() b = cs.new_bool() c = cs.new_bool() cs.add(b == True) cs.add(c == False) cs.add(a == Operators.ITE(b == c, b, c)) self.assertTrue(solver.check(cs)) self.assertEqual(solver.get_value(cs, a), False)
def test_simplify_OR(self): cs = ConstraintSet() bf = BoolConstant(value=False) bt = BoolConstant(value=True) var = cs.new_bool() cs.add(simplify(Operators.OR(var, var)) == var) cs.add(simplify(Operators.OR(var, bt)) == bt) self.assertTrue(self.solver.check(cs))