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