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); }
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); }
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); }
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()); }
public void UnsafeLayoutPaddingsRecursiveStruct() { UnsafeLayout.GetLayout <VeryVeryComplexStruct>(recursive: true); }
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()); }