public async Task SeekAndReadAsync()
        {
            Random random = new Random(1);
            var    data   = GenerateData(1234567);

            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);
                        int length = random.Next(1, data.Length - offset);

                        Assert.AreEqual(offset, cachingStream.Seek(offset, SeekOrigin.Begin));
                        var read = await cachingStream.ReadExactlyAsync(length);

                        Assert.AreEqual(data.Skip(offset).Take(length), read);
                    }
                }
        }