def test_weakest_list_order(self): """Test weakest list order""" solver = Solver() a = Variable(1, 30) b = Variable(2, 10) c = Variable(3, 10) c_eq = EquationConstraint(lambda a, b, c: a + b + c, a=a, b=b, c=c) solver.add_constraint(c_eq) weakest = [el for el in c_eq._weakest] a.value = 4 self.assertEqual(c_eq._weakest, weakest) # does not change if non-weak variable changed b.value = 5 self.assertEqual(c_eq.weakest(), c) b.value = 6 self.assertEqual(c_eq.weakest(), c) # b changed above, now change a - all weakest variables changed # return the oldest changed variable then c.value = 6 self.assertEqual(c_eq.weakest(), b) b.value = 6 self.assertEqual(c_eq.weakest(), c)
def __init__(self): self.solver = Solver() self.a = Variable(1, 30) self.b = Variable(2, 10) self.c = Variable(3, 10) self.c_eq = EquationConstraint( lambda a, b, c: a + b + c, a=self.a, b=self.b, c=self.c ) self.solver.add_constraint(self.c_eq)
def test_strength_change(self): """Test strength change""" solver = Solver() a = Variable(1, 30) b = Variable(2, 10) c = Variable(3, 10) c_eq = EquationConstraint(lambda a, b, c: a + b + c, a=a, b=b, c=c) solver.add_constraint(c_eq) b.strength = 9 self.assertEqual(c_eq._weakest, [b])
def test_weakest_list_order(self): """Test weakest list order""" solver = Solver() a = Variable(1, 30) b = Variable(2, 10) c = Variable(3, 10) c_eq = EquationConstraint(lambda a, b, c: a + b + c, a=a, b=b, c=c) solver.add_constraint(c_eq) weakest = [el for el in c_eq._weakest] a.value = 4 self.assertEqual( c_eq._weakest, weakest) # does not change if non-weak variable changed b.value = 5 self.assertEqual(c_eq.weakest(), c) b.value = 6 self.assertEqual(c_eq.weakest(), c) # b changed above, now change a - all weakest variables changed # return the oldest changed variable then c.value = 6 self.assertEqual(c_eq.weakest(), b) b.value = 6 self.assertEqual(c_eq.weakest(), c)
def test_weakest_list(self): """Test weakest list""" solver = Solver() a = Variable(1, 30) b = Variable(2, 10) c = Variable(3, 10) c_eq = EquationConstraint(lambda a, b, c: a + b + c, a=a, b=b, c=c) solver.add_constraint(c_eq) # because of kwargs above we cannot test by the order of arguments self.assertTrue(b in c_eq._weakest) self.assertTrue(c in c_eq._weakest)
def test_weakest_list_order(): solver = Solver() a = Variable(1, 30) b = Variable(2, 10) c = Variable(3, 10) c_eq = EquationConstraint(lambda a, b, c: a + b + c, a=a, b=b, c=c) solver.add_constraint(c_eq) a.value = 4 b.value = 5 assert c_eq.weakest() == c b.value = 6 assert c_eq.weakest() == c # b changed above, now change a - all weakest variables changed return the # oldest changed variable c.value = 6 assert c_eq.weakest() == b b.value = 6 assert c_eq.weakest() == c