public static async Task ReadWriteBuildWithRangeAsync(int threshold) { using var writer = new FileBufferingWriter(memoryThreshold: threshold, asyncIO: true); var bytes = new byte[500]; for (byte i = 0; i < byte.MaxValue; i++) { bytes[i] = i; } await writer.WriteAsync(bytes, 0, byte.MaxValue); await writer.WriteAsync(bytes.AsMemory(byte.MaxValue)); Equal(bytes.Length, writer.Length); using var manager = await writer.GetWrittenContentAsync(0..255); Equal(bytes.AsMemory(0, 255).ToArray(), manager.Memory.ToArray()); }
public static async Task CompatWithReadOnlySequenceAsync(int threshold) { await using var writer = new FileBufferingWriter(memoryThreshold: threshold, asyncIO: true); var bytes = new byte[500]; for (byte i = 0; i < byte.MaxValue; i++) { bytes[i] = i; } await writer.WriteAsync(bytes, 0, 450); await writer.WriteAsync(bytes.AsMemory(450)); Equal(bytes.Length, writer.Length); using var source = await writer.GetWrittenContentAsync(10); Equal(bytes, source.Sequence.ToArray()); }
public static async Task DrainToBufferAsync(int threshold) { using var writer = new FileBufferingWriter(memoryThreshold: threshold, asyncIO: true); var bytes = new byte[500]; for (byte i = 0; i < byte.MaxValue; i++) { bytes[i] = i; } await writer.WriteAsync(bytes, 0, byte.MaxValue); await writer.WriteAsync(bytes.AsMemory(byte.MaxValue)); Equal(bytes.Length, writer.Length); var ms = new ArrayBufferWriter <byte>(); await writer.CopyToAsync(ms); Equal(bytes, ms.WrittenSpan.ToArray()); }
public static async Task WriteDuringReadAsync() { using var writer = new FileBufferingWriter(); writer.Write(new byte[] { 1, 2, 3 }); using var manager = writer.GetWrittenContent(); Equal(new byte[] { 1, 2, 3 }, manager.Memory.ToArray()); Throws <InvalidOperationException>(writer.Clear); Throws <InvalidOperationException>(() => writer.WriteByte(2)); Throws <InvalidOperationException>(() => writer.GetWrittenContent()); await ThrowsAsync <InvalidOperationException>(() => writer.WriteAsync(new byte[2], 0, 2)); await ThrowsAsync <InvalidOperationException>(writer.GetWrittenContentAsync().AsTask); }
public async Task BufferingWriterAsync() { using var writer = new FileBufferingWriter(memoryThreshold: MemoryThreshold, asyncIO: true); foreach (var chunk in GetChunks()) { await writer.WriteAsync(chunk); } await writer.FlushAsync(); using var ms = new MemoryStream(content.Length); await writer.CopyToAsync(ms); }