Esempio n. 1
0
 def contravariant_type_parameter_is_substituted_with_common_sub_type_of_actual_type_params(self):
     contravariant_type_param = types.contravariant("T")
     first_class_type = types.class_type("User")
     second_class_type = types.class_type("Role")
     generic_class = types.generic_class("Pair", [contravariant_type_param, contravariant_type_param])
     
     type_map = types.is_sub_type(
         # TODO: need a reliable way of getting the underlying type (but as an instantiated type)
         generic_class(contravariant_type_param, contravariant_type_param),
         generic_class(first_class_type, second_class_type),
         unify=[contravariant_type_param]
     )
     assert_equal(types.bottom_type, type_map[contravariant_type_param])
Esempio n. 2
0
 def instantiated_class_is_sub_type_of_other_instantiated_class_if_formal_param_is_contravariant_and_type_params_are_supertypes(self):
     generic_class = types.generic_class("iterator", [types.contravariant("T")])
     
     assert not types.is_sub_type(generic_class(types.object_type), generic_class(types.int_type))
     assert types.is_sub_type(generic_class(types.int_type), generic_class(types.object_type))