public void UnsafeObjectStream_Reserve_ThrowsException_WhenReservingDataBeforeEndOfStream()
        {
            var stream = new UnsafeObjectStream();
            try
            {
                unsafe
                {
                    stream.Reserve(sizeof(UnsafeObjectTypeOne));
                    stream.FinalizeObject(sizeof(UnsafeObjectTypeOne));

                    stream.Reserve(sizeof(UnsafeObjectTypeOne));
                    stream.FinalizeObject(sizeof(UnsafeObjectTypeOne));

                    stream.SeekBeginning();

                    stream.Reserve(sizeof(UnsafeObjectTypeOne));
                }
            }
            finally
            {
                stream.ReleasePointers();
            }
        }
        public void UnsafeObjectStream_Reserve_ThrowsException_WhenReservingDataBeforeEndOfStream()
        {
            var stream = new UnsafeObjectStream();

            stream.AcquirePointers();
            try
            {
                unsafe
                {
                    stream.Reserve(sizeof(UnsafeObjectTypeOne));
                    stream.FinalizeObject(sizeof(UnsafeObjectTypeOne));

                    stream.Reserve(sizeof(UnsafeObjectTypeOne));
                    stream.FinalizeObject(sizeof(UnsafeObjectTypeOne));

                    stream.SeekBeginning();

                    Assert.That(() => stream.Reserve(sizeof(UnsafeObjectTypeOne)),
                        Throws.TypeOf<InvalidOperationException>());
                }
            }
            finally
            {
                stream.ReleasePointers();
            }
        }