public IAsyncBinaryReader CreateReader() { stream.Position = 0L; var sequence = new ChunkSequence(stream.ToArray(), 3); return(IAsyncBinaryReader.Create(sequence.ToReadOnlySequence())); }
public static void SeekFromEnd() { using var dest = new MemoryStream(); using var src = new ChunkSequence <byte>(data, 5).ToReadOnlySequence().AsStream(); Equal(data.Length - 1, src.Seek(-1L, SeekOrigin.End)); src.CopyTo(dest); Equal(1L, dest.Length); Equal(data[^ 1], dest.ToArray()[0]);
public static async Task WriteSequence() { var sequence = ChunkSequence.ToReadOnlySequence(new [] { "abc".AsMemory(), "def".AsMemory(), "g".AsMemory() }); await using var writer = new StringWriter(); await writer.WriteAsync(sequence); Equal("abcdefg", writer.ToString()); }
public static void SeekAndCopy() { using var dest = new MemoryStream(); using var src = new ChunkSequence <byte>(data, 5).ToReadOnlySequence().AsStream(); NotEqual(0L, src.Length); src.Position = data.Length; src.CopyTo(dest); Equal(0L, dest.Length); }
public static void WriteSequence() { var content = new byte[] { 1, 5, 8, 9 }; var sequence = new ChunkSequence <byte>(content, 2).ToReadOnlySequence(); using var ms = new MemoryStream(); ms.Write(sequence); ms.Position = 0; Equal(content, ms.ToArray()); }
public async Task AddAsync_NewSequence_SequenceAddedAndReturned() { var store = new DefaultSequenceStore(new IntegrationLoggerSubstitute <DefaultSequenceStore>()); var context = ConsumerPipelineContextHelper.CreateSubstitute(sequenceStore: store); var newSequence = new ChunkSequence("abc", 10, context); var result = await store.AddAsync(newSequence); result.Should().BeSameAs(newSequence); (await store.GetAsync <ChunkSequence>("abc")).Should().BeSameAs(newSequence); }
public static async Task ReadMemory() { var sequence = new ChunkSequence <byte>(new byte[] { 1, 5, 8, 9 }, 2).ToReadOnlySequence(); False(sequence.IsSingleSegment); var result = new byte[3]; IAsyncBinaryReader reader = IAsyncBinaryReader.Create(sequence); await reader.ReadAsync(result); Equal(1, result[0]); Equal(5, result[1]); Equal(8, result[2]); }
public async Task AddAsync_ExistingSequence_SequenceAbortedAndReplaced() { var store = new DefaultSequenceStore(new IntegrationLoggerSubstitute <DefaultSequenceStore>()); var context = ConsumerPipelineContextHelper.CreateSubstitute(sequenceStore: store); var originalSequence = new ChunkSequence("abc", 10, context); await store.AddAsync(originalSequence); var newSequence = new ChunkSequence("abc", 10, context); await store.AddAsync(newSequence); originalSequence.IsAborted.Should().BeTrue(); (await store.GetAsync <ChunkSequence>("abc")).Should().BeSameAs(newSequence); }
public static void CopyAfterReuse() { var dest = new MemoryStream(); using var src = new ChunkSequence <byte>(data, 5).ToReadOnlySequence().AsStream(); src.CopyTo(dest); Equal(data, dest.ToArray()); Equal(data.Length, src.Length); dest.Dispose(); dest = new MemoryStream(); src.Position = 0L; src.CopyTo(dest); Equal(data, dest.ToArray()); Equal(data.Length, src.Length); }
private protected static ReadOnlySequence <T> ToReadOnlySequence <T>(ReadOnlyMemory <T> memory, int chunkSize) => ChunkSequence.ToReadOnlySequence(Split(memory, chunkSize));