def testNestedLogicalOr(self): gen = self.generator varsToAdd = [('bool', 'A'), ('bool', 'B'), ('bool', 'C')] gen.addVariables(varsToAdd) exprToAdd = "Or(v['A'], And(v['B'],v['C']))" expression = createExpression(gen.variables, exprToAdd) res = gen.findSolutions(expression) expected = [{ 'B': True, 'C': True }, { 'A': False, 'B': True, 'C': False }, { 'A': False, 'B': False, 'C': True }, { 'A': True, 'B': False, 'C': False }, { 'A': False, 'B': False, 'C': False }, { 'A': True, 'B': False, 'C': True }] self.assertEquals(len(res), 6) for exp in expected: self.assertTrue(exp in res)
def testLogicalNot(self): gen = self.generator varsToAdd = [('bool', 'A')] gen.addVariables(varsToAdd) exprToAdd = "Not(v['A'])" expression = createExpression(gen.variables, exprToAdd) res = gen.findSolutions(expression) expected = [{'A': True}, {'A': False}] self.assertEquals(len(res), 2) for exp in expected: self.assertTrue(exp in res)
def testComparators(self): gen = self.generator varsToAdd = [('int', 'u'), ('int', 'x'), ('int', 'y'), ('int', 'z')] gen.addVariables(varsToAdd) exprToAdd = "And(Or(v['u']==0, v['x']>5),Or(v['y']<6,v['z']==0))" expression = createExpression(gen.variables, exprToAdd) res = gen.findSolutions(expression) expected = [{ 'x': 6, 'y': 0 }, { 'x': 6, 'y': 6, 'z': 1 }, { 'u': 1, 'x': 0, 'y': 0 }, { 'u': 3, 'x': 7, 'y': 2 }, { 'u': 3, 'x': 8, 'y': 2, 'z': 4 }, { 'u': 3, 'x': 0, 'y': 2 }, { 'u': 3, 'x': 8, 'y': 2, 'z': 1 }, { 'u': 1, 'x': 0, 'y': 2 }] self.assertEquals(len(res), 8) for exp in expected: self.assertTrue(exp in res)
def convertExpressions(self, _expr): return [createExpression(self.variables, e) for e in _expr]