Example #1
0
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))
Example #2
0
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)
    )
Example #3
0
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)