Beispiel #1
0
        public void MASTER_STRUCTFieldsRecursive()
        {
            var structLayout = UnsafeLayout.GetLayout <MASTER_STRUCT>(recursive: true, new List <Type> {
                typeof(Guid)
            });

            Assert.AreEqual(7, structLayout.Count());
        }
        public void Vector2AsPrimitive()
        {
            TypeLayout.PrintLayout <Vector2>();
            var structLayout = UnsafeLayout.GetFieldsLayout <Vector2>(considerPrimitives: new HashSet <Type> {
                typeof(Vector2)
            });

            Assert.AreEqual(1, structLayout.Count());
        }
        public void GetFieldsLayoutByteEnumStruct()
        {
            var structLayout = UnsafeLayout.GetFieldsLayout <EnumStruct>();

            Assert.AreEqual(1, structLayout.Count());
            Assert.AreEqual(0, structLayout[0].Offset);
            Assert.AreEqual(1, structLayout[0].Size);
            Assert.AreEqual(typeof(ByteEnum), structLayout[0].FieldInfo.FieldType);
        }
        protected void AssertNonRecursiveWithPadding <T>() where T : struct
        {
            TypeLayout.PrintLayout <T>();
            var structLayout = UnsafeLayout.GetLayout <T>(recursive: false);
            var typeLayout   = TypeLayout.GetLayout <T>(includePaddings: true);

            CollectionAssert.AreEquivalent(typeLayout.Fields, structLayout);
            Assert.AreEqual(Unsafe.SizeOf <T>(), typeLayout.Size);
        }
        public void UnsafeStructRecursive()
        {
            TypeLayout.PrintLayout <WithNestedUnsafeStruct>();
            var structLayout = UnsafeLayout.GetLayout <WithNestedUnsafeStruct>();

            Assert.AreEqual(1, structLayout.Count());
            Assert.AreEqual(0, structLayout[0].Offset);
            Assert.AreEqual(33, structLayout[0].Size);
        }
        public void ComplexInsideAsPrimitive()
        {
            var structLayout = UnsafeLayout.GetFieldsLayout <CustomPrimitive>(considerPrimitives: new HashSet <Type> {
                typeof(Complex)
            });

            Assert.AreEqual(1, structLayout.Count());
            Assert.AreEqual(0, structLayout[0].Offset);
            Assert.AreEqual(16, structLayout[0].Size);
        }
Beispiel #7
0
        public void VeryVeryComplexStructFields()
        {
            var structLayout = UnsafeLayout.GetFieldsLayout <VeryVeryComplexStruct>(recursive: true);
            var six          = structLayout[5];

            Assert.AreEqual(16, six.Offset);
            Assert.AreEqual(8, six.Size);
            Assert.AreEqual(typeof(double), six.FieldInfo.FieldType);
            Assert.AreEqual(2, structLayout.Where(x => x.FieldInfo.FieldType == (typeof(double))).Count());
        }
        public void WithNullableIntStructRecursive()
        {
            TypeLayout.PrintLayout <WithNullableIntStruct>();
            var unsafeLayout = UnsafeLayout.GetFieldsLayout <WithNullableIntStruct>(recursive: true);

            Assert.AreEqual(2, unsafeLayout.Count());
            Assert.AreEqual(0, unsafeLayout[0].Offset);
            Assert.AreEqual(1, unsafeLayout[0].Size);
            Assert.AreEqual(4, unsafeLayout[1].Offset);
            Assert.AreEqual(4, unsafeLayout[1].Size);
        }
