public void ListOfBytes()
        {
            var mb    = MessageBuilder.Create(1);
            var alloc = mb.Allocator;
            var ds    = new DynamicSerializerState(mb);
            int count = 277;

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

            DeserializerState d = ds;

            Assert.AreEqual(count, d.ListElementCount);
            var bytes = d.RequireList().CastByte();

            for (int i = 0; i < count; i++)
            {
                Assert.AreEqual((byte)i, bytes[i]);
            }

            Assert.ThrowsException <IndexOutOfRangeException>(() =>
            {
                var dummy = bytes[-1];
            });
            Assert.ThrowsException <IndexOutOfRangeException>(() =>
            {
                var dummy = bytes[count];
            });
        }
예제 #2
0
        public void List4D()
        {
            var mb    = MessageBuilder.Create(128);
            var alloc = mb.Allocator;
            var ds    = new DynamicSerializerState(mb);
            int d0    = 3;
            int d1    = 2;
            int d2    = 4;
            int d3    = 5;

            ds.SetListOfPointers(d0);
            for (int i = 0; i < d0; i++)
            {
                var p = ds.BuildPointer(i);
                p.SetListOfPointers(d1);
                for (int j = 0; j < d1; j++)
                {
                    var q = p.BuildPointer(j);
                    q.SetListOfPointers(d2);
                    for (int k = 0; k < d2; k++)
                    {
                        var r = q.BuildPointer(k);
                        r.SetListOfValues(32, d3);
                        for (int l = 0; l < d3; l++)
                        {
                            r.ListWriteValue(l, (float)(i * j + k * l));
                        }
                    }
                }
            }

            DeserializerState d = ds;

            var hqube = (IReadOnlyList <object>)d.RequireList().CastND <float>(4);

            Assert.AreEqual(hqube.Count, d0);
            for (int i = 0; i < d0; i++)
            {
                var qube = (IReadOnlyList <object>)hqube[i];
                Assert.AreEqual(d1, qube.Count);
                for (int j = 0; j < d1; j++)
                {
                    var matrix = (IReadOnlyList <object>)qube[j];
                    Assert.AreEqual(d2, matrix.Count);
                    for (int k = 0; k < d2; k++)
                    {
                        var vector = (IReadOnlyList <float>)matrix[k];
                        Assert.AreEqual(d3, vector.Count);
                        for (int l = 0; l < d3; l++)
                        {
                            Assert.AreEqual((float)(i * j + k * l), vector[l]);
                        }
                    }
                }
            }
        }
예제 #3
0
        public void LinearListWrongUse()
        {
            var b   = MessageBuilder.Create();
            var dss = b.CreateObject <DynamicSerializerState>();

            dss.SetObject(new int[] { 1, 2, 3 });
            DeserializerState d = dss;
            var ld = d.RequireList();

            Assert.ThrowsException <NotSupportedException>(() => ld.CastList());
            Assert.ThrowsException <NotSupportedException>(() => ld.CastCapList <ITestInterface>());
        }
예제 #4
0
        public void ListOfStructsAsListOfSBytes()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfStructs(2, 1, 0);
            ds.ListBuildStruct(1).WriteData(0, sbyte.MinValue);

            DeserializerState d = ds;
            var asListOfSBytes  = d.RequireList().CastSByte();

            Assert.AreEqual(2, asListOfSBytes.Count);
            Assert.AreEqual((sbyte)0, asListOfSBytes[0]);
            Assert.AreEqual(sbyte.MinValue, asListOfSBytes[1]);
        }
예제 #5
0
        public void ListOfEnums()
        {
            var expected = new TestEnum[] { TestEnum.bar, TestEnum.baz, TestEnum.corge };

            var b   = MessageBuilder.Create();
            var dss = b.CreateObject <DynamicSerializerState>();

            dss.SetObject(expected);
            DeserializerState d = dss;
            var ld     = d.RequireList();
            var result = ld.CastEnums(_ => (TestEnum)_);

            CollectionAssert.AreEqual(expected, result.ToArray());
        }
        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));
        }
예제 #7
0
        public void ListOfStructsAsListOfULongs()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfStructs(2, 1, 0);
            ds.ListBuildStruct(1).WriteData(0, ulong.MaxValue);

            DeserializerState d = ds;
            var asListOfULongs  = d.RequireList().CastULong();

            Assert.AreEqual(2, asListOfULongs.Count);
            Assert.AreEqual(0ul, asListOfULongs[0]);
            Assert.AreEqual(ulong.MaxValue, asListOfULongs[1]);
        }
