public void Parse_NonNullable(Type type, bool enableMarshal, bool expectMarshal) { byte[] data = { 4, 0, 0, 0, 232, 255, 255, 255, 1, 0, 2, 0, 3, 0, 0, 0, 4, 0, 0, 0,0, 0, 0, 0, 5, 0, 0, 0, 6, 0, 24, 0, 4, 0, }; Type tableType = typeof(SimpleTableNonNullable <>).MakeGenericType(type); var fbs = new FlatBufferSerializer(new FlatBufferSerializerOptions { EnableValueStructMemoryMarshalDeserialization = enableMarshal }); ISerializer serializer = fbs.Compile(tableType); ISimpleTable table = (ISimpleTable)serializer.Parse(data); Assert.Equal( expectMarshal, serializer.CSharp.Contains($"MemoryMarshal.Cast<byte, {type.GetGlobalCompilableTypeName()}>")); Assert.Equal(1, table.Item.IA); Assert.Equal(2, table.Item.IB); Assert.Equal(3, table.Item.IC); Assert.Equal(4, table.Item.ID); Assert.Equal(5, table.Item.IInner.Test); }
public void Serialize_NonNullable(Type type, bool enableMarshal, bool expectMarshal) { Type tableType = typeof(SimpleTableNonNullable <>).MakeGenericType(type); ISimpleTable simpleTable = (ISimpleTable)Activator.CreateInstance(tableType); IValidStruct s = (IValidStruct)Activator.CreateInstance(type); s.IA = 1; s.IB = 2; s.IC = 3; s.ID = 4; s.IInner = new ValidStruct_Inner { Test = 5 }; simpleTable.Item = s; var fbs = new FlatBufferSerializer(new FlatBufferSerializerOptions { EnableValueStructMemoryMarshalDeserialization = enableMarshal }); ISerializer serializer = fbs.Compile(simpleTable); byte[] data = new byte[1024]; int bytesWritten = serializer.Write(data, simpleTable); byte[] expectedData = { 4, 0, 0, 0, 232, 255, 255, 255, 1, 0, 2, 0, 3, 0, 0, 0, 4, 0, 0, 0,0, 0, 0, 0, 5, 0, 0, 0, 6, 0, 24, 0, 4, 0, }; Assert.Equal(expectedData.Length, bytesWritten); Assert.True(expectedData.AsSpan().SequenceEqual(data.AsSpan().Slice(0, bytesWritten))); Assert.Equal( expectMarshal, serializer.CSharp.Contains($"MemoryMarshal.Cast<byte, {type.GetGlobalCompilableTypeName()}>")); }