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]); } } }
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]); } } } } }
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); }
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 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]; }); }
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]); } } } }