예제 #8
0
        public void NestedLists2DVoid()
        {
            var b = MessageBuilder.Create();
            var s = b.CreateObject <ListOfPointersSerializer <ListOfEmptySerializer> >();

            s.Init(3);
            s[0].Init(4);
            s[1].Init(5);
            s[2].Init(6);
            DeserializerState d = s;
            var voids           = d.RequireList().CastVoid2D();

            CollectionAssert.AreEqual(new int[] { 4, 5, 6 }, voids.ToArray());
        }
예제 #9
0
        public void ListOfStructsAsListOfDoubles()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfStructs(2, 1, 0);
            ds.ListBuildStruct(0).WriteData(0, double.NegativeInfinity);
            ds.ListBuildStruct(1).WriteData(0, double.MaxValue);

            DeserializerState d = ds;
            var asListOfDoubles = d.RequireList().CastDouble();

            Assert.AreEqual(2, asListOfDoubles.Count);
            Assert.AreEqual(double.NegativeInfinity, asListOfDoubles[0]);
            Assert.AreEqual(double.MaxValue, asListOfDoubles[1]);
        }
예제 #10
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));
        }
예제 #11
0
        public void ListOfStructsAsListOfFloats()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfStructs(2, 1, 0);
            ds.ListBuildStruct(0).WriteData(0, float.NaN);
            ds.ListBuildStruct(1).WriteData(0, float.PositiveInfinity);

            DeserializerState d = ds;
            var asListOfFloats  = d.RequireList().CastFloat();

            Assert.AreEqual(2, asListOfFloats.Count);
            Assert.AreEqual(float.NaN, asListOfFloats[0]);
            Assert.AreEqual(float.PositiveInfinity, asListOfFloats[1]);
        }
예제 #12
0
        public void ListOfStructsAsListOfBytes()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfStructs(3, 1, 0);
            ds.ListBuildStruct(1).WriteData(0, (byte)0x11);
            ds.ListBuildStruct(2).WriteData(0, (byte)0x22);

            DeserializerState d = ds;
            var asListOfBytes   = d.RequireList().CastByte();

            Assert.AreEqual(3, asListOfBytes.Count);
            Assert.AreEqual(0, asListOfBytes[0]);
            Assert.AreEqual((byte)0x11, asListOfBytes[1]);
            Assert.AreEqual((byte)0x22, asListOfBytes[2]);
        }
예제 #13
0
        public void ListOfStructsAsListOfBools()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfStructs(3, 1, 0);
            ds.ListBuildStruct(1).WriteData(0, false);
            ds.ListBuildStruct(2).WriteData(0, true);

            DeserializerState d = ds;
            var asListOfBools   = d.RequireList().CastBool();

            Assert.AreEqual(3, asListOfBools.Count);
            Assert.AreEqual(false, asListOfBools[0]);
            Assert.AreEqual(false, asListOfBools[1]);
            Assert.AreEqual(true, asListOfBools[2]);
        }
예제 #14
0
        public void NestedListsNDStruct()
        {
            var expected = new List <List <List <SomeStruct.WRITER> > >();

            var b   = MessageBuilder.Create();
            var dss = b.CreateObject <DynamicSerializerState>();

            for (int i = 0; i < 3; i++)
            {
                expected.Add(new List <List <SomeStruct.WRITER> >());

                for (int j = 0; j <= i; j++)
                {
                    expected[i].Add(new List <SomeStruct.WRITER>());

                    for (int k = 0; k <= j; k++)
                    {
                        var x = b.CreateObject <SomeStruct.WRITER>();
                        x.SomeText = $"{i}, {j}, {k}";
                        expected[i][j].Add(x);
                    }
                }
            }

            dss.SetObject(expected);
            DeserializerState d = dss;
            var ld     = d.RequireList();
            var result = (IReadOnlyList <object>)ld.CastND <SomeStruct.READER>(3, _ => new SomeStruct.READER(_));

            Assert.AreEqual(3, result.Count);
            for (int i = 0; i < result.Count; i++)
            {
                var inner = (IReadOnlyList <object>)result[i];
                Assert.AreEqual(i + 1, inner.Count);

                for (int j = 0; j < inner.Count; j++)
                {
                    var inner2 = (IReadOnlyList <SomeStruct.READER>)inner[j];
                    Assert.AreEqual(j + 1, inner2.Count);

                    for (int k = 0; k < inner2.Count; k++)
                    {
                        Assert.AreEqual($"{i}, {j}, {k}", inner2[k].SomeText);
                    }
                }
            }
        }
