예제 #1
0
 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]))
예제 #2
0
    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)]))
         ])
     )