public IAsyncBinaryReader CreateReader()
            {
                stream.Position = 0L;
                var sequence = new ChunkSequence(stream.ToArray(), 3);

                return(IAsyncBinaryReader.Create(sequence.ToReadOnlySequence()));
            }
Beispiel #2
0
 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());
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
 private protected static ReadOnlySequence <T> ToReadOnlySequence <T>(ReadOnlyMemory <T> memory, int chunkSize)
 => ChunkSequence.ToReadOnlySequence(Split(memory, chunkSize));