Beispiel #1
0
        public void ListOfBytesAsListOfStructs()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfValues(8, 10);
            ds.ListWriteValue(1, (byte)0x11);
            ds.ListWriteValue(2, (byte)0x22);
            ds.ListWriteValue(3, (byte)0x33);
            ds.ListWriteValue(4, (byte)0x44);
            ds.ListWriteValue(5, (byte)0x55);
            ds.ListWriteValue(6, (byte)0x66);
            ds.ListWriteValue(7, (byte)0x77);
            ds.ListWriteValue(8, (byte)0x88);
            ds.ListWriteValue(9, (byte)0x99);

            DeserializerState d = ds;
            var asListOfStructs = d.RequireList().Cast(_ => _);

            Assert.AreEqual(10, asListOfStructs.Count);
            Assert.AreEqual(ObjectKind.Value, asListOfStructs[0].Kind);
            Assert.AreEqual((byte)0x00, asListOfStructs[0].ReadDataByte(0));
            Assert.AreEqual((byte)0x11, asListOfStructs[1].ReadDataByte(0));
            Assert.AreEqual((byte)0x22, asListOfStructs[2].ReadDataByte(0));
            Assert.AreEqual((byte)0x33, asListOfStructs[3].ReadDataByte(0));
            Assert.AreEqual((byte)0x44, asListOfStructs[4].ReadDataByte(0));
            Assert.AreEqual((byte)0x55, asListOfStructs[5].ReadDataByte(0));
            Assert.AreEqual((byte)0x66, asListOfStructs[6].ReadDataByte(0));
            Assert.AreEqual((byte)0x77, asListOfStructs[7].ReadDataByte(0));
            Assert.AreEqual((byte)0x88, asListOfStructs[8].ReadDataByte(0));
            Assert.AreEqual((byte)0x99, asListOfStructs[9].ReadDataByte(0));
        }
Beispiel #2
0
        public void ListOfSBytesAsListOfStructs()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfValues(8, 10);
            ds.ListWriteValue(1, (sbyte)-1);
            ds.ListWriteValue(2, (sbyte)-2);
            ds.ListWriteValue(3, (sbyte)-3);
            ds.ListWriteValue(4, (sbyte)-4);
            ds.ListWriteValue(5, (sbyte)-5);
            ds.ListWriteValue(6, (sbyte)-6);
            ds.ListWriteValue(7, (sbyte)-7);
            ds.ListWriteValue(8, (sbyte)-8);
            ds.ListWriteValue(9, (sbyte)-9);

            DeserializerState d = ds;
            var asListOfStructs = d.RequireList().Cast(_ => _);

            Assert.AreEqual(10, asListOfStructs.Count);
            Assert.AreEqual(ObjectKind.Value, asListOfStructs[0].Kind);
            Assert.AreEqual((sbyte)0, asListOfStructs[0].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-1, asListOfStructs[1].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-2, asListOfStructs[2].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-3, asListOfStructs[3].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-4, asListOfStructs[4].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-5, asListOfStructs[5].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-6, asListOfStructs[6].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-7, asListOfStructs[7].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-8, asListOfStructs[8].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-9, asListOfStructs[9].ReadDataSByte(0));
        }
Beispiel #3
0
        public void ListOfULongs()
        {
            var mb    = MessageBuilder.Create(1);
            var alloc = mb.Allocator;
            var ds    = new DynamicSerializerState(mb);
            int count = 345;

            ds.SetListOfValues(64, count);
            for (int i = 0; i < count; i++)
            {
                ds.ListWriteValue(i, (ulong)i);
            }

            DeserializerState d = ds;

            Assert.AreEqual(count, d.ListElementCount);
            var ulongs = d.RequireList().CastULong();

            for (int i = 0; i < count; i++)
            {
                Assert.AreEqual((ulong)i, ulongs[i]);
            }
            Assert.ThrowsException <IndexOutOfRangeException>(() =>
            {
                var dummy = ulongs[-1];
            });
            Assert.ThrowsException <IndexOutOfRangeException>(() =>
            {
                var dummy = ulongs[count];
            });
        }