예제 #15
0
        public void ListOfPointers()
        {
            var mb    = MessageBuilder.Create(1);
            var alloc = mb.Allocator;
            var ds    = new DynamicSerializerState(mb);
            int count = 77;

            ds.SetListOfPointers(count);
            var dse0 = ds.BuildPointer(0);

            dse0.SetStruct(1, 0);
            dse0.WriteData(0, 654);
            var dse1 = new DynamicSerializerState(mb);

            dse1.SetStruct(1, 0);
            dse1.WriteData(0, 555);
            ds.Link(1, dse1);
            ds.Link(2, dse1);
            var dse3 = ds.BuildPointer(3);

            dse3.SetListOfValues(32, 10);

            DeserializerState d = ds;

            Assert.AreEqual(ObjectKind.ListOfPointers, d.Kind);
            Assert.AreEqual(count, d.ListElementCount);
            var pointers = d.RequireList().Cast(_ => _);

            Assert.AreEqual(ObjectKind.Struct, pointers[0].Kind);
            Assert.AreEqual(654, pointers[0].ReadDataInt(0));
            Assert.AreEqual(ObjectKind.Struct, pointers[1].Kind);
            Assert.AreEqual(555, pointers[1].ReadDataInt(0));
            Assert.AreEqual(ObjectKind.Struct, pointers[2].Kind);
            Assert.AreEqual(555, pointers[2].ReadDataInt(0));
            Assert.AreEqual(ObjectKind.ListOfInts, pointers[3].Kind);
            Assert.AreEqual(10, pointers[3].ListElementCount);
            Assert.AreEqual(ObjectKind.Nil, pointers[4].Kind);
            Assert.ThrowsException <IndexOutOfRangeException>(() =>
            {
                var dummy = pointers[-1];
            });
            Assert.ThrowsException <IndexOutOfRangeException>(() =>
            {
                var dummy = pointers[count];
            });
        }
예제 #16
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());
        }
예제 #17
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));
        }
예제 #18
0
        public void ListOfStructs()
        {
            var mb    = MessageBuilder.Create(1);
            var alloc = mb.Allocator;
            var ds    = new DynamicSerializerState(mb);
            int count = 23;

            ds.SetListOfStructs(count, 2, 1);
            var dse0 = ds.ListBuildStruct(0);

            dse0.WriteData(0, 1);
            dse0.WriteData(64, 2);
            var dse1 = ds.ListBuildStruct(1);

            dse1.WriteData(0, 3);
            dse1.WriteData(64, 4);
            Assert.ThrowsException <InvalidOperationException>(
                () => ds.Link(2, ds));
            Assert.ThrowsException <InvalidOperationException>(
                () => ds.BuildPointer(2));

            DeserializerState d = ds;

            Assert.AreEqual(ObjectKind.ListOfStructs, d.Kind);
            Assert.AreEqual(count, d.ListElementCount);
            var pointers = d.RequireList().Cast(_ => _);

            Assert.AreEqual(ObjectKind.Struct, pointers[0].Kind);
            Assert.AreEqual(1, pointers[0].ReadDataInt(0));
            Assert.AreEqual(2, pointers[0].ReadDataInt(64));
            Assert.AreEqual(ObjectKind.Struct, pointers[1].Kind);
            Assert.AreEqual(3, pointers[1].ReadDataInt(0));
            Assert.AreEqual(4, pointers[1].ReadDataInt(64));
            Assert.AreEqual(ObjectKind.Struct, pointers[2].Kind);
            Assert.AreEqual(0, pointers[2].ReadDataInt(0));
            Assert.AreEqual(0, pointers[2].ReadDataInt(64));
            Assert.ThrowsException <IndexOutOfRangeException>(() =>
            {
                var dummy = pointers[-1];
            });
            Assert.ThrowsException <IndexOutOfRangeException>(() =>
            {
                var dummy = pointers[count];
            });
        }
