예제 #1
0
        public void HasFactoryThatProvidesStreamOfUniqueTypeVariables()
        {
            var x = TypeVariable.CreateGeneric();
            var y = TypeVariable.CreateGeneric();

            var xName = ulong.Parse(x.Name);

            x.ShouldEqual(new TypeVariable(xName));
            y.ShouldEqual(new TypeVariable(xName + 1));
            TypeVariable.CreateGeneric().ShouldEqual(new TypeVariable(xName + 2));
            TypeVariable.CreateNonGeneric().ShouldEqual(new TypeVariable(xName + 3, false));
            TypeVariable.CreateGeneric().ShouldEqual(new TypeVariable(xName + 4));
        }
예제 #2
0
        public void CanFreshenGenericTypeVariables()
        {
            using (TypeVariable.TestFactory())
            {
                //Prevent type '1' from being freshened by marking it as non-generic:
                var typeVariable0 = TypeVariable.CreateGeneric();
                var typeVariable1 = TypeVariable.CreateNonGeneric();

                var expectedTypeAfterLookup = new NamedType("A", new TypeVariable(2), typeVariable1, new NamedType("B", new TypeVariable(2), typeVariable1));
                var definedType             = new NamedType("A", typeVariable0, typeVariable1, new NamedType("B", typeVariable0, typeVariable1));

                definedType.FreshenGenericTypeVariables().ShouldEqual(expectedTypeAfterLookup);
            }
        }
예제 #3
0
        public void HasFactoryThatCanBeTemporarilyReplacedForTestingPursposes()
        {
            using (TypeVariable.TestFactory())
            {
                var x = TypeVariable.CreateGeneric();
                var y = TypeVariable.CreateGeneric();

                x.ShouldEqual(new TypeVariable(0));
                y.ShouldEqual(new TypeVariable(1));
                TypeVariable.CreateGeneric().ShouldEqual(new TypeVariable(2));
                TypeVariable.CreateNonGeneric().ShouldEqual(new TypeVariable(3, false));
                TypeVariable.CreateGeneric().ShouldEqual(new TypeVariable(4));
            }
        }
예제 #4
0
 public void CanNeverBeAGenericTypeDefinition()
 {
     TypeVariable.CreateGeneric().IsGenericTypeDefinition.ShouldBeFalse();
     TypeVariable.CreateNonGeneric().IsGenericTypeDefinition.ShouldBeFalse();
 }
예제 #5
0
 public void CanBeEitherGenericOrNonGeneric()
 {
     TypeVariable.CreateGeneric().IsGeneric.ShouldBeTrue();
     TypeVariable.CreateNonGeneric().IsGeneric.ShouldBeFalse();
 }