Beispiel #4
0
        public void Abuse()
        {
            var mb    = MessageBuilder.Create(1);
            var alloc = mb.Allocator;
            var ds    = new DynamicSerializerState(mb);

            Assert.ThrowsException <ArgumentOutOfRangeException>(() =>
                                                                 ds.SetListOfPointers(-1));
            Assert.ThrowsException <ArgumentOutOfRangeException>(() =>
                                                                 ds.SetListOfStructs(-10, 100, 200));
            Assert.ThrowsException <ArgumentOutOfRangeException>(() =>
                                                                 ds.SetListOfValues(2, 1));
            Assert.ThrowsException <ArgumentOutOfRangeException>(() =>
                                                                 ds.SetListOfValues(1, -1));
            Assert.ThrowsException <ArgumentOutOfRangeException>(() =>
                                                                 ds.SetListOfValues(65, 1));
        }
        public void ListOfULongsAsListOfStructs()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfValues(64, 2);
            ds.ListWriteValue(1, ulong.MaxValue);

            DeserializerState d = ds;
            var asListOfStructs = d.RequireList().Cast(_ => _);

            Assert.AreEqual(2, asListOfStructs.Count);
            Assert.AreEqual(0ul, asListOfStructs[0].ReadDataULong(0));
            Assert.AreEqual(ulong.MaxValue, asListOfStructs[1].ReadDataULong(0));
        }
Beispiel #6
0
        public void ListOfUIntsAsListOfStructs()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfValues(32, 2);
            ds.ListWriteValue(1, uint.MaxValue);

            DeserializerState d = ds;
            var asListOfStructs = d.RequireList().Cast(_ => _);

            Assert.AreEqual(2, asListOfStructs.Count);
            Assert.AreEqual(ObjectKind.Value, asListOfStructs[0].Kind);
            Assert.AreEqual(0u, asListOfStructs[0].ReadDataUInt(0));
            Assert.AreEqual(uint.MaxValue, asListOfStructs[1].ReadDataUInt(0));
        }
Beispiel #7
0
        public void ListOfEmpty()
        {
            var mb    = MessageBuilder.Create(1);
            var alloc = mb.Allocator;
            var ds    = new DynamicSerializerState(mb);

            ds.SetListOfValues(0, int.MaxValue);
            Assert.ThrowsException <InvalidOperationException>(
                () => ds.ListWriteValue(0, 1, 0));

            DeserializerState d = ds;

            Assert.AreEqual(ObjectKind.ListOfEmpty, d.Kind);
            Assert.AreEqual(int.MaxValue, d.ListElementCount);
        }
Beispiel #8
0
        public void Struct()
        {
            var mb    = MessageBuilder.Create(8);
            var ds    = new DynamicSerializerState(mb);
            var alloc = mb.Allocator;

            ds.SetStruct(3, 2);
            Assert.IsFalse(ds.IsAllocated);
            Assert.ThrowsException <InvalidOperationException>(() => ds.SetListOfPointers(1));
            Assert.ThrowsException <InvalidOperationException>(() => ds.SetListOfStructs(3, 2, 1));
            Assert.ThrowsException <InvalidOperationException>(() => ds.SetListOfValues(8, 3));
            Assert.ThrowsException <InvalidOperationException>(() => ds.SetStruct(2, 3));
            ds.SetStruct(3, 2);
            ds.Allocate();
            Assert.IsTrue(ds.IsAllocated);
            Assert.AreEqual(3, ds.StructDataSection.Length);
            ds.StructWriteData(0, 16, 0x4321);
            ds.StructWriteData(64, 32, 0x87654321);
            ds.StructWriteData(128, 64, 0x1234567812345678);
            Assert.ThrowsException <ArgumentOutOfRangeException>(() => ds.StructWriteData(191, 2, 1));

            var ds2 = ds.BuildPointer(0);

            ds2.SetStruct(1, 0);
            ds2.WriteData(0, 1.23);

            Assert.ThrowsException <ArgumentOutOfRangeException>(() => ds.Link(2, ds));

            Assert.AreEqual(1, alloc.Segments.Count);
            Assert.AreEqual(7, alloc.Segments[0].Length);

            DeserializerState d = ds;

            Assert.AreEqual(ObjectKind.Struct, d.Kind);
            Assert.AreEqual(3, d.StructDataCount);
            Assert.AreEqual(2, d.StructPtrCount);
            Assert.AreEqual(0x4321, d.ReadDataUShort(0));
            Assert.AreEqual(0x87654321, d.ReadDataUInt(64));
            Assert.IsTrue(0x1234567812345678 == d.ReadDataULong(128));
            var p0 = d.StructReadPointer(0);

            Assert.AreEqual(ObjectKind.Struct, p0.Kind);
            Assert.AreEqual(1.23, p0.ReadDataDouble(0));
            var p1 = d.StructReadPointer(1);

            Assert.AreEqual(ObjectKind.Nil, p1.Kind);
        }
