示例#1
0
    def test_at_least_one(self):
        cardinality = cardnet.at_least(self.function.support, 1)
        sat = expr.And(self.function, *cardinality).to_cnf().satisfy_one()
        self.assertIsNotNone(sat)

        solution = {x: sat.get(x) for x in self.pos}
        self.assertEqual(solution, {x: 1 for x in self.pos})
示例#2
0
 def test_at_least_is_not_equivalent(self):
     at_least = expr.exprvar("at_least")
     cardinality = cardnet.at_least(self.function.support,
                                    len(self.pos),
                                    ~at_least)
     sat = expr.And(self.function, ~at_least, *cardinality).to_cnf().satisfy_one()
     self.assertIsNotNone(sat)
     self.assertEqual(sat.get(at_least), 0)
示例#3
0
 def test_at_least_higher(self):
     cardinality = cardnet.at_least(self.function.support,
                                    len(self.pos) + 1)
     sat = expr.And(self.function, *cardinality).to_cnf().satisfy_one()
     self.assertIsNone(sat)
示例#4
0
def at_least(inputs, p, equivalent=None):
    if p == 1: yield from at_least_one(inputs, equivalent)
    else: yield from cardnet.at_least(inputs, p, equivalent)