def test_type_match_auto_intersect(self): C1 = MockTemplate('C1', fields=('a', )) Foo = MockTemplate('Foo') P = MockPredicate('P') Q = MockPredicate('Q') R = MockPredicate('R') S = MockPredicate('S') T = meta.TypeMatch([P, Q, R, S]) input_signature = dict(input1=C1[Foo] % T) output_signature = dict(output1=Foo % T) pqrs = dict(input1=C1[Foo] % (P & Q & R & S)) p = dict(input1=C1[Foo] % P) pr = dict(input1=C1[Foo] % (P & R)) qs = dict(input1=C1[Foo] % (Q & S)) self.assertEqual(meta.match(pqrs, input_signature, output_signature), dict(output1=Foo % (P & Q & R & S))) self.assertEqual(meta.match(p, input_signature, output_signature), dict(output1=Foo % P)) self.assertEqual(meta.match(pr, input_signature, output_signature), dict(output1=Foo % (P & R))) self.assertEqual(meta.match(qs, input_signature, output_signature), dict(output1=Foo % (Q & S)))
def test_missing_branch_provided(self): P = MockPredicate('P') Q = MockPredicate('Q') T = meta.TypeMatch([P, Q]) self.assertEqual(T.members, (P & Q, P, Q))
def test_variable(self): P = MockPredicate('P') Q = MockPredicate('Q') R = MockPredicate('R') # This strange list is for branch coverage mostly T = meta.TypeMatch([P & Q, P, Q, R]) self.assertTrue(T.input) self.assertTrue(T.output) self.assertEqual(T.index, 1) # it really is supposed to be 1
def test_type_match(self): Foo = MockTemplate('Foo') Bar = MockTemplate('Bar') Baz = MockTemplate('Baz') P = MockPredicate('P') T = meta.TypeMatch([Baz, Foo, Bar]) input_signature = dict(input1=T) output_signature = dict(output1=T) foop = dict(input1=Foo % P) barp = dict(input1=Bar % P) foo = dict(input1=Foo) bar = dict(input1=Bar) self.assertEqual(meta.match(foop, input_signature, output_signature), dict(output1=Foo)) self.assertEqual(meta.match(barp, input_signature, output_signature), dict(output1=Bar)) self.assertEqual(meta.match(foo, input_signature, output_signature), dict(output1=Foo)) self.assertEqual(meta.match(bar, input_signature, output_signature), dict(output1=Bar))