Beispiel #9
0
        public void ListOfUShortsAsListOfStructs()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfValues(16, 3);
            ds.ListWriteValue(1, (ushort)0x1111);
            ds.ListWriteValue(2, (ushort)0x2222);

            DeserializerState d = ds;
            var asListOfStructs = d.RequireList().Cast(_ => _);

            Assert.AreEqual(3, asListOfStructs.Count);
            Assert.AreEqual(ObjectKind.Value, asListOfStructs[0].Kind);
            Assert.AreEqual((ushort)0x0000, asListOfStructs[0].ReadDataUShort(0));
            Assert.AreEqual((ushort)0x1111, asListOfStructs[1].ReadDataUShort(0));
            Assert.AreEqual((ushort)0x2222, asListOfStructs[2].ReadDataUShort(0));
        }
Beispiel #10
0
        public void ListOfULongsAsListOfStructs()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfValues(64, 2);
            ds.ListWriteValue(1, ulong.MaxValue);

            DeserializerState d = ds;
            var asListOfStructs = d.RequireList().Cast(_ => _);

            Assert.AreEqual(2, asListOfStructs.Count);
            Assert.AreEqual(0ul, asListOfStructs[0].ReadDataULong(0));
            Assert.AreEqual(ulong.MaxValue, asListOfStructs[1].ReadDataULong(0));
            Assert.ThrowsException <IndexOutOfRangeException>(() => asListOfStructs[-1].ReadDataUShort(0));
            Assert.ThrowsException <IndexOutOfRangeException>(() => asListOfStructs[3].ReadDataUShort(0));
            CollectionAssert.AreEqual(new ulong[] { 0, ulong.MaxValue }, asListOfStructs.Select(_ => _.ReadDataULong(0)).ToArray());
        }
Beispiel #11
0
        public void ListOfDoublesAsListOfStructs()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfValues(64, 6);
            ds.ListWriteValue(0, 1.0);
            ds.ListWriteValue(1, double.MinValue);
            ds.ListWriteValue(2, double.MaxValue);
            ds.ListWriteValue(3, double.NaN);
            ds.ListWriteValue(4, double.NegativeInfinity);
            ds.ListWriteValue(5, double.PositiveInfinity);

            DeserializerState d = ds;
            var asListOfStructs = d.RequireList().Cast(_ => _);

            Assert.AreEqual(6, asListOfStructs.Count);
            Assert.AreEqual(1.0, asListOfStructs[0].ReadDataDouble(0));
            Assert.AreEqual(double.MinValue, asListOfStructs[1].ReadDataDouble(0));
            Assert.AreEqual(double.MaxValue, asListOfStructs[2].ReadDataDouble(0));
            Assert.AreEqual(double.NaN, asListOfStructs[3].ReadDataDouble(0));
            Assert.AreEqual(double.NegativeInfinity, asListOfStructs[4].ReadDataDouble(0));
            Assert.AreEqual(double.PositiveInfinity, asListOfStructs[5].ReadDataDouble(0));
        }
Beispiel #12
0
        public void ListOfBits()
        {
            bool ValueGen(int index)
            {
                return((index % 3) == 0);
            }

            DynamicSerializerState CreateListBulk(int count)
            {
                var mb    = MessageBuilder.Create(8);
                var alloc = mb.Allocator;
                var ds    = new DynamicSerializerState(mb);

                ds.SetListOfValues(1, count);
                var list = new List <bool>();

                for (int i = 0; i < count; i++)
                {
                    list.Add(ValueGen(i));
                }
                ds.ListWriteValues(list);

                return(ds);
            }

            DynamicSerializerState CreateListSingle(int count)
            {
                var mb    = MessageBuilder.Create(8);
                var alloc = mb.Allocator;
                var ds    = new DynamicSerializerState(mb);

                ds.SetListOfValues(1, count);
                for (int i = 0; i < count; i++)
                {
                    ds.ListWriteValue(i, ValueGen(i));
                }

                return(ds);
            }

            void VerifyList(DeserializerState d, int count)
            {
                Assert.AreEqual(ObjectKind.ListOfBits, d.Kind);
                Assert.AreEqual(count, d.ListElementCount);
                var rlist = d.RequireList().CastBool();

                Assert.AreEqual(count, rlist.Count);
                for (int i = 0; i < count; i++)
                {
                    bool expected = ValueGen(i);
                    bool actual   = rlist[i];
                    Assert.AreEqual(expected, actual);
                }
                Assert.ThrowsException <IndexOutOfRangeException>(() =>
                {
                    var dummy = rlist[-1];
                });
                Assert.ThrowsException <IndexOutOfRangeException>(() =>
                {
                    var dummy = rlist[count];
                });
            }

            int c = 123;

            VerifyList(CreateListBulk(c), c);
            VerifyList(CreateListSingle(c), c);
        }