예제 #1
0
        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);
        }
예제 #2
0
        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()}>"));
        }