Esempio n. 1
0
 def common_super_type_of_types_is_passed_type_that_is_super_type_of_all_other_types(self):
     first_type = types.structural_type("first", [
         types.attr("a", types.int_type),
         types.attr("b", types.str_type),
     ])
     second_type = types.structural_type("second", [
         types.attr("a", types.int_type),
     ])
     assert_equal(second_type, types.common_super_type([first_type, second_type]))
Esempio n. 2
0
 def rescursive_structural_types_do_not_cause_stack_overflow(self):
     recursive1 = types.structural_type("recursive1")
     recursive1.attrs.add("uh_oh", types.func([], recursive1))
     recursive2 = types.structural_type("recursive2")
     recursive2.attrs.add("uh_oh", types.func([], recursive2))
     
     assert not types.is_sub_type(
         recursive1,
         recursive2,
     )
Esempio n. 3
0
 def class_type_is_not_subtype_of_structural_type_if_it_is_missing_attrs(self):
     cls = types.class_type("Person")
     structural_type = types.structural_type("HasName", [
         types.attr("name", types.str_type),
     ])
     
     assert not types.is_sub_type(structural_type, cls)
     assert not types.is_sub_type(cls, structural_type)
Esempio n. 4
0
 def class_type_is_not_subtype_of_structural_type_if_attr_is_strict_supertype_of_attr_on_structural_type(self):
     cls = types.class_type("Person", [
         types.attr("name", types.object_type),
     ])
     structural_type = types.structural_type("HasName", [
         types.attr("name", types.str_type),
     ])
     
     assert not types.is_sub_type(structural_type, cls)
     assert not types.is_sub_type(cls, structural_type)
Esempio n. 5
0
 def class_type_is_subtype_of_structural_type_if_it_has_subset_of_attrs(self):
     # TODO: how to handle sub-typing of mutable attrs
     cls = types.class_type("Person", [
         types.attr("name", types.str_type),
         types.attr("number_of_hats", types.int_type),
     ])
     structural_type = types.structural_type("HasName", [
         types.attr("name", types.str_type),
     ])
     
     assert types.is_sub_type(structural_type, cls)
     assert not types.is_sub_type(cls, structural_type)
Esempio n. 6
0
def type_of_structural_type_is_as_definition():
    type_bindings = {
        "str": types.meta_type(types.str_type),
        "int": types.meta_type(types.int_type),
    }
    node = nodes.structural_type("Song", [
        ("description", nodes.ref("str")),
        ("length", nodes.ref("int")),
    ])
    
    context = update_context(node, type_bindings=type_bindings)
    declared_type = context.lookup_name("Song")
    
    assert types.is_meta_type(declared_type)
    expected_type = types.structural_type("Song", [
        types.attr("description", types.str_type),
        types.attr("length", types.int_type),
    ])
    assert types.is_equivalent_type(expected_type, declared_type.type)