Beispiel #1
0
 def invariant_type_parameter_can_be_unified_when_part_of_recursive_structural_type(self):
     invariant_type_param = types.invariant("T")
     recursive = types.generic_structural_type("recursive", [types.covariant("T")], lambda T: [
         types.attr("__iter__", types.func([], recursive(T))),
     ])
     
     assert types.is_sub_type(
         recursive(invariant_type_param),
         recursive(types.int_type),
         unify=[invariant_type_param]
     )
Beispiel #2
0
 def invariant_type_parameter_cannot_have_different_values_in_same_is_sub_type_relation(self):
     invariant_type_param = types.invariant("T")
     first_class_type = types.class_type("User")
     second_class_type = types.class_type("Role")
     generic_class = types.generic_class("Pair", [invariant_type_param, invariant_type_param])
     assert not types.is_sub_type(
         # TODO: need a reliable way of getting the underlying type (but as an instantiated type)
         generic_class(invariant_type_param, invariant_type_param),
         generic_class(first_class_type, second_class_type),
         unify=[invariant_type_param]
     )
Beispiel #3
0
 def instantiated_class_is_not_sub_type_of_other_instantiated_class_if_formal_param_is_invariant_and_type_params_are_different(self):
     generic_class = types.generic_class("iterator", [types.invariant("T")])
     
     assert not types.is_sub_type(generic_class(types.object_type), generic_class(types.int_type))
     assert not types.is_sub_type(generic_class(types.int_type), generic_class(types.object_type))
Beispiel #4
0
from nose.tools import istest, assert_equal, assert_not_equal

from nope import types


_formal_param = types.invariant("T")
_class_type = types.class_type("User")
int_type = types.int_type
str_type = types.str_type
none_type = types.none_type


@istest
class TypeEqualityTests(object):
    @istest
    def class_type_is_equal_to_itself(self):
        class_type = types.class_type("Blah")
        assert_equal(class_type, class_type)
        
    @istest
    def class_type_is_not_equal_to_another_class_type_with_same_attributes(self):
        assert_not_equal(types.class_type("Blah"), types.class_type("Blah"))
        
    @istest
    def instantiated_type_is_not_equal_to_class_type(self):
        class_type = types.class_type("List")
        generic_type = types.generic_class("List", "T")
        instantiated_type = generic_type.instantiate([class_type])
        assert_not_equal(class_type, instantiated_type)
        
    @istest