public async Task CopyToAsyncWorksWithFileThreshold() { var data = Enumerable.Range(0, 1024).Select(b => (byte)b).Reverse().ToArray(); var inner = new MemoryStream(data); using var stream = new FileBufferingReadStream(inner, 100, bufferLimit: null, GetCurrentDirectory()); var withoutBufferMs = new MemoryStream(); await stream.CopyToAsync(withoutBufferMs); var withBufferMs = new MemoryStream(); stream.Position = 0; await stream.CopyToAsync(withBufferMs); Assert.Equal(data, withoutBufferMs.ToArray()); Assert.Equal(data, withBufferMs.ToArray()); }
public async Task CopyToAsyncWorksWithFileThreshold() { // 4K is the lower bound on buffer sizes var bufferSize = 4096; var mostExpectedWrites = 8; var data = Enumerable.Range(0, bufferSize * mostExpectedWrites).Select(b => (byte)b).Reverse().ToArray(); var inner = new MemoryStream(data); using var stream = new FileBufferingReadStream(inner, 100, bufferLimit: null, GetCurrentDirectory()); var withoutBufferMs = new NumberOfWritesMemoryStream(); await stream.CopyToAsync(withoutBufferMs); var withBufferMs = new NumberOfWritesMemoryStream(); stream.Position = 0; await stream.CopyToAsync(withBufferMs); Assert.Equal(data, withoutBufferMs.ToArray()); Assert.Equal(mostExpectedWrites, withoutBufferMs.NumberOfWrites); Assert.Equal(data, withBufferMs.ToArray()); Assert.InRange(withBufferMs.NumberOfWrites, 1, mostExpectedWrites); }
public async Task ReadThenCopyToAsyncWorks() { var data = Enumerable.Range(0, 1024).Select(b => (byte)b).ToArray(); var inner = new MemoryStream(data); using var stream = new FileBufferingReadStream(inner, 1024 * 1024, bufferLimit: null, GetCurrentDirectory()); var withoutBufferMs = new MemoryStream(); var buffer = new byte[100]; var read = stream.Read(buffer); await stream.CopyToAsync(withoutBufferMs); Assert.Equal(100, read); Assert.Equal(data.AsMemory(0, read).ToArray(), buffer); Assert.Equal(data.AsMemory(read).ToArray(), withoutBufferMs.ToArray()); }