def callee_can_be_overloaded_func_type_where_choice_is_unambiguous_given_args(): type_bindings = {"f": types.overloaded_func( types.func([types.str_type], types.int_type), types.func([types.int_type], types.str_type), )} node = nodes.call(nodes.ref("f"), [nodes.str_literal("")]) assert_equal(types.int_type, infer(node, type_bindings=type_bindings))
def return_type_is_common_super_type_of_possible_return_types_of_overloaded_function(): type_bindings = {"f": types.overloaded_func( types.func([types.object_type], types.int_type), types.func([types.str_type], types.str_type), )} node = nodes.call(nodes.ref("f"), [nodes.str_literal("")]) assert_equal( types.common_super_type([types.int_type, types.str_type]), infer(node, type_bindings=type_bindings) )
def error_in_inferring_actual_argument_to_overloaded_function_is_not_failure_to_find_matching_overload(): type_bindings = {"f": types.overloaded_func( types.func([types.object_type], types.any_type), types.func([types.str_type], types.any_type), )} ref = nodes.ref("x") try: infer(nodes.call(nodes.ref("f"), [ref]), type_bindings=type_bindings) assert False, "Expected error" except errors.TypeCheckError as error: assert_equal(ref, error.node)