Beispiel #9
0
        public void ExplicitHolderOfSequentialIntObjectStructFields()
        {
            var layout = UnsafeLayout.GetFieldsLayout <ExplicitHolderOfSequentialIntObjectStruct>();

            Assert.AreEqual(2, layout.Count);
            Assert.AreEqual(0, layout[0].Offset);
            Assert.AreEqual(8, layout[0].Size);
            Assert.AreEqual(typeof(object), layout[0].FieldInfo.FieldType);
            Assert.AreEqual(8, layout[1].Offset);
            Assert.AreEqual(4, layout[1].Size);
            Assert.AreEqual(typeof(int), layout[1].FieldInfo.FieldType);
        }
        public void GetFieldsLayoutDoubleFloatStruct()
        {
            var structLayout = UnsafeLayout.GetFieldsLayout <DoubleFloatStruct>();

            Assert.AreEqual(2, structLayout.Count(), 2);
            Assert.AreEqual(0, structLayout[0].Offset, 0);
            Assert.AreEqual(8, structLayout[0].Size, 8);
            Assert.AreEqual(typeof(double), structLayout[0].FieldInfo.FieldType);
            Assert.AreEqual(8, structLayout[1].Offset);
            Assert.AreEqual(4, structLayout[1].Size);
            Assert.AreEqual(typeof(float), structLayout[1].FieldInfo.FieldType);
        }
        public void GenericGenericStructIntFields()
        {
            TypeLayout.PrintLayout <GenericStruct <GenericStruct <int> > >();
            var structLayout = UnsafeLayout.GetFieldsLayout <GenericStruct <GenericStruct <int> > >(recursive: true);

            Assert.AreEqual(3, structLayout.Count());
            Assert.AreEqual(0, structLayout[0].Offset);
            Assert.AreEqual(1, structLayout[0].Size);
            Assert.AreEqual(4, structLayout[1].Offset);
            Assert.AreEqual(1, structLayout[1].Size);
            Assert.AreEqual(8, structLayout[2].Offset);
            Assert.AreEqual(4, structLayout[2].Size);
        }
        public void WithNullableBoolBoolStructStructRecursive()
        {
            TypeLayout.PrintLayout <WithNullableBoolBoolStructStruct>();
            var unsafeLayout = UnsafeLayout.GetFieldsLayout <WithNullableBoolBoolStructStruct>(recursive: true);

            Assert.AreEqual(3, unsafeLayout.Count());
            Assert.AreEqual(0, unsafeLayout[0].Offset);
            Assert.AreEqual(1, unsafeLayout[0].Size);
            Assert.AreEqual(typeof(bool), unsafeLayout[0].FieldInfo.FieldType);
            Assert.AreEqual(1, unsafeLayout[1].Offset);
            Assert.AreEqual(1, unsafeLayout[1].Size);
            Assert.AreEqual(typeof(bool), unsafeLayout[1].FieldInfo.FieldType);
            Assert.AreEqual(2, unsafeLayout[2].Offset);
            Assert.AreEqual(1, unsafeLayout[2].Size);
            Assert.AreEqual(typeof(bool), unsafeLayout[2].FieldInfo.FieldType);
        }
Beispiel #13
0
        public void GetFieldsLayoutStructsWorkFineAndThisIsMostImportantForSerialization()
        {
            var structLayout = UnsafeLayout.GetFieldsLayout <ComplexStruct>();

            Assert.AreEqual(4, structLayout.Count());
            Assert.AreEqual(0, structLayout[0].Offset);
            Assert.AreEqual(8, structLayout[0].Size);
            Assert.AreEqual(typeof(double), structLayout[0].FieldInfo.FieldType);
            Assert.AreEqual(8, structLayout[1].Offset);
            Assert.AreEqual(4, structLayout[1].Size);
            Assert.AreEqual(typeof(Single), structLayout[1].FieldInfo.FieldType);
            Assert.AreEqual(16, structLayout[2].Offset);
            Assert.AreEqual(1, structLayout[2].Size);
            Assert.AreEqual(typeof(ByteEnum), structLayout[2].FieldInfo.FieldType);
            Assert.AreEqual(20, structLayout[3].Offset);
            Assert.AreEqual(4, structLayout[3].Size);
            Assert.AreEqual(typeof(int), structLayout[3].FieldInfo.FieldType);
        }
        public void GetFieldsLayoutByteRecursive()
        {
            var structLayout = UnsafeLayout.GetFieldsLayout <byte>();

            Assert.AreEqual(1, structLayout.Count());
        }
Beispiel #15
0
 public void UnsafeLayoutPaddingsRecursiveStruct()
 {
     UnsafeLayout.GetLayout <VeryVeryComplexStruct>(recursive: true);
 }
Beispiel #16
0
 public void UnsafeLayoutStruct()
 {
     UnsafeLayout.GetFieldsLayout <VeryVeryComplexStruct>(recursive: false);
 }
        public void GetFieldsLayoutZero()
        {
            var structLayout = UnsafeLayout.GetFieldsLayout <EmptyStruct>();

            Assert.AreEqual(0, structLayout.Count());
        }
        public void GetFieldsLayoutByteEnum()
        {
            var structLayout = UnsafeLayout.GetFieldsLayout <ByteEnum>();

            Assert.AreEqual(1, structLayout.Count());
        }