def testCompileIn(self): x = Argument(name="x") in_expr = predicates.compileIn(x, [1, 2, 3], True) not_in = predicates.compileIn(x, [1, 2, 3], False) self.failUnless(isinstance(not_in, Signature)) self.failUnless(isinstance(in_expr, Predicate)) self.assertEqual(in_expr, Predicate([Signature(x=Inequality("==", v)) for v in 1, 2, 3]))
def testParseMembership(self): parse = GenericFunction(lambda x, y, z: None).parse pe = lambda e: parse(e, locals(), globals()) self.assertEqual(pe("x in int"), Signature(x=int)) self.assertEqual(pe("x not in int"), Signature(x=NotCriterion(int))) self.assertEqual(pe("x in (1,2,3)"), predicates.compileIn(Argument(name="x"), [1, 2, 3], True)) self.assertEqual(pe("x not in (1,2,3)"), predicates.compileIn(Argument(name="x"), [1, 2, 3], False)) self.assertEqual( pe("x is y"), Signature([(Call(predicates.is_, Argument(name="x"), Argument(name="y")), TruthCriterion())]) ) self.assertEqual( pe("x is not y"), Signature([(Call(predicates.is_not, Argument(name="x"), Argument(name="y")), TruthCriterion())]), ) self.assertEqual(pe("x is TestCase"), Signature([(Argument(name="x"), ICriterion(Pointer(TestCase)))])) self.assertEqual(pe("x is not TestCase"), Signature([(Argument(name="x"), ~ICriterion(Pointer(TestCase)))])) # optimization when 'is None' and type tests occur on an expression self.assertEqual(pe("x is None"), Signature(x=types.NoneType)) self.assertEqual(pe("x is not None"), Signature(x=NotCriterion(types.NoneType))) self.assertEqual(pe("not (x is not None)"), Signature(x=types.NoneType)) self.assertEqual(pe("not (x is None)"), Signature(x=NotCriterion(types.NoneType)))
def testCompileIn(self): x = Argument(name='x') in_expr = predicates.compileIn(x,[1,2,3],True) not_in = predicates.compileIn(x,[1,2,3],False) self.failUnless(isinstance(not_in,Signature)) self.failUnless(isinstance(in_expr,Predicate)) self.assertEqual(in_expr, Predicate([Signature(x=Inequality('==',v)) for v in (1,2,3)]) ) self.assertEqual(not_in, Signature([ (x,reduce(operator.and_,[Inequality('<>',v) for v in (1,2,3)])) ]) )