Exemplo n.º 1
0
 def test_subclass_specialization(self):
     os = OverloadSelector()
     self.assertTrue(issubclass(types.Sequence, types.Container))
     os.append(1, (types.Container, types.Container,))
     lstty = types.List(types.boolean)
     self.assertEqual(os.find((lstty, lstty)), 1)
     os.append(2, (types.Container, types.Sequence,))
     self.assertEqual(os.find((lstty, lstty)), 2)
 def test_subclass_specialization(self):
     os = OverloadSelector()
     self.assertTrue(issubclass(types.Sequence, types.Container))
     os.append(1, (types.Container, types.Container))
     lstty = types.List(types.boolean)
     self.assertEqual(os.find((lstty, lstty)), 1)
     os.append(2, (types.Container, types.Sequence))
     self.assertEqual(os.find((lstty, lstty)), 2)
Exemplo n.º 3
0
 def test_cache(self):
     os = OverloadSelector()
     self.assertEqual(len(os._cache), 0)
     os.append(1, (types.Any,))
     self.assertEqual(os.find((types.int32,)), 1)
     self.assertEqual(len(os._cache), 1)
     os.append(2, (types.Integer,))
     self.assertEqual(len(os._cache), 0)
     self.assertEqual(os.find((types.int32,)), 2)
     self.assertEqual(len(os._cache), 1)
 def test_cache(self):
     os = OverloadSelector()
     self.assertEqual(len(os._cache), 0)
     os.append(1, (types.Any,))
     self.assertEqual(os.find((types.int32,)), 1)
     self.assertEqual(len(os._cache), 1)
     os.append(2, (types.Integer,))
     self.assertEqual(len(os._cache), 0)
     self.assertEqual(os.find((types.int32,)), 2)
     self.assertEqual(len(os._cache), 1)
Exemplo n.º 5
0
 def test_ambiguous_detection(self):
     os = OverloadSelector()
     # unambiguous signatures
     os.append(1, (types.Any, types.Boolean))
     os.append(2, (types.Integer, types.Boolean))
     self.assertEqual(os.find((types.boolean, types.boolean)), 1)
     # not implemented
     with self.assertRaises(NotImplementedError) as raises:
         os.find((types.boolean, types.int32))
     # generic
     os.append(3, (types.Any, types.Any))
     self.assertEqual(os.find((types.boolean, types.int32)), 3)
     self.assertEqual(os.find((types.boolean, types.boolean)), 1)
     # add ambiguous signature; can match (bool, any) and (any, bool)
     os.append(4, (types.Boolean, types.Any))
     with self.assertRaises(TypeError) as raises:
         os.find((types.boolean, types.boolean))
     self.assertIn('2 ambiguous signatures', str(raises.exception))
     # disambiguous
     os.append(5, (types.boolean, types.boolean))
     self.assertEqual(os.find((types.boolean, types.boolean)), 5)
 def test_ambiguous_detection(self):
     os = OverloadSelector()
     # unambiguous signatures
     os.append(1, (types.Any, types.Boolean))
     os.append(2, (types.Integer, types.Boolean))
     self.assertEqual(os.find((types.boolean, types.boolean)), 1)
     # not implemented
     with self.assertRaises(NotImplementedError) as raises:
         os.find((types.boolean, types.int32))
     # generic
     os.append(3, (types.Any, types.Any))
     self.assertEqual(os.find((types.boolean, types.int32)), 3)
     self.assertEqual(os.find((types.boolean, types.boolean)), 1)
     # add ambiguous signature; can match (bool, any) and (any, bool)
     os.append(4, (types.Boolean, types.Any))
     with self.assertRaises(TypeError) as raises:
         os.find((types.boolean, types.boolean))
     self.assertIn("2 ambiguous signatures", str(raises.exception))
     # disambiguous
     os.append(5, (types.boolean, types.boolean))
     self.assertEqual(os.find((types.boolean, types.boolean)), 5)