public void HandmadeSerializer_Serialize_2()
        {
            MyFirstClass[] array = new MyFirstClass[0];

            HandmadeSerializer serializer = new HandmadeSerializer();
            MemoryStream       stream     = new MemoryStream();

            using (BinaryWriter writer = new BinaryWriter(stream))
            {
                // ReSharper disable once CoVariantArrayConversion
                serializer.Serialize(writer, array);
            }
        }
        public void HandmadeSerializer_Array_2()
        {
            MyFirstClass[] sourceArray =
            {
                new MyFirstClass {
                    FirstField = 1
                },
                new MyFirstClass {
                    FirstField = 2
                },
                new MyFirstClass {
                    FirstField = 3
                },
                new MyFirstClass {
                    FirstField = 4
                },
            };

            HandmadeSerializer serializer = new HandmadeSerializer(PrefixLength.Short)
            {
                Namespace = "UnitTests.AM.Runtime",
                Assembly  = typeof(MyFirstClass).Assembly
            };
            MemoryStream stream = new MemoryStream();

            using (BinaryWriter writer = new BinaryWriter(stream))
            {
                // ReSharper disable once CoVariantArrayConversion
                serializer.Serialize(writer, sourceArray);
            }

            byte[] buffer = stream.ToArray();

            stream = new MemoryStream(buffer);
            using (BinaryReader reader = new BinaryReader(stream))
            {
                IHandmadeSerializable[] tempArray   = serializer.DeserializeArray(reader);
                MyFirstClass[]          targetArray = tempArray.Cast <MyFirstClass>().ToArray();
                Assert.AreEqual(sourceArray.Length, targetArray.Length);

                for (int i = 0; i < sourceArray.Length; i++)
                {
                    Assert.AreEqual
                    (
                        sourceArray[i].FirstField,
                        targetArray[i].FirstField
                    );
                }
            }
        }
        public void HandmadeSerializer_Serialize_1()
        {
            MyFirstClass first1 = new MyFirstClass
            {
                FirstField = 73
            };

            HandmadeSerializer serializer = new HandmadeSerializer((PrefixLength)44);
            MemoryStream       stream     = new MemoryStream();

            using (BinaryWriter writer = new BinaryWriter(stream))
            {
                serializer.Serialize(writer, first1);
            }
        }
        public void HandmadeSerializer_Roundtrip_2()
        {
            MyFirstClass first1 = new MyFirstClass
            {
                FirstField = 73
            };
            MySecondClass second1 = new MySecondClass
            {
                SecondField = "Hello"
            };
            MyThirdClass third1 = new MyThirdClass
            {
                ThirdField  = true,
                FourthField = 123.45
            };

            HandmadeSerializer serializer = new HandmadeSerializer(PrefixLength.Short)
            {
                Namespace = "UnitTests.AM.Runtime",
                Assembly  = typeof(MyFirstClass).Assembly
            };
            MemoryStream stream = new MemoryStream();

            using (BinaryWriter writer = new BinaryWriter(stream))
            {
                serializer.Serialize(writer, first1);
                serializer.Serialize(writer, second1);
                serializer.Serialize(writer, third1);
            }

            byte[] buffer = stream.ToArray();

            stream = new MemoryStream(buffer);
            using (BinaryReader reader = new BinaryReader(stream))
            {
                MyFirstClass first2 = (MyFirstClass)serializer.Deserialize(reader);
                Assert.AreEqual(first1.FirstField, first2.FirstField);

                MySecondClass second2 = (MySecondClass)serializer.Deserialize(reader);
                Assert.AreEqual(second1.SecondField, second2.SecondField);

                MyThirdClass third2 = (MyThirdClass)serializer.Deserialize(reader);
                Assert.AreEqual(third1.ThirdField, third2.ThirdField);
                Assert.AreEqual(third1.FourthField, third2.FourthField);
            }
        }
        public void HandmadeSerializer_Roundtrip_1()
        {
            MyFirstClass first1 = new MyFirstClass
            {
                FirstField = 73
            };
            MySecondClass second1 = new MySecondClass
            {
                SecondField = "Hello"
            };
            MyThirdClass third1 = new MyThirdClass
            {
                ThirdField  = true,
                FourthField = 123.45
            };

            HandmadeSerializer serializer = new HandmadeSerializer();
            MemoryStream       stream     = new MemoryStream();

            using (BinaryWriter writer = new BinaryWriter(stream))
            {
                serializer.Serialize(writer, first1);
                serializer.Serialize(writer, second1);
                serializer.Serialize(writer, third1);
            }

            byte[] buffer = stream.ToArray();

            stream = new MemoryStream(buffer);
            using (BinaryReader reader = new BinaryReader(stream))
            {
                MyFirstClass first2 = (MyFirstClass)serializer.Deserialize(reader);
                Assert.AreEqual(first1.FirstField, first2.FirstField);

                MySecondClass second2 = (MySecondClass)serializer.Deserialize(reader);
                Assert.AreEqual(second1.SecondField, second2.SecondField);

                MyThirdClass third2 = (MyThirdClass)serializer.Deserialize(reader);
                Assert.AreEqual(third1.ThirdField, third2.ThirdField);
                Assert.AreEqual(third1.FourthField, third2.FourthField);
            }
        }