private byte[] VerifyBytes <T>(T instance, byte[] expected) where T : struct { var structLayout = typeof(T).GetTypeInfo().StructLayoutAttribute; Assert.NotNull(structLayout); Assert.Equal(LayoutKind.Sequential, structLayout.Value); Assert.Equal(1, structLayout.Pack); var serialized = SdbData.Serialize(new[] { instance }); var str = string.Join(", ", serialized.Select(t => "0x" + t.ToString("X2"))); _output.WriteLine($"{{{str}}}"); Assert.Equal(expected.Length, Marshal.SizeOf <T>()); Assert.Equal(expected.Length, serialized.Length); Assert.Equal(expected, serialized); return(serialized); }
public void SerializeSdbData(Stream stream) { var head = new SdbDataHead( _fileFormat, ClassIdMap, SchemaTypes, Particles, ParticleIndexes, Attributes); head.Validate(); void ValidatePosition(int position) { if (position != stream.Position) { throw new InvalidDataException(); } } ValidatePosition(0); SdbData.Serialize(head, stream); ValidatePosition(head.ClassIds.Offset); SdbData.Serialize(ClassIdMap, stream); ValidatePosition(head.SchemaType.Offset); SdbData.Serialize(SchemaTypes, stream); ValidatePosition(head.Particles.Offset); SdbData.Serialize(Particles, stream); ValidatePosition(head.ParticleChildren.Offset); SdbData.Serialize(ParticleIndexes, stream); ValidatePosition(head.Attributes.Offset); SdbData.Serialize(Attributes, stream); }