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); } } }