def testReferenceType(self): class MockSubtypeOf2(default_types.Generic): def is_subtype_of(self, other): return other._object == 2 def most_specific_common_supertype(self, types): return self if all(self._object == other._object for other in types) else MockSubtypeOf2(2) original = default_types.Reference(MockSubtypeOf2(3), 1) clone = default_types.Reference(MockSubtypeOf2(3), 1) different_id = default_types.Reference(MockSubtypeOf2(3), 2) supertype = default_types.Reference(MockSubtypeOf2(2), 1) self.assertEqual(original, clone) self.assertFalse(original.is_subtype_of(different_id)) self.assertTrue(original.is_subtype_of(supertype)) self.assertFalse(supertype.is_subtype_of(original)) self.assertEqual(supertype.most_specific_common_supertype([]), supertype) self.assertEqual(original.most_specific_common_supertype([clone]), original) self.assertIsNone( original.most_specific_common_supertype([different_id]))
def testReferenceSubtype(self): original = default_types.Reference(Mock2AsTopType(3), 1) clone = default_types.Reference(Mock2AsTopType(3), 1) different_id = default_types.Reference(Mock2AsTopType(3), 2) supertype = default_types.Reference(Mock2AsTopType(2), 1) different_type = default_types.Literal(1) self.assertEqual(original, clone) self.assertFalse(original.is_subtype_of(different_id)) self.assertTrue(original.is_subtype_of(supertype)) self.assertFalse(supertype.is_subtype_of(original)) self.assertFalse(original.is_subtype_of(different_type))
def testReferenceType(self): class MockSubtypeOf2(default_types.Generic): def is_subtype_of(self, other): return other._object == 2 original = default_types.Reference(MockSubtypeOf2(3), 1) clone = default_types.Reference(MockSubtypeOf2(3), 1) different_id = default_types.Reference(MockSubtypeOf2(3), 2) supertype = default_types.Reference(MockSubtypeOf2(2), 1) self.assertEqual(original, clone) self.assertFalse(original.is_subtype_of(different_id)) self.assertTrue(original.is_subtype_of(supertype)) self.assertFalse(supertype.is_subtype_of(original))
def testReferenceSupertype(self): original = default_types.Reference(Mock2AsTopType(3), 1) clone = default_types.Reference(Mock2AsTopType(3), 1) different_id = default_types.Reference(Mock2AsTopType(3), 2) supertype = default_types.Reference(Mock2AsTopType(2), 1) different_type = default_types.Literal(1) self.assertEqual(supertype.most_specific_common_supertype([]), supertype) self.assertEqual(original.most_specific_common_supertype([clone]), original) self.assertIsNone( original.most_specific_common_supertype([different_id])) self.assertIsNone( original.most_specific_common_supertype([different_type]))
def make_reference_type(self, base_type: trace.TraceType, local_id: Hashable) -> trace.TraceType: if local_id not in self._global_to_local_id: self._global_to_local_id[local_id] = len(self._global_to_local_id) return default_types.Reference(base_type, self._global_to_local_id[local_id])
def testReferenceSupertype(self): class Mock2AsTopType(default_types.Generic): def most_specific_common_supertype(self, types): if not all( isinstance(other, Mock2AsTopType) for other in types): return None return self if all(self._object == other._object for other in types) else Mock2AsTopType(2) original = default_types.Reference(Mock2AsTopType(3), 1) clone = default_types.Reference(Mock2AsTopType(3), 1) different_id = default_types.Reference(Mock2AsTopType(3), 2) supertype = default_types.Reference(Mock2AsTopType(2), 1) different_type = default_types.Generic(1) self.assertEqual(supertype.most_specific_common_supertype([]), supertype) self.assertEqual(original.most_specific_common_supertype([clone]), original) self.assertIsNone( original.most_specific_common_supertype([different_id])) self.assertIsNone( original.most_specific_common_supertype([different_type]))
def testReferencetSerialization(self): ref_original = default_types.Reference(default_types.Literal(3), 1) self.assertEqual( serialization.deserialize(serialization.serialize(ref_original)), ref_original)