Ejemplo n.º 1
0
        public void List2D()
        {
            var mb    = MessageBuilder.Create(128);
            var alloc = mb.Allocator;
            var ds    = new DynamicSerializerState(mb);
            int w     = 4;
            int h     = 5;

            ds.SetListOfPointers(w);
            for (int i = 0; i < w; i++)
            {
                var p = ds.BuildPointer(i);
                p.SetListOfValues(32, h);
                for (int j = 0; j < h; j++)
                {
                    p.ListWriteValue(j, i - j);
                }
            }

            DeserializerState d = ds;
            var matrix          = d.RequireList().Cast2D <int>();

            Assert.AreEqual(matrix.Count, w);
            for (int i = 0; i < w; i++)
            {
                var v = matrix[i];
                Assert.AreEqual(h, v.Count);
                for (int j = 0; j < h; j++)
                {
                    Assert.AreEqual(i - j, v[j]);
                }
            }
        }
Ejemplo n.º 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]);
                        }
                    }
                }
            }
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 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));
        }
Ejemplo n.º 5
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];
            });
        }
Ejemplo n.º 6
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]);
                    }
                }
            }
        }