public async Task SeekAndCopyToAsync()
        {
            Random random = new Random(1);
            var    data   = GenerateData(54321);

            using (var memoryStream = new MemoryStream(data, writable: false))
                using (var cachingStream = new CachingStream(memoryStream, Ownership.Owns))
                {
                    for (int i = 0; i < 100; i++)
                    {
                        int offset = random.Next(data.Length - 100);

                        Assert.AreEqual(offset, cachingStream.Seek(offset, SeekOrigin.Begin));

                        using (var destination = new MemoryStream(data.Length))
                        {
                            await cachingStream.CopyToAsync(destination);

                            Assert.AreEqual(data.Skip(offset), destination.ToArray());
                        }
                    }
                }
        }