예제 #19
0
        public void List3D()
        {
            var mb    = MessageBuilder.Create(128);
            var alloc = mb.Allocator;
            var ds    = new DynamicSerializerState(mb);
            int d0    = 3;
            int d1    = 2;
            int d2    = 4;

            ds.SetListOfPointers(d0);
            for (int i = 0; i < d0; i++)
            {
                var p = ds.BuildPointer(i);
                p.SetListOfPointers(d1);
                for (int j = 0; j < d1; j++)
                {
                    var q = p.BuildPointer(j);
                    q.SetListOfValues(32, d2);
                    for (int k = 0; k < d2; k++)
                    {
                        q.ListWriteValue(k, i ^ j ^ k);
                    }
                }
            }

            DeserializerState d = ds;
            var qube            = d.RequireList().Cast3D <int>();

            Assert.AreEqual(qube.Count, d0);
            for (int i = 0; i < d0; i++)
            {
                var matrix = qube[i];
                Assert.AreEqual(d1, matrix.Count);
                for (int j = 0; j < d1; j++)
                {
                    var vector = matrix[j];
                    for (int k = 0; k < d2; k++)
                    {
                        Assert.AreEqual(i ^ j ^ k, vector[k]);
                    }
                }
            }
        }
예제 #20
0
        public void NestedLists2DEnum()
        {
            var expected = new TestEnum[][]
            {
                new TestEnum[] { TestEnum.bar, TestEnum.baz, TestEnum.corge },
                new TestEnum[] { TestEnum.corge, TestEnum.foo, TestEnum.garply }
            };

            var b   = MessageBuilder.Create();
            var dss = b.CreateObject <DynamicSerializerState>();

            dss.SetObject(expected);
            DeserializerState d = dss;
            var ld     = d.RequireList();
            var result = ld.CastEnums2D(_ => (TestEnum)_);

            Assert.AreEqual(expected.Length, result.Count);
            for (int i = 0; i < result.Count; i++)
            {
                CollectionAssert.AreEqual(expected[i], result[i].ToArray());
            }
        }
예제 #21
0
        public void NestedListsNDEnum()
        {
            var expected = new TestEnum[][][] {
                new TestEnum[][]
                {
                    new TestEnum[] { TestEnum.qux, TestEnum.quux, TestEnum.grault },
                    new TestEnum[] { TestEnum.garply, TestEnum.foo },
                    new TestEnum[] { TestEnum.corge }
                },
                new TestEnum[][]
                {
                    new TestEnum[] { TestEnum.baz, TestEnum.bar },
                    new TestEnum[0]
                },
                new TestEnum[0][]
            };

            var b   = MessageBuilder.Create();
            var dss = b.CreateObject <DynamicSerializerState>();

            dss.SetObject(expected);
            DeserializerState d = dss;
            var ld     = d.RequireList();
            var result = (IReadOnlyList <object>)ld.CastEnumsND(3, _ => (TestEnum)_);

            Assert.AreEqual(3, result.Count);
            for (int i = 0; i < result.Count; i++)
            {
                var inner = (IReadOnlyList <object>)result[i];
                Assert.AreEqual(expected[i].Length, inner.Count);

                for (int j = 0; j < expected[i].Length; j++)
                {
                    var inner2 = (IReadOnlyList <TestEnum>)inner[j];
                    CollectionAssert.AreEqual(expected[i][j], inner2.ToArray());
                }
            }
        }
예제 #22
0
        public void NestedListsND()
        {
            var expected = new int[][][] {
                new int[][]
                {
                    new int[] { 1, 2, 3 },
                    new int[] { 4, 5 },
                    new int[] { 6 }
                },
                new int[][]
                {
                    new int[] { 1, 2, 3 },
                    new int[0]
                },
                new int[0][]
            };

            var b   = MessageBuilder.Create();
            var dss = b.CreateObject <DynamicSerializerState>();

            dss.SetObject(expected);
            DeserializerState d = dss;
            var ld     = d.RequireList();
            var result = (IReadOnlyList <object>)ld.CastND <int>(3);

            Assert.AreEqual(3, result.Count);
            for (int i = 0; i < result.Count; i++)
            {
                var inner = (IReadOnlyList <object>)result[i];
                Assert.AreEqual(expected[i].Length, inner.Count);

                for (int j = 0; j < expected[i].Length; j++)
                {
                    var inner2 = (IReadOnlyList <int>)inner[j];
                    CollectionAssert.AreEqual(expected[i][j], inner2.ToArray());
                }
            }
        }
예제 #23
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));
        }