public void Basic02(ByteOrder order, bool dynamicRead) { var rng = new Random(); using (var stream = new MemoryStream(new byte[500])) using (var reader = new EndianReader(stream, order)) using (var writer = new EndianWriter(stream, order)) { reader.DynamicReadEnabled = dynamicRead; var rand = new object[11]; rand[0] = (sbyte)rng.Next(sbyte.MinValue, sbyte.MaxValue); writer.Seek(0x70, SeekOrigin.Begin); writer.Write((sbyte)rand[0]); rand[1] = (short)rng.Next(short.MinValue, short.MaxValue); writer.Seek(0x40, SeekOrigin.Begin); writer.Write((short)rand[1]); rand[2] = (int)rng.Next(int.MinValue, int.MaxValue); writer.Seek(0x30, SeekOrigin.Begin); writer.Write((int)rand[2]); rand[3] = (long)rng.Next(int.MinValue, int.MaxValue); writer.Seek(0x10, SeekOrigin.Begin); writer.Write((long)rand[3]); rand[4] = (byte)rng.Next(byte.MinValue, byte.MaxValue); writer.Seek(0x90, SeekOrigin.Begin); writer.Write((byte)rand[4]); rand[5] = (ushort)rng.Next(ushort.MinValue, ushort.MaxValue); writer.Seek(0xA0, SeekOrigin.Begin); writer.Write((ushort)rand[5]); rand[6] = unchecked ((uint)rng.Next(int.MinValue, int.MaxValue)); writer.Seek(0x00, SeekOrigin.Begin); writer.Write((uint)rand[6]); rand[7] = (ulong)unchecked ((uint)rng.Next(int.MinValue, int.MaxValue)); writer.Seek(0x80, SeekOrigin.Begin); writer.Write((ulong)rand[7]); rand[8] = (float)rng.NextDouble(); writer.Seek(0x20, SeekOrigin.Begin); writer.Write((float)rand[8]); rand[9] = (double)rng.NextDouble(); writer.Seek(0x50, SeekOrigin.Begin); writer.Write((double)rand[9]); rand[10] = Guid.NewGuid(); writer.Seek(0x60, SeekOrigin.Begin); writer.Write((Guid)rand[10]); stream.Position = 0; var obj = reader.ReadObject <DataClass02>(); //the highest offset should always be read last //so if no size is specified the position should end //up at the highest offset + the size of the property Assert.AreEqual(0xA2, stream.Position); Assert.AreEqual(obj.Property1, rand[0]); Assert.AreEqual(obj.Property2, rand[1]); Assert.AreEqual(obj.Property3, rand[2]); Assert.AreEqual(obj.Property4, rand[3]); Assert.AreEqual(obj.Property5, rand[4]); Assert.AreEqual(obj.Property6, rand[5]); Assert.AreEqual(obj.Property7, rand[6]); Assert.AreEqual(obj.Property8, rand[7]); Assert.AreEqual(obj.Property9, rand[8]); Assert.AreEqual(obj.Property10, rand[9]); Assert.AreEqual(obj.Property11, rand[10]); } }
public void Basic03(ByteOrder order, bool dynamicRead) { var rng = new Random(); using (var stream = new MemoryStream(new byte[500])) using (var reader = new EndianReader(stream, order)) using (var writer = new EndianWriter(stream, order)) { reader.DynamicReadEnabled = dynamicRead; var rand = new object[11]; rand[0] = (sbyte)rng.Next(sbyte.MinValue, sbyte.MaxValue); writer.Seek(0x00, SeekOrigin.Begin); writer.Write((sbyte)rand[0]); rand[1] = (short)rng.Next(short.MinValue, short.MaxValue); writer.Seek(0x10, SeekOrigin.Begin); writer.Write((short)rand[1]); rand[2] = (int)rng.Next(int.MinValue, int.MaxValue); writer.Seek(0x20, SeekOrigin.Begin); writer.Write((int)rand[2]); rand[3] = (long)rng.Next(int.MinValue, int.MaxValue); writer.Seek(0x30, SeekOrigin.Begin); writer.Write((long)rand[3]); rand[4] = (byte)rng.Next(byte.MinValue, byte.MaxValue); writer.Seek(0x40, SeekOrigin.Begin); writer.Write((byte)rand[4]); rand[5] = (ushort)rng.Next(ushort.MinValue, ushort.MaxValue); writer.Seek(0x50, SeekOrigin.Begin); writer.Write((ushort)rand[5]); rand[6] = unchecked ((uint)rng.Next(int.MinValue, int.MaxValue)); writer.Seek(0x60, SeekOrigin.Begin); writer.Write((uint)rand[6]); rand[7] = (ulong)unchecked ((uint)rng.Next(int.MinValue, int.MaxValue)); writer.Seek(0x70, SeekOrigin.Begin); writer.Write((ulong)rand[7]); rand[8] = (float)rng.NextDouble(); writer.Seek(0x80, SeekOrigin.Begin); writer.Write((float)rand[8]); rand[9] = (double)rng.NextDouble(); writer.Seek(0x90, SeekOrigin.Begin); writer.Write((double)rand[9]); rand[10] = Guid.NewGuid(); writer.Seek(0xA0, SeekOrigin.Begin); writer.Write((Guid)rand[10]); stream.Position = 0; var obj = FactoryClass01.GetInstance(); reader.ReadObject(obj); Assert.AreEqual(0xFF, stream.Position); Assert.AreEqual(obj.Property1, rand[0]); Assert.AreEqual(obj.Property2, rand[1]); Assert.AreEqual(obj.Property3, rand[2]); Assert.AreEqual(obj.Property4, rand[3]); Assert.AreEqual(obj.Property5, rand[4]); Assert.AreEqual(obj.Property6, rand[5]); Assert.AreEqual(obj.Property7, rand[6]); Assert.AreEqual(obj.Property8, rand[7]); Assert.AreEqual(obj.Property9, rand[8]); Assert.AreEqual(obj.Property10, rand[9]); Assert.AreEqual(obj.Property11, rand[10]); } }